Использование частного реестра docker внутри kubernetes

Настройка клиентского кластера k8s с помощью реестра контейнеров Digital Ocean.

Требования

  • Кластер Kubernetes (доступ к кластеру через kubectl)
  • Частный реестр docker (я использую Digital Ocean для демонстрации)
  • Образ докера

Доступ к публичным образам в публичном реестре docker, таком как Dockerhub, является стандартным поведением кластера kubernetes, если вы не хотите интегрировать свой собственный частный реестр для доступа к частным образам docker по очевидным причинам безопасности. Поставщики облачных услуг, такие как AWS, Digital Ocean, обеспечивают простую интеграцию собственного реестра docker в управляемый kubernetes.

Но настройка пустого кластера kubernetes для доступа к частному реестру включает в себя несколько шагов, в том числе обновление deployment/pod yaml. Для примера я использую реестр докеров Digital Ocean. Но шаги одинаковы для большинства провайдеров.

Если у вас нет кластера для демонстрации. Посмотрите на Kind. Kind поможет вам запустить кластер kubernetes локально за считанные минуты. Или же вы можете использовать Katacoda или Play with kubernetes.

Шаг 1

Dockerconfig.json

Сначала нам нужно настроить кластер для аутентификации в частном реестре. Кластер Kubernetes использует секрет типа kubernetes.io/dockerconfigjson для аутентификации в реестре контейнеров, чтобы получить приватный образ. Мы можем сделать это двумя методами. Первый метод — это использование файла config.json, а второй метод требует вашего имени пользователя, пароля и электронной почты.
В реестре контейнеров Digital Ocean вы можете загрузить файл конфигурации, доступный только для чтения, по кнопке Home Actions реестра контейнеров. Этот же файл можно найти в ~/.docker/config.json при входе в реестр docker на локальной машине.

Использование config.json

kubectl create secret generic registry-credential 
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> 
    --type=kubernetes.io/dockerconfigjson
Вход в полноэкранный режим Выйти из полноэкранного режима

или

Использование учетных данных docker

kubectl create secret docker-registry registry-credential --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
Войти в полноэкранный режим Выйти из полноэкранного режима

Проверить созданный секрет

kubectl get secret registry-credential --output=yaml
Войдите в полноэкранный режим Выйти из полноэкранного режима

Вывод выглядит примерно так:

apiVersion: v1
kind: Secret
metadata:
  ...
  name: registry-credential
  ...
data:
  .dockerconfigjson: eyJodHRwczovL2luZGV4...
type: kubernetes.io/dockerconfigjson
Войти в полноэкранный режим Выйти из полноэкранного режима

Значение поля .dockerconfigjson представляет собой base64 представление ваших учетных данных Docker. Чтобы преобразовать данные в читабельный формат, выполните следующую команду.

kubectl get secret registry-credential --output="jsonpath={.data..dockerconfigjson}" | base64 --decode
Войти в полноэкранный режим Выйти из полноэкранного режима

Шаг 2

Редактирование капсулы

После создания секрета мы можем обновить конфигурацию pod, чтобы использовать созданный секрет для извлечения изображений. Обновите spec-сессию вашего pod следующим образом.

spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: registry-credential
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Чтобы извлечь образ из частного реестра, Kubernetes нужны учетные данные. Поле imagePullSecrets в конфигурационном файле указывает, что Kubernetes должен получить учетные данные из Secret с именем registry-credential.
Создайте Pod, использующий ваш Secret, и убедитесь, что Pod запущен.

kubectl apply -f pod.yaml
kubectl get pod <pod-name>
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Если вы не хотите добавлять imagePullSecrets в конфигурацию стручка или вам нужно установить разные реестры для каждого пространства имен по умолчанию, перейдите к шагу 3.

Шаг 3

Добавление секретов извлечения изображений в учетную запись сервиса

Если вы хотите получить предварительное представление об учетных записях служб, просмотрите этот документ
Чтобы добавить наш новый секрет в пространство имен, мы должны изменить учетную запись сервиса и добавить наше новое имя секрета в массив imagePullSecret внутри учетной записи сервиса.
Мы можем загрузить манифест учетной записи службы следующим образом

kubectl get serviceaccounts default -o yaml > ./service-account.yaml
Войти в полноэкранный режим Выйти из полноэкранного режима

затем обновите его следующим образом:

apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2015-08-07T22:02:39Z
  name: default
  namespace: default
  uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudge
imagePullSecrets:
- name: registry-credential
Войти в полноэкранный режим Выйти из полноэкранного режима

Наконец, замените служебную учетную запись на обновленный файл манифеста

kubectl replace serviceaccount default -f ./service-account.yaml
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь, когда новый Pod создается в текущем пространстве имен и использует стандартный ServiceAccount, у нового Pod автоматически устанавливается поле spec.imagePullSecrets.


Ссылки:
Извлечение изображения из частного реестра
Добавить секрет извлечения изображения в учетную запись службы
Добавить секрет извлечения изображения в учетную запись службы

Оцените статью
Procodings.ru
Добавить комментарий