访问k8s集群出现Unable to connect to the server: x509: certificate is valid for xxx, not xxx问题解决【详细步骤】

笔者配置好k8s集群之后,兴奋地发给一位远程工作地同事进行测试,该同事通过vpn连入我的服务器,再通过该服务器执行kubectl命令,结果出现了标题中的错误。原因是通过vpn接入的时候,服务器的地址就不是原来的内网地址了,因此需要针对该vpn地址进行授权。授权流程如下

查看apiserver证书

openssl x509 -noout -text -in apiserver.crt|grep DNS
                DNS:debian-1, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:192.168.1.195

证书中没有所需的ip地址

删除旧apiserver证书

cd /etc/kubernetes/pki
rm apiserver.*

生成新apiserver证书

kubeadm init phase certs apiserver --apiserver-advertise-address ${apiserver-ip1} --apiserver-cert-extra-sans ${apiserver-ip2} --apiserver-cert-extra-sans ${apiserver-ip3}

上边的命令中${apiserver-ip1} ${apiserver-ip2} ${apiserver-ip3}根据自己集群的实际情况进行调整。如果需要增加更多的地址,可以继续在命令里增加 --apiserver-cert-extra-sans ${apiserver-ip}参数。

此时可以看到生成了新的apiserver证书。

ls apiserver.*
apiserver.crt  apiserver.key

重启apiserver

$ docker ps|grep apiserver
c6947d3f08cb   b6d7abedde39                                        "kube-apiserver --ad…"   3 days ago       Up 42 minutes                                                          k8s_kube-apiserver_kube-apiserver-debian-1_kube-system_8c9ab1ead009c3ba3cbb640306555281_12
3d6e28c76425   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 3 days ago       Up 42 minutes                                                          k8s_POD_kube-apiserver-debian-1_kube-system_8c9ab1ead009c3ba3cbb640306555281_1
$ docker restart c6947d3f08cb 3d6e28c76425
c6947d3f08cb
3d6e28c76425

检查

$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.1.195:6443
CoreDNS is running at https://192.168.1.195:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

完成

猜你喜欢

转载自blog.csdn.net/marlinlm/article/details/122166105
今日推荐