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

  1. my-ns 命名空间中创建名为 my-app 的应用。
  2. 将应用镜像存储在注册表地址 internal-docker-registry.cpaas-system.svc/my-ns/my-app:v1
  3. 每个命名空间中的 默认 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

  1. 验证 my-ns 中默认 ServiceAccount 的镜像访问权限:

    kubectl auth can-i get images.registry.alauda.io --namespace my-ns --as=system:serviceaccount:my-ns:default
  2. 验证 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 的 DNS 解析正确
    • 注册表服务映射示例(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}'