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 create
d это.
однако 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. На самом деле есть две проблемы с этим файлом:
- похоже фактически превратился в другой файл, т. е.
.docker/config.json
- информация об аутентификации в этом файле обернута дополнительным
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-кодированный секрет очень вводит в заблуждение. Пожалуйста, проверьте ввод пользователя и пожаловаться, если он содержит ошибки.