2

我正在使用测试 kubenetes 集群(Kubeadm 1 个主节点和 2 个节点设置),我的公共 IP 不时更改,当我的公共 IP 更改时,我无法连接到集群并且出现以下错误

 Kubernetes Unable to connect to the server: dial tcp x.x.x.x:6443: i/o timeout

我也有始终一致的私有 IP 10.10.10.10。

我使用以下命令创建了 Kubernetes 集群

 kubeadm init --control-plane-endpoint 10.10.10.10

但它仍然失败,因为证书已签署到公共 IP,下面是错误

 The connection to the server x.x.x.x:6443 was refused - did you specify the right host or port?

有人可以帮助设置 kubeadm,并且应该允许所有 IP 类似于 0.0.0.0 并且我对安全观点很好,因为它是测试设置。或任何参数修复。

4

1 回答 1

2

由于@Vidya已经通过使用静态 IP 地址解决了这个问题,我决定提供一个社区 Wiki 答案只是为了让其他社区成员更好地了解。

首先,不建议使用频繁更改的主服务器/服务器 IP 地址。
正如我们在 GitHub kubernetes/88648上的讨论中发现的那样-kubeadm没有提供一种简单的方法来处理这个问题。

但是,当 Kubernetes 主节点上的 IP 地址发生变化时,有一些解决方法可以帮助我们。根据讨论更改主 IP 地址,我准备了一个脚本来重新生成证书并重新初始化主节点。

此脚本可能会有所帮助,但我建议一次运行一个命令(这样会更安全)。
此外,您可能需要根据需要自定义一些步骤:
注意:在下面的示例中,我使用 Docker 作为容器运行时。

root@kmaster:~# cat reinit_master.sh 
#!/bin/bash
set -e

echo "Stopping kubelet and docker"
systemctl stop kubelet docker

echo "Making backup kubernetes data"
mv /etc/kubernetes /etc/kubernetes-backup
mv /var/lib/kubelet /var/lib/kubelet-backup

echo "Restoring certificates"
mkdir /etc/kubernetes
cp -r /etc/kubernetes-backup/pki /etc/kubernetes/
rm /etc/kubernetes/pki/{apiserver.*,etcd/peer.*}

echo "Starting docker"
systemctl start docker 


echo "Reinitializing master node"
kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd

echo "Updating kubeconfig file"
cp /etc/kubernetes/admin.conf ~/.kube/config

然后,您需要将工作节点重新加入集群。

于 2021-04-02T14:28:22.017 回答