在 Kubernetes 集群内部使用 Alauda Container Platform Registry

Alauda Container Platform (ACP) Registry 提供了安全的容器镜像管理,适用于 Kubernetes 工作负载。在集群内部部署应用时,请使用入口地址(例如 registry.cluster.local)以优化性能和安全性。

部署示例应用

  1. my-ns 命名空间中,开发人员创建一个名为 my-app 的应用。
  2. 应用镜像存储在注册表中,地址为 registry.cluster.local/my-ns/my-app:v1
  3. 每个命名空间中的 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>
  • 角色绑定:使用角色绑定来管理用户和服务账户的跨命名空间访问。

验证清单

  1. 验证 my-ns 中默认 ServiceAccount 的镜像可访问性:
kubectl auth can-i get images.registry.alauda.io --namespace my-ns --as=system:serviceaccount:my-ns:default
  1. 验证 my-ns 中用户的镜像可访问性:
kubectl auth can-i get images.registry.alauda.io --namespace my-ns --as=<username>

故障排除

  • 镜像拉取错误:检查 Pod 规格中的 imagePullSecrets,确保其配置正确。
  • 权限被拒绝:确保用户或 ServiceAccount 在目标命名空间中具有必要的角色绑定。
  • 网络问题:验证网络策略和服务配置,以确保与内部注册表的连接。