docker - 无法从私有注册表中提取图像,需要身份验证错误
问题描述
我已经建立了一个带有自签名证书的私有 docker 注册表。
docker run -d -p 443:5000 --restart=always --name registry -v `pwd`/auth:/auth
-e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/domain.crt
-e REGISTRY_HTTP_TLS_KEY=/domain.key
domain.crt 和 domain.key 是使用 OpenSSL 生成的。
要从远程主机连接,
cp domain.crt /etc/pki/ca-trust/source/anchors/mydockerregistry.com.crt
update-ca-trust
systemctl daemon-reload
systemctl restart docker
在此之后能够从远程主机登录
docker login mydockerregistry.com --username=test
password: test
我能够将图像推/拉到这个注册表并且它是成功的。
同样,我尝试将这个镜像部署在 Kubernetes 集群中。我使用用户名和密码在注册表中创建了一个秘密。
kubectl create secret docker-registry my-registry --docker-server=mydockerregistry.com --docker-username=test --docker-password=test --docker-email=abc.com
另外,我从工作节点中的 docker 注册表步骤中完成了自签名证书,
cp domain.crt /etc/pki/ca-trust/source/anchors/mydockerregistry.com.crt
update-ca-trust
systemctl daemon-reload
systemctl restart docker
给定 deployment.yaml 文件的 imagePullSecrets 中的名称。我正在尝试在 Kubernetes 集群(Calico Network)中创建一个 POD,但它无法提取图像。
部署.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: test-image
labels:
app: test-image
chart: test-image
spec:
containers:
- name: {{ .Chart.Name }}
image: "mydockerregistry.com/test-image:latest"
imagePullPolicy: Always
imagePullSecrets:
- name: my-registry
警告 45 秒失败(x2 超过 59 秒)kubelet,kube-worker-02 无法提取映像“mydockerregistry.com/test-image:latest”:rpc 错误:代码 = 未知 desc = 未授权:需要身份验证
警告 45 秒失败
(59 秒以上 x2 ) kubelet, kube-worker-02 错误:ErrImagePull
我检查了 docker 注册表日志,
time="2020-01-13T14:58:05.269921112Z" level=error msg="error authentication user "": authentication failure" go.version=go1.11.2 http.request.host=mydockerregistry.com http.request.id =02fcccff-9a30-443c-8a00-48bcacb90e99 http.request.method=GET http.request.remoteaddr="10.76.112.148:35454" http.request.uri="/v2/test-image/manifests/latest" http. request.useragent="docker/1.13.1 go/go1.10.8 kernel/3.10.0-957.21.3.el7.x86_64 os/linux arch/amd64 UpstreamClient(Go-http-client/1.1)" vars.name=test -image vars.reference=最新
time="2020-01-13T14:58:05.269987492Z" level=warning msg="错误授权上下文:领域“注册表领域”的基本身份验证质询:身份验证失败" go.version=go1.11.2 http.request.host= mydockerregistry.com http.request.id=02fcccff-9a30-443c-8a00-48bcacb90e99 http.request.method=GET http.request.remoteaddr="10.76.112.148:35454" http.request.uri="/v2/ca- config-calc/manifests/latest" http.request.useragent="docker/1.13.1 go/go1.10.8 kernel/3.10.0-957.21.3.el7.x86_64 os/linux arch/amd64 UpstreamClient(Go-http- client/1.1)" vars.name=test-image vars.reference=latest
我能够做 docker login myregistrydomain 并从工作节点中提取图像
我在配置中缺少什么吗?
解决方案
我已经能够使用此链接成功地将图像从安全、私有的 docker 注册表中提取到 kubernetes 中。
推荐阅读
- express - 模型函数似乎无法在数据库中正常运行——express.js / knex
- python - 如何从网络抓取中解析空数据框?无类型错误
- r - 哪个 R 包使用异质处理和时间执行差异回归中的交错差异
- swift - 继承可编码类引发错误“必需的初始化程序”
- javascript - javascript中的console.log间隔
- python - 有没有办法从列表中快速选择多个项目?
- amazon-web-services - AWS NLB 的 IP 与基于实例的目标类型之间的实际区别是什么?
- python - Jupyter Notebook 中数据框中的某些列在 GitHub 中呈现为 HTML。如何不在 HTML 中呈现它?
- debugging - Blazor - Chrome 调试没有文件是源选项卡(没有文件:// 部分)
- r - 清理数据:R 中的多个拼写错误的字符串