我正试着从我的工作站到达我的k8s主人。我可以从局域网中访问主服务器,但不能从我的工作站访问。错误消息是:
% kubectl --context=employee-context get pods
Unable to connect to the server: x509: certificate is valid for 10.96.0.1, 10.161.233.80, not 114.215.201.87
如何在证书中添加114.215.201.87?我是否需要删除旧的群集ca.crt,重新创建它,重新启动整个群集然后重新签名客户端证书?我已经使用kubeadm部署了我的集群,我不确定如何手动执行这些步骤。
一种选择是告诉kubectl
您不希望验证证书。显然这会带来安全问题,但我想你只是在测试,所以你去:
kubectl --insecure-skip-tls-verify --context=employee-context get pods
更好的选择是修复证书。如果通过在包括主节点在内的所有节点上运行kubeadm reset
来重新初始化集群,那么最简单
kubeadm init --apiserver-cert-extra-sans=114.215.201.87
也可以在不擦除所有内容的情况下修复该证书,但这有点棘手。在master上以root身份执行类似这样的操作:
rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs selfsign --apiserver-advertise-address=0.0.0.0 --cert-altnames=10.161.233.80 --cert-altnames=114.215.201.87
docker rm `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
这个命令适用于新的kubernetes> = 1.8:
rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=10.161.233.80,114.215.201.87
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
最好将dns名称添加到qazxsw poi中以避免下次出现此类问题。
对于cube adm v1.13.3
--apiserver-cert-extra-sans
问题原因:您在$ HOME / .kube /的配置与您的旧IP地址一起出现。
试试跑步,
rm /etc/kubernetes/pki/apiserver.*
kubeadm init phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=114.215.201.87
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
如果您使用kubespray来配置您的集群,那么您需要添加一个'浮动ip'(在您的情况下为'114.215.201.87')。此变量在rm $HOME/.kube/* -rf
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
文件中称为supplementary_addresses_in_ssl_keys
。更新后,只需重新运行你的group_vars/k8s-cluster/k8s-cluster.yml
。
注意:在运行之前,您仍需要从每个主节点中删除所有的apiserver证书(ansible-playbook -b -v -i inventory/<WHATEVER-YOU-NAMED-IT>/hosts.ini cluster.yml
)!
对于Kubernetes 1.12.2 / CentOS 7.4,顺序如下:
rm /etc/kubernetes/pki/apiserver.*
使用以下命令:
rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=51.158.75.136
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet