Почему я не могу получить доступ к своему сервису 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, что больше похоже на "подстилку" всех виртуальных машин в сети.
Существует несколько способов доступа к непубличным службам вне кластера. Вот они более подробно, но вкратце:
- Создайте бастионный маршрут GCE для сервисов вашего кластера.
- Установите Kube-прокси вашего кластера в любом месте, где вы хотите получить доступ к службам кластера.