別々のネットワーク上の Kubernetes クラスター

別々のネットワーク上の Kubernetes クラスター

4 台のマシンで Kubernetes クラスターを作成したいと考えています。1 台にはパブリック IP アドレスがあり、インターネットからアクセスできます (これを と呼びますMaster)。マスターにもドメイン名が割り当てられています ( としますmaster.foo)。

3 台のマシンが同じプライベート ネットワーク (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

また、さまざまなワーカー上でエラーなしでポッドを実行しています。

次のようにしてクラスターを初期化しました。

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

(オーバーレイ ネットワークとして Flannel を使用します。)

問題は、マスター上でkubectl execまたはを実行するとエラーが発生することです。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もちろん、ワーカーの 1 人のプライベート 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-endpointOpenVPN アダプターで Kubernetes を実行する必要があるという事実とどのように組み合わせればよいでしょうか? 何か見落としていますか? コンテナーがワーカー上で実行されているのに、マスターからコンテナーに対してtun0コマンド ( ) を実行できないのは奇妙に思えます。kubectl exec

答え1

kubectl port-forward(または)を実行するとexeckubectl接続中ですAPI サーバーそして、それはクベレットポート 10250 上のすべてのノードで実行されています。

マスター ノードはワーカーと同じネットワーク内になく、ワーカーは外部からアクセスできないため、api-server (マスター ノードで実行されている) はワーカーに接続できません。

はい、VPNはあなたの問題を解決するかもしれません。そして、kubeletを使用するには、tun0そのIPアドレスをアドバタイズする必要があります。--node-ip kubeletのオプション

--node-ip string
ノードのIPアドレス。設定されている場合、kubeletはノードにこのIPアドレスを使用します。

マスター ノードは外部からクラスターへの唯一のエントリ ポイントであると想定しているため、外部からポッドを公開してアクセスできるようにするには、すべてのノード間、特にこの場合はマスターとワーカー間の完全なネットワーク接続が必要です。

役に立ったかどうか教えてください。

関連情報