连接到防火墙后面的Kubernet群集时出现证书错误

时间:2019-10-29 18:14:16

标签: kubernetes kubeadm kubernetes-dashboard

我有一个在防火墙后面运行的裸机Kubernete集群。尝试从本地计算机(在防火墙的另一侧)连接到它时,该连接不起作用,因为证书不正确。
问题如下。群集在防火墙后面的网络内运行,并且证书是使用主IP创建的。但是,当我使用同一证书尝试从内部网络外部进行连接时,我使用的是不同的IP。此时出现错误消息,提示证书与我尝试连接的地址不同。

我用来访问群集的IP与此处显示的实际群集IP不同: enter image description here
我该如何解决?可以在我的主节点中创建另一个具有不同IP的证书吗?

1 个答案:

答案 0 :(得分:1)

您可以按照以下步骤将新的使用者备用名称(SAN)添加到Kubernetes API服务器证书中。

首先需要您的Stream配置文件。这将创建一个名为kubeadm的文件:

kubeadm.yaml

现在在编辑器中打开文件,然后在kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml部分下找到certSANs列表。如果不存在,则需要添加它;如果是这样,您只需在该列表中添加另一个条目。示例:

apiServer

现在将旧证书移动到另一个文件夹,否则apiServer: certSANs: - "172.29.50.162" - "k8s.domain.com" - "other-k8s.domain.net" extraArgs: authorization-mode: Node,RBAC timeoutForControlPlane: 4m0s 将不会重新创建新证书:

kubeadm

使用mv /etc/kubernetes/pki/apiserver.{crt,key} ~生成新的apiserver证书:

kubeadm

现在重新启动您的 kubeapiserver 容器:

  1. 运行kubeadm init phase certs apiserver --config kubeadm.yaml以获取 运行Kubernetes API服务器的容器的容器ID
  2. 运行docker ps | grep kube-apiserver | grep -v pause杀死容器。
  3. Kubelet将自动重启容器,该容器将获取新证书。

如果一切正常,请不要忘记更新存储在集群中的docker kill <containerID> ConfigMap,否则,将来的kubeadm升级将缺少新的配置:

kubeadm

本文提供了有关如何Adding a Name to the Kubernetes API Server Certificate

的更完整指南。