问题描述
连接时出现问题报错,查看logs显示报错信息
failed to verify certificate: x509: certificate is valid for 127.0.0.1,
10.103.97.2, 192.168.0.88, 10.96.0.1, not 61.171.67.189]
使用以下命令解析 apiserver 证书得到允许访问服务端的地址信息
openssl x509 -noout -text -in /etc/kubernetes/pki/apiserver.crt |grep IP
原因分析:
默认情况下,kubernetes 自建的CA会为apiserver签发一个证书,证书的默认可访问的是内网IP、kubernetes、kubernetes.default kubernetes.default.svc、kubernetes.default.svc.cluster.local,不包含 master 节点的公网 IP
DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:apiserver.cluster.local, DNS:kubernetes.default.svc.cluster.local, DNS:meh9cioodnchi2ql, DNS:localhost, DNS:kubernetes, IP Address:127.0.0.1, IP Address:10.103.97.2, IP Address:192.168.0.88, IP Address:10.96.0.1
解决方案:
删除当前 kubernetes 集群下的 apiserver 的 cert 和 key
rm /etc/kubernetes/pki/apiserver.*
生成新的 apiserver 的 cert 和 key
我是通过 sealer 安装的,所以需要添加control-plane 节点 config 文件内配置的 server 地址
kubeadm init phase certs apiserver \
--apiserver-advertise-address=<节点配置的ip> \
--apiserver-cert-extra-sans=<外网ip>
刷新admin.conf
kubeadm alpha certs renew admin.conf
重新创建 apiserver
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
再次查看解析获得证书内容,发现增加了我们想要的地址
openssl x509 -noout -text -in /etc/kubernetes/pki/apiserver.crt |grep IP
DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:snow, IP Address:10.96.0.1, IP Address:192.168.0.88, IP Address:61.171.67.189