Почему я не могу получить доступ к сервису 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 ответов


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

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

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

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