我在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地址的流量。
总结:
localhost
并获得预期的响应我想念什么?