Работа с приватными реестрами Docker-образов
Managed Service for Kubernetes поддерживает интеграцию с приватными реестрами Docker-образов Yandex Container Registry и Yandex Cloud Registry. Сервис авторизуется в этих реестрах от имени облачного сервисного аккаунта, назначенного группе узлов. Это предпочтительный и наиболее безопасный способ, поскольку авторизация происходит автоматически с помощью короткоживущих IAM-токенов.
Назначить сервисный аккаунт группе узлов можно при создании или изменении кластера Managed Service for Kubernetes.
Чтобы сервисный аккаунт имел доступ к реестрам, ему должны быть назначены следующие роли на каталог с реестром:
- container-registry.images.puller — для Container Registry.
- cloud-registry.artifacts.puller — для Cloud Registry.
При такой интеграции в манифесте подов не нужно указывать какие-либо аутентификационные данные, например:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: cr.yandex/<идентификатор_реестра>/<имя_Docker-образа>:<тег>
Если по какой-то причине для авторизации в Container Registry или Cloud Registry невозможно использовать сервисный аккаунт с указанными ролями, используйте авторизованный ключ с неограниченным сроком жизни.
Важно
Использование долгоживущего ключа менее безопасно, чем использование IAM-токенов.
Чтобы авторизоваться в реестре с помощью ключа:
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id. -
Установите kubectl
и настройте его на работу с созданным кластером. -
Создайте авторизованный ключ и сохраните его в файл
key.json:yc iam key create \ --service-account-name <имя_сервисного_аккаунта> \ --output key.json -
Создайте секрет с данными ключа:
kubectl create secret docker-registry yc-registry-secret \ --docker-server=cr.yandex \ --docker-username=json_key \ --docker-password="$(cat key.json)" \ --namespace=<пространство_имен> -
Создайте YAML-файл манифеста со ссылкой на созданный секрет:
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: cr.yandex/<идентификатор_реестра>/<имя_Docker-образа>:<тег> imagePullSecrets: - name: yc-registry-secret -
Примените новую конфигурацию:
kubectl apply -f <путь_до_YAML-файла> -
Убедитесь, что образ успешно скачан из реестра:
kubectl get podsРезультат:
NAME READY STATUS RESTARTS AGE private-reg 1/1 Running 0 7s