如何解决无法从外部群集访问EKS NodePort服务
我在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访问该端口
我想念什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。