我们的kubernetes的apiserver-advertise-address是一个内网IP,默认情况下,kubernetes自建的CA会为apiserver签发一个证书,证书的默认可访问的是内网IP、kubernetes、kubernetes.default kubernetes.default.svc、kubernetes.default.svc.cluster.local,不包含设备的外网IP。所以直接通过admin.conf去访问kubernetes是不可能的。
rm /etc/kubernetes/pki/apiserver.*
kubeadm init phase certs apiserver --apiserver-advertise-address ${原来的advertise ip} --apiserver-cert-extra-sans ${master的外网ip}
kubeadm alpha certs renew admin.conf
kubectl delete pod ${你的apiserver的pod} –n kube-system
kubectl delete –f /etc/kubernetes/manifests/kube-apiserver.yaml
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
kubectl get nodes
通过/etc/kubernetes/admin.conf去访问某个kubernetes集群时,报错Unable to connect to the server: x509: certificate has expired or is not yet valid
通过如下命令查看kubernetes的admin.conf中的证书的有效期,看是否有效
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
==================================================
通过如上方式,重新进行尝试时,发现有的时候,删除pod之后重新reply不管用
新问题的解决方案
修改完apiserver的证书,更新admin.conf后,重启master所在设备,可以解决这个问题