Google Cloud Kubernetes получает доступ к частным изображениям, размещенным в Docker Hub - PullRequest
0 голосов
/ 13 июня 2018

Возможно ли вытащить личные изображения из Docker Hub в кластер Google Cloud Kubernetes?Рекомендуется ли это, или мне нужно отправить свои личные изображения также в Google Cloud?

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

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Существует 3 типа реестров:

  1. Public (Docker Hub, Docker Cloud, Quay и т. Д.)
  2. Private: это реестр, работающий в вашей локальной сети.,Примером может служить запуск док-контейнера с образом реестра.
  3. Restricted: это один реестр, для проверки которого необходимы некоторые учетные данные.Реестр контейнеров Google (GCR) в качестве примера.

Как вы хорошо заметили, в общедоступном реестре, таком как Docker Hub, вы можете иметь личные изображения.

Частные и ограниченныереестры, очевидно, более безопасны, поскольку один из них даже не подключен к Интернету (в идеале), а другому нужны учетные данные.

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

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

0 голосов
/ 13 июня 2018

Нет ограничений на использование любого реестра, который вы хотите.Если вы просто используете имя изображения (например, image: nginx) в спецификации pod, изображение будет извлечено из общедоступного реестра концентратора докеров с тегом, принятым как: last

Как упомянуто в документации Kubernetes :

Свойство image контейнера поддерживает тот же синтаксис, что и команда docker, включая частные реестры и теги.Частным реестрам могут потребоваться ключи для чтения изображений из них.

Использование реестра контейнеров Google

Kubernetes имеет встроенную поддержку реестра контейнеров Google (GCR) при работе в Google.Вычислительный двигатель (GCE).Если вы работаете в кластере на GCE или в Google Kubernetes Engine, просто используйте полное имя изображения (например, gcr.io/my_project/image:tag).Все модули в кластере будут иметь доступ на чтение изображений в этом реестре.

Использование реестра контейнеров AWS EC2

Kubernetes имеет встроенную поддержку реестра контейнеров AWS EC2 , когдаузлы являются экземплярами AWS EC2.Просто используйте полное имя изображения (например, ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag) в определении Pod.Все пользователи кластера, которые могут создавать модули, смогут запускать модули, которые используют любые изображения в реестре ECR.

Использование реестра контейнеров Azure (ACR)

При использовании Реестр контейнеров Azure вы можете аутентифицировать, используя либо администратора, либо участника службы.В любом случае аутентификация выполняется через стандартную аутентификацию Docker.В этих инструкциях предполагается использование инструмента командной строки azure-cli.

Сначала необходимо создать реестр и сгенерировать учетные данные. Полная документация для этого находится в документации реестра Azure-контейнера . * 1030.*

Настройка узлов для аутентификации в частном репозитории

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

  1. Запустите docker login [server] для каждого набора учетных данных, которые вы хотите использовать.Это обновляет $HOME/.docker/config.json.
  2. Просмотр $HOME/.docker/config.json в редакторе, чтобы убедиться, что он содержит только те учетные данные, которые вы хотите использовать.
  3. Получите список ваших узлов, например:
    • если вам нужны имена: nodes=$(kubectl get nodes -o jsonpath='{range.items[*].metadata}{.name} {end}')
    • если вы хотите получить IP-адреса: nodes=$(kubectl get nodes -o jsonpath='{range .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address} {end}')
  4. Скопируйте ваш локальный .docker / config.jsonв домашний каталог root на каждом узле.
    • например: for n in $nodes; do scp ~/.docker/config.json root@$n:/root/.docker/config.json; done

Варианты использования:

Существует несколько решений для настройкичастные реестры.Вот несколько распространенных вариантов использования и предлагаемых решений.

  1. Кластер, в котором работают только непатентованные (например, с открытым исходным кодом) изображения.Не нужно скрывать изображения.
    • Использование общедоступных изображений в Docker-концентраторе.
      • Настройка не требуется.
      • В GCE / Google Kubernetes Engine автоматически используется локальное зеркало для повышения скорости и доступности.
  2. Кластер запускает некоторые проприетарные образы, которые должны быть скрыты за пределами компании, но видимы для всех пользователей кластера.
    • Использование размещенного частного реестра Docker.
      • Он может быть размещен в Docker Hub или в другом месте.
      • Вручную настройте .docker/config.json на каждом узле, как описано выше.
    • Или,запустите внутренний закрытый реестр за вашим брандмауэром с открытым доступом для чтения.
      • Конфигурация Kubernetes не требуется.
    • Или при использовании GCE / Google Kubernetes Engine используйте Реестр контейнеров Google проекта.
      • Это будет работать лучше с автоматическим масштабированием кластера, чем ручная конфигурация узла.
    • Или в кластере, где изменение конфигурации узла неудобно, используйте imagePullSecrets .
  3. Кластер с проприетарными изображениями, некоторые из которых требуют более строгого доступаконтроль.
    • Убедитесь, что контроллер доступа AlwaysPullImages активен.В противном случае все модули могут иметь доступ ко всем изображениям.
    • Переместить конфиденциальные данные в «секретный» ресурс вместо упаковки их в изображение.
  4. Мультикластер арендаторов, где каждому арендатору необходим собственный частный реестр.
    • Убедитесь, что AlwaysPullImages контроллер доступа активен.В противном случае все модули всех арендаторов потенциально имеют доступ ко всем изображениям.
    • Запустите личный реестр с необходимыми полномочиями.
    • Создайте учетные данные реестра для каждого арендатора, поместите в секрет и заполните секрет для каждогопространство имен арендатора.
    • Арендатор добавляет этот секрет к imagePullSecrets каждого пространства имен.

Рассмотрите возможность чтения Извлечение изображения изЛичный реестр документ, если вы решите использовать личный реестр.

...