在 Kubernetes 集群内部使用 Alauda Container Platform Registry
Alauda Container Platform (ACP) Registry 提供了安全的容器镜像管理,适用于 Kubernetes 工作负载。在集群内部部署应用时,请使用入口地址(例如 registry.cluster.local
)以优化性能和安全性。
部署示例应用
- 在
my-ns
命名空间中,开发人员创建一个名为 my-app
的应用。
- 应用镜像存储在注册表中,地址为
registry.cluster.local/my-ns/my-app:v1
。
- 每个命名空间中的 default ServiceAccount 会自动配置一个 imagePullSecret,以便从
registry.cluster.local
访问镜像。
示例部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: my-ns
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: main-container
image: registry.cluster.local/my-ns/my-app:v1
ports:
- containerPort: 8080
跨命名空间访问
为了允许 my-ns
中的用户从 shared-ns
拉取镜像,shared-ns
的管理员可以创建角色绑定以授予必要的权限。
示例角色绑定
# 访问共享命名空间中的镜像(需要权限)
kubectl create rolebinding cross-ns-pull \
--clusterrole=system:image-puller \
--serviceaccount=my-ns:default \
-n shared-ns
最佳实践
- 使用注册表:始终使用
registry.cluster.local
进行部署,以确保安全性和性能。
- 命名空间隔离:利用命名空间隔离来更好地管理和保护镜像。
- 使用基于命名空间的镜像路径:
registry.cluster.local/<namespace>/<image>:<tag>
。
- 角色绑定:使用角色绑定来管理用户和服务账户的跨命名空间访问。
验证清单
- 验证
my-ns
中默认 ServiceAccount 的镜像可访问性:
kubectl auth can-i get images.registry.alauda.io --namespace my-ns --as=system:serviceaccount:my-ns:default
- 验证
my-ns
中用户的镜像可访问性:
kubectl auth can-i get images.registry.alauda.io --namespace my-ns --as=<username>
故障排除
- 镜像拉取错误:检查 Pod 规格中的 imagePullSecrets,确保其配置正确。
- 权限被拒绝:确保用户或 ServiceAccount 在目标命名空间中具有必要的角色绑定。
- 网络问题:验证网络策略和服务配置,以确保与内部注册表的连接。