我正试着从我的工作站到达我的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部署了我的集群,我不确定如何手动执行这些步骤。
答案 0 :(得分:25)
一种选择是告诉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
答案 1 :(得分:16)
此命令适用于新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名称添加到--apiserver-cert-extra-sans
,以避免下次出现此类问题。
答案 2 :(得分:5)
问题原因: $ HOME / .kube /中的配置与您的旧IP地址一起存在。
尝试运行,
rm $HOME/.kube/* -rf
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
答案 3 :(得分:2)
对于kubeadm v1.13.3
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
答案 4 :(得分:1)
如果使用kubespray设置群集,则需要添加“浮动ip”(在您的情况下为“ 114.215.201.87”)。该变量在supplementary_addresses_in_ssl_keys
文件中称为group_vars/k8s-cluster/k8s-cluster.yml
。更新后,只需重新运行您的ansible-playbook -b -v -i inventory/<WHATEVER-YOU-NAMED-IT>/hosts.ini cluster.yml
。
注意:在运行之前,您仍然必须从每个主节点中删除所有apiserver证书(rm /etc/kubernetes/pki/apiserver.*
)!
答案 5 :(得分:0)
对于Kubernetes 1.12.2 / CentOS 7.4,顺序如下:
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
答案 6 :(得分:0)
使用以下命令:
kubeadm init phase certs all
答案 7 :(得分:0)
对我来说,以下帮助:
rm -rf ~/.minikube
minikube delete
minikube start
第2项和第3项可能就足够了
答案 8 :(得分:0)
对我来说,当我尝试通过root访问(在sudo -i之后)时,出现了错误。 我很兴奋,而且普通用户都可以正常工作。