Почему я не могу получить доступ к своему сервису Kubernetes через его IP?

У меня есть сервис Kubernetes на GKE следующим образом:

$ kubectl describe service staging
Name:           staging
Namespace:      default
Labels:         <none>
Selector:       app=jupiter
Type:           NodePort
IP:             10.11.246.27
Port:           <unnamed>   80/TCP
NodePort:       <unnamed>   31683/TCP
Endpoints:      10.8.0.33:1337
Session Affinity:   None
No events.

Я могу получить доступ к сервису из виртуальной машины напрямую через одну из ее конечных точек (10.8.0.21:1337) или через порт узла (10.240.251.174:31683 в моем случае). Тем не менее, если я пытаюсь получить доступ 10.11.246.27:80Я ничего не получаю. Я также пробовал порты 1337 и 31683.

Почему я не могу получить доступ к сервису через его IP? Мне нужно правило брандмауэра или что-то?

1 ответ

Решение

Сервисные IP-адреса - это виртуальные IP-адреса, управляемые kube-proxy. Таким образом, для того, чтобы этот IP-адрес имел смысл, клиент также должен быть частью "наложенной" сети kube-proxy (работающий kube-proxy, указывающий на один и тот же сервер).

IP-адреса Pod в GCE/GKE управляются маршрутами GCE, что больше похоже на "подстилку" всех виртуальных машин в сети.

Существует несколько способов доступа к непубличным службам вне кластера. Вот они более подробно, но вкратце:

  1. Создайте бастионный маршрут GCE для сервисов вашего кластера.
  2. Установите Kube-прокси вашего кластера в любом месте, где вы хотите получить доступ к службам кластера.
Другие вопросы по тегам