公有云上組建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、生成新的apiserver的cert和key
kubeadm init phase certs apiserver --apiserver-advertise-address ${原來的advertise ip} --apiserver-cert-extra-sans ${master的外網ip}
注意:--apiserver-advertise-address 的值,只需要填master的內網ip,不需要填k8s內部使用的 10.96.0.1
3、刷新admin.conf
kubeadm alpha certs renew admin.conf
4、重啓apiserver
kubectl -n kube-system delete pod -l component=kube-apiserver
5、刷新.kube/config
\cp /etc/kubernetes/admin.conf ~/.kube/config
注意:這裏生成的 admin.conf 文件,server填寫的依然是master的內網IP,如果需要放在集羣外的客戶端上使用,將這個IP改爲master的外網IP即可。