Автоматически использовать секрет при извлечении из личного реестра - PullRequest
9 голосов
/ 18 марта 2019

Можно ли глобально (или хотя бы для каждого пространства имен) настроить kubernetes на использование секрета извлечения изображений при подключении к частному репо? Есть два варианта использования:

  1. когда пользователь указывает контейнер в нашем личном реестре при развертывании
  2. когда пользователь указывает график Хелма на наше частное репо (и поэтому мы не можем контролировать секретный тег извлечения изображения).

Я знаю, что это можно сделать на основе учетной записи службы , но без написания контроллера, добавляющего это к каждой новой созданной учетной записи службы, это может привести к некоторому беспорядку.

Есть ли способ установить это глобально, поэтому, если kube пытается извлечь из реестра X, он использует секретный Y?

Спасибо

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Насколько я знаю, обычно по умолчанию serviceAccount отвечает за вытягивание изображений. Чтобы легко добавить imagePullSecrets в учетную запись службы, вы можете использовать команду patch :

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "mySecret"}]}'

Возможно использовать kubectl patch в сценарии, который вставляет imagePullSecrets на serviceAccounts во всех пространствах имен.

Если вам сложно управлять несколькими пространствами имен, вы можете взглянуть на kubernetes-replicator , который синхронизирует ресурсы между пространствами имен.

Решение 2:
В этом разделе документа объясняется, как вы можете установить личный реестр на основе узла:

Вот рекомендуемые шаги по настройке ваших узлов для использования частный реестр. В этом примере запустите их на своем настольном компьютере / ноутбуке:

  1. Запустите docker login [server] для каждого набора учетных данных, которые вы хотите использовать. Это обновление $HOME/.docker/config.json.
  2. Просмотрите $HOME/.docker/config.json в редакторе, чтобы убедиться, что он содержит только те учетные данные, которые вы хотите использовать.
  3. Получите список ваших узлов, например:

    • Если вы хотите имена:
      node = $ (kubectl получить узлы -o jsonpath = '{range.items [*]. метаданные} {. name} {end}')

    • Если вы хотите получить IP-адреса:
      node = $ (kubectl получить узлы -o jsonpath = '{range .items [*]. status.addresses [? (@. type == "ExternalIP")]} {. address} {end}')

  4. Скопируйте ваш локальный .docker / config.json в один из приведенных выше списков путей поиска. например:

    для n в $ узлах; do scp ~ / .docker / config.json root @ $ n: /var/lib/kubelet/config.json; сделано

Решение 3:
Я обнаружил, что (очень грязно!) Не нужно настраивать imagePullSecret для развертывания / serviceAccount:

  1. Установить ImagePullPolicy: IfNotPresent
  2. Потянув изображение в каждом узле
    2.1. вручную, используя docker pull myrepo/image:tag.
    2.2. используя скрипт или инструмент типа docker-puller для автоматизации этого процесса.

Ну, я думаю, мне не нужно объяснять, насколько это ужасно.

PS : Если это поможет, я обнаружил проблему на kubernetes / kops относительно возможности создания глобальной конфигурации для частного реестра.

0 голосов
/ 18 марта 2019

Два простых вопроса, где вы используете свой кластер k8s? Где находится ваш реестр? Здесь есть несколько подходов к вашей проблеме: https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry

...