问题背景:使用node节点在docker拉取镜像时报错,登入仓库同样报错;使用master登陆仓库、拉取镜像正常,node网络出口是master做的NAT转发。
报错如下:
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate is valid for xxxx, not registry-1.docker.io
尝试了dockerhub、公有云/私有仓库都是一样的报错
查看了网上的一些解决方案,Error response from daemon相关的报错有很多种,certificate证书相关问题很少有解答。
常规方案无非两种:
1、配置/etc/docker/daemon.json
vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries": [ "registry-1.docker.io"]
}
systemctl daemon-reload
systemctl restart docker
2、修改dns
配置/etc/hosts或修改/etc/resolv.conf
随便试了试,以上都没有解决问题。看报错像是证书验证的问题,继续尝试处理。
首先看apiserver证书有没有过期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
使用openssl重新尝试了证书配置,结果也没什么卵用。因为这个node节点一开始也是能pull镜像的,所以没有过多纠结这个问题。
最后考虑到可能是暴露的pod影响了出口验证,但pod之前就清理了,可能存在什么配置残留,粗暴重启master,结果网络出现问题,报错超时:
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
检查了master的nat,node路由、辅助网卡、辅助ip等终于修好。
继续尝试登陆镜像仓库,测试登陆腾讯仓库换了一个报错:unauthorized: authentication required
登陆dockerhub成功
测试拉取镜像成功
暂时没有时间解决腾讯云仓库的问题,使用dockerhub的个人仓库先恢复使用。
总结:
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate is valid for xxxx, not registry-1.docker.io
大概率是pod转发或节点网络配置的问题,检查或清理pod及检查网络即可。