37

我正在尝试从我的工作站访问我的 k8s 主机。我可以从 LAN 很好地访问主服务器,但不能从我的工作站访问。错误信息是:

% 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 部署了我的集群,但我不确定如何手动执行这些步骤。

4

9 回答 9

63

一种选择是告诉kubectl您不希望验证证书。显然这会带来安全问题,但我猜你只是在测试,所以你去吧:

kubectl --insecure-skip-tls-verify --context=employee-context get pods

更好的选择是修复证书。最简单的方法是通过在包括主节点在内的所有节点上运行重新初始化集群kubeadm reset,然后执行

kubeadm init --apiserver-cert-extra-sans=114.215.201.87

也可以在不擦除所有内容的情况下修复该证书,但这有点棘手。以 root 身份在 master 上执行类似的操作:

rm /etc/kubernetes/pki/apiserver.*
kubeadm init phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=10.161.233.80,114.215.201.87
docker rm `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
于 2017-09-22T09:04:02.533 回答
22

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

于 2017-11-14T11:05:35.110 回答
17

对于 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
于 2019-02-20T11:29:41.247 回答
5

如果您使用 kubespray 来配置集群,那么您需要添加一个“浮动 ip”(在您的情况下为“114.215.201.87”)。这个变量supplementary_addresses_in_ssl_keysgroup_vars/k8s-cluster/k8s-cluster.yml文件中被调用。更新后,只需重新运行您的ansible-playbook -b -v -i inventory/<WHATEVER-YOU-NAMED-IT>/hosts.ini cluster.yml.

rm /etc/kubernetes/pki/apiserver.*注意:在运行之前,您仍然必须从每个主节点中删除所有 apiserver 证书 ( )!

于 2019-03-08T14:43:24.093 回答
4

问题原因:您在 $HOME/.kube/ 的配置与您的旧 IP 地址一起存在。

试试跑步,

rm $HOME/.kube/* -rf
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
于 2018-07-13T23:47:56.953 回答
1

对于 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
于 2018-11-03T13:55:07.140 回答
1

使用以下命令:

kubeadm init phase certs all
于 2019-02-13T07:07:49.000 回答
0

对我来说,以下帮助:

  1. rm -rf ~/.minikube
  2. minikube delete
  3. minikube start

可能第 2 和第 3 项就足够了

于 2020-08-01T08:31:46.760 回答
0

对我来说,当我试图通过 root 访问时(在 sudo -i 之后)我得到了错误。我很兴奋,并且对于普通用户来说它正在工作。

于 2020-10-29T04:54:29.820 回答