#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"}