容器启动报错 http:TLS handshake error from ip:port: remote error:bad certificate 的解决方法

  其他常见问题
内容纲要

概要描述

本文描述了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]

file

以下是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

file

然后检查 /srv/kubernetes 目录,是否缺少响应的 key 文件,/srv/kubernetes 目录下缺失相关的 key 文件

正常的应该是有以下 key 文件:

file

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/

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。