kubernetes master 的 x509 证书无效

Invalid x509 certificate for kubernetes master

我正在尝试从我的工作站连接到我的 k8s 主机。我可以从 LAN 访问 master,但不能从我的工作站访问。错误信息是:

% 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

也可以在不清除所有内容的情况下修复该证书,但这有点棘手。以 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

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

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

尝试运行,

rm $HOME/.kube/* -rf
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

对于 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

使用以下命令:

kubeadm init phase certs all

对于 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

如果您使用 kubespray 来配置您的集群,那么您需要添加一个 'floating ip'(在您的例子中是“114.215.201.87”)。此变量在 group_vars/k8s-cluster/k8s-cluster.yml 文件中称为 supplementary_addresses_in_ssl_keys。更新后,只需重新 运行 您的 ansible-playbook -b -v -i inventory/<WHATEVER-YOU-NAMED-IT>/hosts.ini cluster.yml

注意:在 运行ning![= 之前​​,您仍然需要从每个主节点删除所有 apiserver 证书 (rm /etc/kubernetes/pki/apiserver.*) 14=]

对我来说,以下帮助:

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

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

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