不同網路上的 Kubernetes 集群

不同網路上的 Kubernetes 集群

我想在 4 台機器上建立 Kubernetes 叢集。其中一個擁有公共 IP 位址,並且可以透過網路存取(我們稱之為Master)。 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 作為覆蓋網路。)

問題是在master上運行kubectl execor會導致錯誤:kubectl 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

192.168.5.192當然,其中一名工人的私人 IP 在哪裡?我認為這與這裡所說的有關: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與我需要 kubernetes 在 OpenVPN 適配器上使用的事實結合起來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,您需要所有節點之間的完整網路連接,尤其是在這種情況下主節點到工作節點。

讓我知道是否有幫助。

相關內容