Получение из частного репо в кубернетах завершается ошибкой с "Секретными" учетными данными докера "недопустимы: данные [.dockerconfigjson]: Требуемое значение"
Я пытаюсь извлечь изображения из репозитория Docker Hub. Я следил за документацией, найденной здесь: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
Однако после ввода команды:
kubectl создать секретные общие учетные данные докеров --from-file= / my / local / path / to /.docker / config.json --type=kubernetes.io / dockerconfigjson
Я получаю следующую ошибку:
Секрет "docker-credentials" недействителен: data [.dockerconfigjson]: Обязательное значение
Я попытался удалить config.json и повторно войти в систему, но без изменений в поведении.
версия докера печатает:
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:29:52 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:28:22 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
Версия kubectl печатает:
Client Version: version.Info{
Major:"1",
Minor:"17",
GitVersion:"v1.17.2",
GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89",
GitTreeState:"clean",
BuildDate:"2020-01-18T23:30:10Z",
GoVersion:"go1.13.5",
Compiler:"gc",
Platform:"linux/amd64"
}
Server Version: version.Info{
Major:"1",
Minor:"15",
GitVersion:"v1.15.2",
GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568",
GitTreeState:"clean",
BuildDate:"2019-08-05T09:15:22Z",
GoVersion:"go1.12.5",
Compiler:"gc",
Platform:"linux/amd64"
}
config.json выглядит так:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "secret-stuff"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.5 (linux)"
}
}
На данный момент я могу ввести учетные данные вручную, но я хотел бы понять, что происходит не так. любая помощь будет оценена!
3 ответа
Я столкнулся с той же проблемой с
kubectl create secret generic --type=kubernetes.io/dockerconfigjson
(« Секрет« xxx »недействителен: данные [.dockerconfigjson]: Required value »), и это произошло из-за ошибки в командной строке, которая, я думаю, есть и в команде Маркуса.
Я имел:
--from-file=/run/user/xxxx/containers/auth.json
Это должно было быть:
--from-file=.dockerconfigjson=/run/user/xxxx/containers/auth.json
Я неправильно интерпретировал параметр --from-file как путь к файлу, но он принимает значение key = value, которое, как я полагаю, в данном случае должно быть ключом ".dockerconfigjson".
Ответ Кроу намекает на --from-file как на виновника, но я подумал, что добавлю ответ, чтобы разъяснить, чего не хватает. (И я думаю, что дело в файле
type
отсутствие сообщения вводило в заблуждение, потому что в команде есть опция --type, поэтому я пропустил этот ответ изначально, когда смотрел на этот вопрос за помощью.)
Обратите внимание, что я получил подсказку о том, что было не так, запустив kubectl в подробном режиме (--v = N, см. Https://kubernetes.io/docs/reference/kubectl/cheatsheet/#kubectl-output-verbosity-and-debugging ), в котором kubectl сообщал серверу API структуру ресурса Secret, а структура не говорила «.dockerconfigjson», как я ожидал из примеров Secret YAML в документации Kubernetes.
При создании secret
вы не указали Type
файла, из которого вы будете читать, kubectl
не прочитал файл должным образом.
Список типов следующий:
SecretTypeOpaque SecretType = "Opaque"
[...]
SecretTypeServiceAccountToken SecretType = "kubernetes.io/service-account-token"
[...]
SecretTypeDockercfg SecretType = "kubernetes.io/dockercfg"
[...]
SecretTypeDockerConfigJSON SecretType = "kubernetes.io/dockerconfigjson"
[...]
SecretTypeBasicAuth SecretType = "kubernetes.io/basic-auth"
[...]
SecretTypeSSHAuth SecretType = "kubernetes.io/ssh-auth"
[...]
SecretTypeTLS SecretType = "kubernetes.io/tls"
[...]
SecretTypeBootstrapToken SecretType = "bootstrap.kubernetes.io/token"
который вы можете найти на Kubernetes GitHub kubernetes / pkg / apis / core / types.go
Правильная команда в вашем случае будет
kubectl create secret generic docker-credentials --from-file=.dockerconfigjson=path/to/.docker/config.json --type=kubernetes.io/dockerconfigjson
Пожалуйста, обратите внимание на --from-file=.dockerconfigjson=path/to/.docker/config.json
, вы должны только редактировать path/to/.docker/config.json
Вы не запускали команду входа в docker с частным репозиторием docker, поэтому файл config.json не содержит информации для аутентификации. Вы можете сослаться на приведенный ниже образец файла.
Пример:
{
"auths": {
"https://dockerhub.xxxxx.com": {
"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"email": "xxxxx@xxxxx.com"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.06.1-ce (linux)"
}
}