Кластер Kubernetes в отдельных сетях

Кластер Kubernetes в отдельных сетях

Я хочу создать кластер Kubernetes на 4 машинах. У одной из них есть публичный 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

У меня также есть поды, работающие на разных рабочих узлах без ошибок.

Я инициализировал свой кластер с помощью:

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, конечно, частный 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, выходящего на tun0адаптер OpenVPN? Я что-то упустил? Кажется странным, что контейнеры запущены на рабочих, но я не могу выполнять команды ( kubectl exec) на них с главного.

решение1

Когда вы бежите kubectl port-forward(или exec),кубектлподключается кapi-серверкоторый затем подключается ккубелеткоторый работает на каждом узле на порту 10250.

Поскольку ваш главный узел не находится в той же сети, что и рабочие узлы, а рабочие узлы не доступны извне, api-server (который работает на главных узлах) не может подключиться к ним.

Да, VPN может решить вашу проблему. И чтобы kubelet использовал, tun0вам нужно объявить его IP-адрес с--node-ip вариант для кубелета

--node-ip string
IP-адрес узла. Если установлено, kubelet будет использовать этот IP-адрес для узла

Я предполагаю, что главный узел — это единственная точка входа в ваш кластер извне, поэтому для того, чтобы иметь возможность открывать модули и получать к ним доступ извне, вам необходимо полное сетевое соединение между всеми вашими узлами, и в данном случае особенно между главным и рабочим узлами.

Дайте мне знать, если это было полезно.

Связанный контент