我有一个在防火墙后面运行的裸机Kubernete集群。尝试从本地计算机(在防火墙的另一侧)连接到它时,该连接不起作用,因为证书不正确。
问题如下。群集在防火墙后面的网络内运行,并且证书是使用主IP创建的。但是,当我使用同一证书尝试从内部网络外部进行连接时,我使用的是不同的IP。此时出现错误消息,提示证书与我尝试连接的地址不同。
答案 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 容器:
kubeadm init phase certs apiserver --config kubeadm.yaml
以获取
运行Kubernetes API服务器的容器的容器ID docker ps | grep kube-apiserver | grep -v pause
杀死容器。如果一切正常,请不要忘记更新存储在集群中的docker kill <containerID>
ConfigMap,否则,将来的kubeadm
升级将缺少新的配置:
kubeadm
本文提供了有关如何Adding a Name to the Kubernetes API Server Certificate
的更完整指南。