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

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

    Рекомендации по доступу к реестру

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

    Развертывание примерного приложения

    1. Создайте приложение с именем my-app в namespace my-ns.
    2. Сохраните образ приложения в реестре по адресу image-registry.cpaas-system.svc/my-ns/my-app:v1.
    3. По умолчанию ServiceAccount в каждом namespace автоматически настраивается с imagePullSecret для доступа к образам из image-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: image-registry.cpaas-system.svc/my-ns/my-app:v1
            ports:
            - containerPort: 8080

    Доступ между namespace

    Чтобы разрешить пользователям из my-ns вытягивать образы из shared-ns, администратор shared-ns может создать role binding, предоставляющий необходимые права.

    Пример Role Binding

    # Доступ к образам из другого namespace (требуются права)
    kubectl create rolebinding cross-ns-pull \
      --clusterrole=system:image-puller \
      --serviceaccount=my-ns:default \
      -n shared-ns

    Лучшие практики

    • Использование реестра: Всегда используйте image-registry.cpaas-system.svc для развертываний, чтобы обеспечить безопасность и производительность.
    • Изоляция namespace: Используйте изоляцию namespace для повышения безопасности и управления образами.
      • Используйте пути образов, основанные на namespace: image-registry.cpaas-system.svc/<namespace>/<image>:<tag>.
    • Управление доступом: Используйте role binding для управления доступом между namespace для пользователей и сервисных аккаунтов.

    Контрольный список проверки

    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>

    Устранение неполадок

    • Ошибки при загрузке образа: Проверьте imagePullSecrets в спецификации pod и убедитесь, что они настроены корректно.
    • Отказ в доступе: Убедитесь, что у пользователя или ServiceAccount есть необходимые role binding в целевом namespace.
    • Проблемы с сетью: Проверьте сетевые политики и конфигурацию сервисов для обеспечения подключения к внутреннему реестру.
    • Сбои DNS: Проверьте содержимое файла /etc/hosts на узле, убедитесь, что разрешение DNS для image-registry.cpaas-system.svc настроено правильно.
      • Проверьте конфигурацию /etc/hosts на узле для корректного разрешения DNS image-registry.cpaas-system.svc
      • Пример отображения сервиса реестра (ClusterIP сервиса image-registry):
        # /etc/hosts
        127.0.0.1   localhost localhost.localdomain
        10.4.216.11 image-registry.cpaas-system image-registry.cpaas-system.svc image-registry.cpaas-system.svc.cluster.local # cpaas-generated-node-resolver
      • Как получить текущий ClusterIP image-registry:
        kubectl get svc -n cpaas-system image-registry -o jsonpath='{.spec.clusterIP}'