Kubernetes PullImageError с использованием Docker Hub с частным изображением

я изо всех сил пытаюсь заставить Кубернетеса работать с моим частным hub.docker.com образ реестра.

я использую версию kubectl:Client Version: version.Info{Major:"1", Minor:"1+", GitVersion:"v1.1.0-alpha.0.1588+e44c8e6661c931", GitCommit:"e44c8e6661c931f7fd434911b0d3bca140e1df3a", GitTreeState:"clean"} Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.3", GitCommit:"6a81b50c7e97bbe0ade075de55ab4fa34f049dc2", GitTreeState:"clean"}

и Бродяга 1.7.4 на Mac OS X Yosemite 10.10.5

я следовал инструкциям, приведенным здесь: https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/user-guide/images.md#pre-pulling-images

в двух словах, он говорит, что вы должны войти в систему base64 кодировать содержание полученного .docker/config.json, и используйте это в документе yaml следующим образом:

apiVersion: v1
kind: Secret
metadata:
  name: myregistrykey
data:
  .dockercfg: eyAiYXV0aHMiOiB7ICJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOiB7ICJhdXRoIjogImFXNTBjbWx1YzJsak9tSTJVVTR5Z...h1YkBpbnRyaW5zaWMud29ybGQiIH0gfSB9Cg==
type: kubernetes.io/dockercfg

тогда скормите это kubectl. Затем я использовал полученный ключ (здесь называется myregistrykey) в моем определении РМО:

apiVersion: v1
kind: Pod
metadata:
  name: authorities-backend
spec:
  containers:
    - name: authorities-backend
      image: intrinsic/authorities-backend:latest
  imagePullSecrets:
    - name: myregistrykey

и kubectl created это.

однако kubectl не удается получить изображение:

[root@kubernetes-master intrinsic]# kubectl get pods
NAME                  READY     STATUS           RESTARTS   AGE
authorities-backend   0/1       PullImageError   0          7m
докер тянуть на Kubernetes мастер работал.

что я не хватает?

обновление

в определении pod выше я опустил указать хост реестра, т. е. docker.Ио. Исправляя это, она становится: image: docker.io/intrinsic/authorities-backend:latest Однако проблема сохраняется. Делать kubectl get events -w получает меня: 6s 0s 2 authorities-backend Pod spec.containers{authorities-backend} Failed {kubelet 10.245.1.3} Failed to pull image "docker.io/intrinsic/authorities-backend": image pull failed for docker.io/intrinsic/authorities-backend, this may be because there are no credentials on this request. details: (Error: image intrinsic/authorities-backend:latest not found) Я знаю, что секрет был должным образом зарегистрирован, так как у меня есть под kubectl get secrets: NAME TYPE DATA AGE default-token-a7s5n kubernetes.io/service-account-token 2 51m myregistrykey kubernetes.io/dockercfg 1 50m

все еще в замешательстве...

Кандид

2 ответов


документация устарела, поскольку она относится к .dockercfg вместо .docker/config.json. Я обновлю его.

при использовании .docker/config.json формат, вам нужно установить type: kubernetes.io/dockerconfigjson вместо type: kubernetes.io/.dockercfg.

поддержка type: kubernetes.io/dockerconfigjson был добавлен в v1.1.0 таким образом, он поддерживается вашим сервером, но не поддерживается вашим клиентом (который является v1.1.0-Альфа, которая предшествует v1.1.0).

при использовании type: kubernetes.io/dockerconfigjson, он должен подтвердить ваш секрет содержание.

С type: kubernetes.io/dockerconfigjson, вы хотите сохранить auths фантик.


Итак, я продолжал исследовать Интернет для ответа на мою проблему и в конце концов нашел это:

https://github.com/kubernetes/kubernetes/issues/7954#issuecomment-115241561

в самом конце нити, jjw27 прибил его. The документация kubernetes называет .dockercfg.json файл просто сказать,что его содержимое должно быть закодировано в base64. На самом деле есть две проблемы с этим файлом:

  1. похоже фактически превратился в другой файл, т. е. .docker/config.json
  2. информация об аутентификации в этом файле обернута дополнительным auths объекты, от которых вы должны избавиться.

цитируя jjw27

не работает:

{
  "auths": {
    "hub.example.com:1024": {
      "auth": "asdf=",
      "email": "example@example.com"
     }
  }
}

работает:

{
  "hub.example.com:1024": {
    "auth": "asdf=",
    "email": "example@example.com"
  }
}

Google, пожалуйста, обновите этот документ!!

сообщение Kubernetes devs #2: Кроме того, не жаловаться на уродливый base64-кодированный секрет очень вводит в заблуждение. Пожалуйста, проверьте ввод пользователя и пожаловаться, если он содержит ошибки.