最近因机房网段调整,影响到一个kubernetes集群中的一个master节点,在更换该master节点ip的时候,出现了有关证书的问题,特此记录一下
错误如下:
1 | Unable to register node "xxxxx" with API server: Post https://xxxx:6443/api/v1/nodes: x509: certificate is valid for 10.96.0.1, yyyy, not xxxx |
xxxx表示的本地地址
这个错误的意思是, 当kubelet在使用xxxx与api-server通信时,api-server证书返回的地址列表中不包含有xxxx这个地址,导致tls证书校验不通过,可以使用以下命令来查看api-server的证书中包含的所有地址列表
如果使用的是kubeadm搭建的集群,那api-server的证书在/etc/kubernetes/pki
1 | openssl x509 -noout -text -in apiserver.crt |
通过上述命令可以列出所有被写在证书的地址列表,比如:
1 | X509v3 Subject Alternative Name: |
证书中包含的可以是ip地址,也可以是域名,会发现确实不包含xxxx这个地址
那既然没有包含这个地址,是不是可以修改这个证书的地址列表呢,答案是肯定的:
由于需要生成新的证书,最好备份整个证书目录,整个过程如下:
1 | # 生成密钥对 |
再次查看新的apiserver.crt文件会发现已经包含新增加的ip地址
1 | openssl x509 -noout -text -in apiserver.crt |
重启api-server容器后,会发现x509证书错误消失
如果更改的是worker node的ip的话就更简单,只是ip变更一般主机名不会变,只需要直接修改kubelet的–node-ip,然后重启kubelet即可