不同网络上的 Kubernetes 集群

不同网络上的 Kubernetes 集群

我想在 4 台机器上创建一个 Kubernetes 集群。其中一台机器有公共 IP 地址,可从互联网访问(我们称之为Master)。主服务器也分配有一个域名(我们称之为 )master.foo

三台机器位于同一个私有网络(192.168.5.0)上,位于路由器后面(我们称之为Worker A/B/C)。

我已经成功在以下机器之间建立了集群:

$ kubectl get nodes

NAME           STATUS   ROLES    AGE     VERSION
Master       Ready    master   5d20h   v1.17.1
WorkerA      Ready    <none>   21h     v1.17.1
WorkerB      Ready    <none>   21h     v1.17.1
WorkerC      Ready    <none>   5d17h   v1.17.1

我还在不同的工作程序上运行了 pod,没有任何错误。

我已经使用以下命令初始化了我的集群:

sudo kubeadm init --control-plane-endpoint=master.foo --pod-network-cidr=10.244.0.0/16

(使用 Flannel 作为覆盖网络。)

问题是在主服务器上运行kubectl execkubectl port-forward会导致错误:

paulb@galaxy:~$ kubectl -n pgo port-forward svc/postgres-operator 8443:8443 
error: error upgrading connection: error dialing backend: dial tcp 192.168.5.192:10250: i/o timeout

当然,其中一个工作人员的私有 IP在哪里192.168.5.192。我认为这与此处所述有关:https://kubernetes.io/docs/concepts/cluster-administration/networking/#the-kubernetes-network-model

pods on a node can communicate with all pods on all nodes without NAT

那么,我应该在所有这些机器之间设置一个 OpenVPN 网络吗?如果是,那么我该如何结合kubeadm init --control-plane-endpoint我需要在 OpenVPN 适配器上使用 kubernetes 的事实tun0?我错过了什么吗?容器在工作器上运行似乎很奇怪,但我无法kubectl exec从主服务器上对它们执行命令()。

答案1

当你跑步kubectl port-forward(或exec)时,库布克正在连接到API 服务器然后连接到库贝莱特它在每个节点的 10250 端口上运行。

由于您的主节点与工作节点不在同一个网络中,并且工作节点无法从外部访问,因此 api-server(在主节点上运行)无法连接到它们。

是的,VPN 可能会解决您的问题。要使用 kubelet,tun0您需要使用以下方式公布其 IP 地址--node-ip kubelet 的选项

--node-ip string
节点的 IP 地址。如果设置,kubelet 将使用此 IP 地址作为节点

我假设主节点是从外部进入集群的唯一入口点,因此为了能够从外部公开和访问 pod,您需要所有节点之间建立完整的网络连接,在这种情况下特别是主节点和工作节点之间的连接。

如果有帮助请告诉我。

相关内容