Using Alauda Container Platform Registry in Kubernetes Clusters
Alauda Container Platform (ACP) Registry 为 Kubernetes 工作负载提供安全的容器镜像管理。
目录
Registry Access Guidelines
- 推荐使用内部地址:对于存储在集群注册表中的镜像,部署时优先使用集群内部服务地址
internal-docker-registry.cpaas-system.svc
,以确保最佳的网络性能并避免不必要的外部路由。
- 外部地址使用场景:外部入口域名(例如
registry.cluster.local
)主要用于:
- 集群外部(如开发人员机器、CI/CD 系统)推送/拉取镜像
- 需要访问注册表的集群外部操作
Deploy Sample Application
- 在
my-ns
命名空间中创建名为 my-app
的应用。
- 将应用镜像存储在注册表地址
internal-docker-registry.cpaas-system.svc/my-ns/my-app:v1
。
- 每个命名空间的 默认 ServiceAccount 会自动配置 imagePullSecret,用于访问
internal-docker-registry.cpaas-system.svc
上的镜像。
示例 Deployment:
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: internal-docker-registry.cpaas-system.svc/my-ns/my-app:v1
ports:
- containerPort: 8080
Cross-Namespace Access
为了允许 my-ns
的用户拉取 shared-ns
的镜像,shared-ns
的管理员可以创建角色绑定以授予必要权限。
Example Role Binding
# 访问共享命名空间的镜像(需要权限)
kubectl create rolebinding cross-ns-pull \
--clusterrole=system:image-puller \
--serviceaccount=my-ns:default \
-n shared-ns
Best Practices
- 注册表使用:部署时始终使用
internal-docker-registry.cpaas-system.svc
,确保安全和性能。
- 命名空间隔离:利用命名空间隔离实现更好的安全性和镜像管理。
- 使用基于命名空间的镜像路径:
internal-docker-registry.cpaas-system.svc/<namespace>/<image>:<tag>
。
- 访问控制:通过角色绑定管理跨命名空间的用户和 ServiceAccount 访问权限。
Verification Checklist
- 验证
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>
Troubleshooting
- 镜像拉取错误:检查 Pod 规范中的 imagePullSecrets,确保配置正确。
- 权限拒绝:确认用户或 ServiceAccount 在目标命名空间拥有必要的角色绑定。
- 网络问题:验证网络策略和服务配置,确保能连接到内部注册表。
- DNS 解析失败:检查节点上的
/etc/hosts
文件内容,确保 internal-docker-registry.cpaas-system.svc
的 DNS 解析配置正确。
- 验证节点的 /etc/hosts 配置,确保正确解析
internal-docker-registry.cpaas-system.svc
- 注册表服务映射示例(internal-docker-registry 服务的 ClusterIP):
# /etc/hosts
127.0.0.1 localhost localhost.localdomain
10.4.216.11 internal-docker-registry.cpaas-system internal-docker-registry.cpaas-system.svc internal-docker-registry.cpaas-system.svc.cluster.local # cpaas-generated-node-resolver
- 如何获取
internal-docker-registry
当前 ClusterIP:
kubectl get svc -n cpaas-system internal-docker-registry -o jsonpath='{.spec.clusterIP}'