Я пытаюсь заставить кластер Kubernetes работать с некоторыми узлами, работающими за NAT без публичного IP-адреса.(Зачем мне это нужно, это другая история)
Есть 3 узла:
- Мастер кластера Kubernetes (с публичным IP-адресом)
- Узел1 (с публичным IPадрес)
- Node2 (работает за NAT на моем ноутбуке как виртуальная машина, без общедоступного IP-адреса)
Все 3 узла работают под управлением Ubuntu 18.04 с Kubernetes v1.10.2 (3),Docker 17.12
кластер Kubernetes был создан следующим образом:
kubeadm init --pod-network-cidr=10.244.0.0/16
Используется фланелевая сеть:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Node1 и Node2 присоединились к кластеру:
NAME STATUS ROLES AGE VERSION
master-node Ready master 3h v1.10.2
node1 Ready <none> 2h v1.10.3
node2 Ready <none> 2h v1.10.2
Развертывание Nginx + служба (type = NodePort), созданная и запланированная для Node1 (с общедоступным IP-адресом):
https://pastebin.com/6CrugunB
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h
my-nginx NodePort 10.110.202.32 <none> 80:31742/TCP 16m
Это развертывание доступно через http://MASTER_NODE_PUBLIC_IP:31742 и http://NODE1_PUBLIC_IP:31742, как и ожидалось.
Другая служба развертывания Nginx + (type = NodePort), созданный и запланированный для Node2 (без общедоступного IP-адреса):
https://pastebin.com/AFK42UNW
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h
my-nginx NodePort 10.110.202.32 <none> 80:31742/TCP 22m
nginx-behind-nat NodePort 10.105.242.178 <none> 80:32350/TCP 22m
Однако эта служба недоступначерез http://MASTER_NODE_PUBLIC_IP:32350 или http://NODE1_PUBLIC_IP:32350.
Доступ к нему возможен только через http://MY_VM_IP:32350 с моего ноутбука.
Более того: я не могу попасть внутрь nginx-behind-nat
pods via kubectl exec
либо.
Есть ли способ достичь этого?