Kubernetes-Cluster in getrennten Netzwerken

Kubernetes-Cluster in getrennten Netzwerken

Ich möchte einen Kubernetes-Cluster auf 4 Maschinen erstellen. Eine davon hat eine öffentliche IP-Adresse und ist über das Internet erreichbar (nennen wir sie Master). Dem Master ist außerdem ein Domänenname zugewiesen (sagen wir, er ist master.foo).

Drei Maschinen befinden sich im selben privaten Netzwerk (192.168.5.0), hinter einem Router (nennen wir sie Worker A/B/C).

Ich habe erfolgreich einen Cluster zwischen diesen Maschinen eingerichtet:

$ 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

Ich habe auch Pods, die auf den verschiedenen Workern ohne Fehler laufen.

Ich habe meinen Cluster mit folgendem initialisiert:

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

(Flannel wird als Overlay-Netzwerk verwendet.)

Das Problem besteht darin, dass beim Ausführen von kubectl execoder kubectl port-forwardauf dem Master ein Fehler auftritt:

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

Wo 192.168.5.192ist natürlich die private IP eines der Mitarbeiter? Ich denke, das hängt mit dem zusammen, was hier steht: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

Soll ich also ein OpenVPN-Netzwerk zwischen all diesen Maschinen einrichten? Wenn ja, wie würde ich das kubeadm init --control-plane-endpointmit der Tatsache kombinieren, dass ich Kubernetes brauche, das über den OpenVPN-Adapter ausgeht tun0? Habe ich etwas übersehen? Es scheint seltsam, dass Container auf den Workern laufen, ich aber kubectl execvom Master aus keine Befehle () auf ihnen ausführen kann.

Antwort1

Wenn Sie laufen kubectl port-forward(oder exec),kubectlverbindet sich mitAPI-Serverwelches dann eine Verbindung herstellt zukubeletdas auf jedem Knoten auf Port 10250 läuft.

Da sich Ihr Masterknoten nicht im selben Netzwerk wie die Worker befindet und auf die Worker von außen nicht zugegriffen werden kann, kann der API-Server (der auf den Masterknoten ausgeführt wird) keine Verbindung zu ihnen herstellen.

Ja, VPN könnte Ihr Problem lösen. Und um Kubelet nutzen zu können, tun0müssen Sie seine IP-Adresse bekannt geben mit--node-ip Option für Kubelet

--node-ip string
IP-Adresse des Knotens. Wenn gesetzt, verwendet Kubelet diese IP-Adresse für den Knoten

Ich gehe davon aus, dass der Masterknoten der einzige Zugangspunkt zu Ihrem Cluster von außen ist. Um Pods von außen verfügbar zu machen und darauf zuzugreifen, benötigen Sie daher eine vollständige Netzwerkverbindung zwischen allen Ihren Knoten und in diesem Fall insbesondere zwischen Master und Worker.

Lassen Sie mich wissen, ob es hilfreich war.

verwandte Informationen