kubernetes master的x509证书无效

问题描述 投票:15回答:7

我正试着从我的工作站到达我的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部署了我的集群,我不确定如何手动执行这些步骤。

kubernetes kubeadm
7个回答
31
投票

一种选择是告诉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

17
投票

这个命令适用于新的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中以避免下次出现此类问题。


6
投票

对于cube adm v1.13.3

--apiserver-cert-extra-sans

5
投票

问题原因:您在$ 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

1
投票

如果您使用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)!


0
投票

对于Kubernetes 1.12.2 / CentOS 7.4,顺序如下:

rm /etc/kubernetes/pki/apiserver.*

0
投票

使用以下命令:

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
© www.soinside.com 2019 - 2024. All rights reserved.