Leo Zhang
菩提本无树,明镜亦非台!

公有云上组建k8s集群时,通常是使用绑定在节点网卡上的IP地址来部署集群,此时,一般使用的是192.168.x.x这样的私网IP。

使用时,我们可能希望在本地使用k8s集群的kubeconfig文件来访问集群。但记录在kubeconfig文件中的server的IP地址是192.168.x.x这样的私网IP,

本地不能直接访问,将kubeconfig文件的server地址改为k8s master的公网IP访问时,会报错:

Unable to connect to the server: x509: certificate is valid for 10.96.0.1, 192.168.0.x, not x.x.x.x

原因从报错信息可以看出来:是证书对访问的IP做了校验,解决的方法就是要重新制作证书(不用动集群)

 


以下操作步骤,以kubeadm部署的集群为例,其他方式部署,操作原理类似,路径可能不同。

1、备份当前k8s集群配置文件

cp -r /etc/kubernetes /etc/kubernetes.bak

 

2、删除当前k8s集群的apiserver的cert 和 key

rm -rf /etc/kubernetes/pki/apiserver.* 

 

3、生成新的apiserver的cert和key

kubeadm init phase certs apiserver --apiserver-advertise-address ${Internal_IP} --apiserver-cert-extra-sans ${External_IP} 

注意:--apiserver-advertise-address 的值,只需要填master的内网ip,不需要填k8s内部使用的 10.96.0.1

 

4、刷新admin.conf

kubeadm alpha certs renew admin.conf

 

 

5、重启apiserver

kubectl -n kube-system delete pod -l component=kube-apiserver

 

6、刷新.kube/config

\cp /etc/kubernetes/admin.conf ~/.kube/config

注意:这里生成的 admin.conf 文件,server填写的依然是master的内网IP,如果需要放在集群外的客户端上使用,将这个IP改为master的外网IP即可。

sed -i "s/${Internal_IP}/${External_IP}/g" ~/.kube/config

 

原文地址:https://zhuanlan.zhihu.com/p/505324148

posted on 2022-05-07 16:54  LeoZhanggg  阅读(2083)  评论(1编辑  收藏  举报