Служба EKS NodePort недоступна из-за пределов кластера

#kubernetes #amazon-eks

#kubernetes #amazon-eks

Вопрос:

В AWS у меня настроен двухузловой кластер EKS.

В этом кластере у меня есть deployment с двумя копиями простого веб-приложения.

Я также создал service , чтобы предоставить это развертывание, используя kubectl expose deployment app --type=NodePort команду. Вот результат для службы:

 Selector:                 app=app,environment=production
Type:                     NodePort
IP:                       172.20.162.107
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30818/TCP
Endpoints:                10.5.2.128:80,10.5.2.86:80
  

Модули и служба находятся в production пространстве имен.

Кажется, все работает правильно — модули исправны, журналы именно такие, какие я ожидал увидеть, и т.д.

Если я подключаюсь по SSH к одному из узлов EKS и curl localhost:30818 (порт узла, определенный в службе), я получаю в ответ базовую веб-страницу HTTP -как и ожидалось.

Вывод lsof -i TCP:30818 показывает, что сервер прослушивает этот порт:

 COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
kube-prox 23746 root   13u  IPv6 119697770      0t0  TCP *:30818 (LISTEN)
  

Однако, если я попытаюсь сделать это, используя общедоступные IP-адреса экземпляров EKS, произойдет сбой.

Я знаю, что мои группы безопасности настроены правильно, потому что, iptables -A FORWARD -s <<myIP>> -j LOG затем запустив tail -f /var/log/messages , я могу видеть, как трафик с моих IP-адресов пересылается iptables.

В итоге:

  • Трафик поступает на сервер (журналы iptables)
  • Сервер прослушивает порт (вывод lsof)
  • Я могу видеть журналы модуля
  • Я могу выполнить curl localhost в службе NodePort и получить ожидаемый ответ
  • Из модуля я могу получить доступ к DNS-имени хоста службы и т.д.
  • но я не могу получить доступ к этому порту, используя общедоступный IP-адрес сервера

Чего я не понимаю?

Комментарии:

1. проверьте журналы прокси-сервера kube на этом узле

2. @ArghyaSadhu выглядит нормально — {"log":"I0820 10:22:26.902018 1 proxier.go:1464] Opened local port "nodePort for production/app:" (:30818/tcp)n","stream":"stderr","time":"2020-08-20T10:22:26.902128791Z"}