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-endpoint
OpenVPN アダプターで Kubernetes を実行する必要があるという事実とどのように組み合わせればよいでしょうか? 何か見落としていますか? コンテナーがワーカー上で実行されているのに、マスターからコンテナーに対してtun0
コマンド ( ) を実行できないのは奇妙に思えます。kubectl exec
答え1
kubectl port-forward
(または)を実行するとexec
、kubectl接続中ですAPI サーバーそして、それはクベレットポート 10250 上のすべてのノードで実行されています。
マスター ノードはワーカーと同じネットワーク内になく、ワーカーは外部からアクセスできないため、api-server (マスター ノードで実行されている) はワーカーに接続できません。
はい、VPNはあなたの問題を解決するかもしれません。そして、kubeletを使用するには、tun0
そのIPアドレスをアドバタイズする必要があります。--node-ip
kubeletのオプション
--node-ip string
ノードのIPアドレス。設定されている場合、kubeletはノードにこのIPアドレスを使用します。
マスター ノードは外部からクラスターへの唯一のエントリ ポイントであると想定しているため、外部からポッドを公開してアクセスできるようにするには、すべてのノード間、特にこの場合はマスターとワーカー間の完全なネットワーク接続が必要です。
役に立ったかどうか教えてください。