Назад | Перейти на главную страницу

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

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

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

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

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

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

Сообщите мне, было ли это полезно.