无法从外部群集访问EKS NodePort服务

时间:2020-08-20 10:54:11

标签: kubernetes amazon-eks

我在AWS中设置了两个节点的EKS集群。

在该群集上,我有一个deployment,其中包含一个简单Web应用程序的两个副本。

我还使用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(服务上定义的NodePort)之一,则会得到一个基本的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)

但是,如果我尝试使用EKS实例的公共IP地址执行此操作,则会失败。

我知道我的安全组设置正确,因为通过添加iptables -A FORWARD -s <<myIP>> -j LOG然后运行tail -f /var/log/messages,我可以看到iptables转发了来自IP地址的流量。

总结:

  • 流量正在到达服务器(iptables日志)
  • 服务器正在侦听端口(lsof输出)
  • 我可以看到豆荚日志
  • 我可以在服务NodePort上卷曲localhost并获得预期的响应
  • 从Pod内,我可以访问服务的DNS主机名等。
  • ... 但是我无法使用服务器的公共IP访问该端口

我想念什么?

0 个答案:

没有答案