内容纲要
概要描述
本文描述了registry pod日志报错“http:TLS handshake error from ip:port: remote error:bad certificate”解决方法
详细描述
1 问题描述
服务无法拉取镜像,TOS页面显示正常,显示pod都正常
kubectl get pods -n kube-system
显示5000端口没有被占用
netstat -antulp | grep 5000
找到对应的container-id
docker ps |grep registry
docker logs [container-id]
以下是container的报错日志 http:TLS handshake error from ip: port: remote error:bad certificate
I0619 11:15:54.941451 1 endpoint.go:66] ccResolverWrapper: sending new addresses to cc: [{https://gddc-bd1:4001 0 } {https://gddc-bd2:4001 0 } {https://gddc-bd3:4001 0 }]
W0619 11:15:54.948032 1 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://gddc-bd3:4001 0 }. Err :connection error: desc = "transport: authentication handshake failed: remote error: tls: bad certificate". Reconnecting...
2 root cause
查看 registry pod 信息,确认使用的 key 和 certificate 文件;
describe pod tos-registry-tos-hostname1 -n kube-system
然后检查 /srv/kubernetes 目录,是否缺少响应的 key 文件,/srv/kubernetes 目录下缺失相关的 key 文件
正常的应该是有以下 key 文件:
3 解决方案
备份原始/srv/kubernetes 文件夹
cp -r /srv/kubernetes /tmp/kubernetes_bak
手动生成新的密钥
docker run --volume /srv/kubernetes/:/srv/kubernetes/ --net=host transwarp/gencerts:transwarp-xxx /usr/bin/entry.sh(transwarp-xxx 换成实际的版本,如 transwarp-5.2.0-final)
生成了新的密钥文件之后,去 /srv/kubernetes/ 目录下查看密钥文件的创建时间;
systemctl restart haproxy && docker rm -vf $(docker ps -qa) && systemctl restart kubelet
然后重启 registry
mv /opt/kubernetes/manifests-multi/tos-registry.manifest /tmp/
mv /tmp/tos-registry.manifest /opt/kubernetes/manifests-multi/