Невозможно получить доступ к MyApp извне кластера (клиент -> <nodeIP>: <nodePort>-> Сервис -> Pod -> MyApp) - PullRequest
2 голосов
/ 10 июля 2020

Проблема : из-за пределов кластера, открывая службу через NodePort, я не могу связаться с приложением. Я должен получить ответ от MyApp: от моего ma c client (http://nodeIP: nodePort / api / users) -> node (nodePort) -> service (endPoints) - pod -> MyApp ( в контейнере)

Настройка :

  • ОС: Ma c и DockerDesktop с использованием KIND, создан кластер (1 мастер, 2 рабочих)
  • развернутое простое приложение и возможность 'kubectl exe c myPod - curl http://localhost/api/users' <- это действительно работает </li>
  • Затем создается 'service' с типом: NodePort (автоматически выбирается k8 )
  • Предположительно с моего Ma c (клиента) я смогу подключиться к MyApp, но при попытке «curl (http://nodeIP: nodePort / api / users)» просто истечет время ожидания.

Запрос : Не уверен, чего не хватает: это брандмауэр, блокирующий его, отсутствует ли переадресация порта, что-то еще ... с моего компьютера пытается 'curl http: //: / api / users 'time out.

примечание: я знаю, что могу использовать другие методы, такие как ingress. На данный момент я пытаюсь изучить и выяснить, почему метод NodePort не работает.

1 Ответ

0 голосов
/ 10 июля 2020

Docker для Ma c работает в Hyperkit Linux VM, а не на вашем фактическом Ma c. Таким образом, с kind каждый узел является контейнером, и, к сожалению, вы не сможете подключиться к NodePort с вашего Ma c.

Обходной путь - подключиться из Docker ВМ или из контейнера с тем же сетевым пространством, что и ВМ.

$ docker run --rm -it --net host alpine sh
# curl http://<the-ip-address-from-a-node>:<NodePort>/api/users

Если вам нужен доступ через браузер, другой способ - kubectl proxy ... с вашего Ма c, чтобы связаться с сервисом. Или kubectl port-forward svc/service-name <localport>:<serviceport> в сервис.

...