• Русский
  • Using Alauda Container Platform Registry in Kubernetes Clusters

    Реестр Alauda Container Platform (ACP) обеспечивает безопасное управление образами контейнеров для рабочих нагрузок Kubernetes.

    Содержание

    Registry Access Guidelines

    • Рекомендуется использовать внутренний адрес: Для образов, хранящихся в реестре кластера, всегда отдавайте предпочтение внутреннему сервисному адресу internal-docker-registry.cpaas-system.svc при развертывании внутри кластера. Это обеспечивает оптимальную сетевую производительность и избегает ненужной внешней маршрутизации.
    • Использование внешнего адреса: Внешний ingress-домен (например, registry.cluster.local) предназначен в первую очередь для:
      • загрузки/выгрузки образов из вне кластера (например, с машин разработчиков, CI/CD систем)
      • операций вне кластера, требующих доступа к реестру

    Deploy Sample Application

    1. Создайте приложение с именем my-app в пространстве имён my-ns.
    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 может создать role binding для предоставления необходимых разрешений.

    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>.
    • Контроль доступа: Используйте role binding для управления доступом между пространствами имён для пользователей и сервисных аккаунтов.

    Verification Checklist

    1. Проверьте доступность образа для ServiceAccount по умолчанию в my-ns:

      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

    • Ошибки при загрузке образа: Проверьте imagePullSecrets в спецификации pod и убедитесь, что они настроены корректно.
    • Отказ в доступе: Убедитесь, что у пользователя или ServiceAccount есть необходимые role binding в целевом пространстве имён.
    • Проблемы с сетью: Проверьте сетевые политики и конфигурации сервисов для обеспечения подключения к внутреннему реестру.
    • Сбои DNS: Проверьте содержимое файла /etc/hosts на узле, убедитесь, что разрешение DNS для internal-docker-registry.cpaas-system.svc настроено корректно.
      • Проверьте конфигурацию /etc/hosts на узле для корректного разрешения DNS internal-docker-registry.cpaas-system.svc
      • Пример отображения сервиса реестра (ClusterIP сервиса internal-docker-registry):
        # /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
      • Как получить текущий ClusterIP internal-docker-registry:
        kubectl get svc -n cpaas-system internal-docker-registry -o jsonpath='{.spec.clusterIP}'