如何将部署在EKS集群上的Nginx服务对外暴露到公网?
问题排查及缺失配置说明
核心问题1:Service类型不符合公网访问需求
你当前配置的Service类型为NodePort,该类型默认仅支持通过集群节点私网IP+端口访问,不会自动分配公网访问入口,是导致公网IP无法连通的核心原因。
其他可能缺失的配置项
- 镜像拉取网络配置:如果你的EKS节点部署在私有子网且未配置NAT网关,节点无法访问公网拉取官方Nginx镜像,会导致Pod启动失败,对应
kubectl describe pods会抛出镜像拉取超时/失败报错。 - 安全组放行规则:无论使用哪种访问方式,都需要配置对应安全组的入方向放行规则:
- 若保留
NodePort类型,需要放行EKS节点安全组的30000-32767端口段到你的客户端公网IP - 若更换为
LoadBalancer类型,需要放行自动创建的负载均衡安全组的8080端口到公网或指定客户端IP
- 若保留
- 节点公网IP配置:如果保留
NodePort类型,需要确保EKS节点部署在公有子网且绑定了公网EIP,否则没有可访问的公网入口。
推荐修复方案
直接将Service类型修改为LoadBalancer,AWS EKS会自动为你创建公网负载均衡,分配公网访问域名,修改后的Service配置如下:
resource "kubernetes_service" "example" { metadata { name = "helloworld" } spec { selector = { app = "helloworld" } session_affinity = "ClientIP" port { port = 8080 target_port = 80 } type = "LoadBalancer" } }
验证步骤
- 配置更新后执行
kubectl get svc helloworld,等待EXTERNAL-IP列返回公网域名 - 访问
http://<返回的公网域名>:8080即可正常访问Nginx服务
内容的提问来源于stack exchange,提问作者TheWalkingMalteser
相关产品推荐
相关产品推荐

