如何将Terraform创建的私有AWS EKS集群中的Web应用暴露至公网(已配置VPC peering)
可行的公网访问方案
根据你描述的私有EKS集群已和CI/CD VPC完成Peering、应用部署为NodePort Service的场景,这里有几个实用的公网访问方案,你可以结合自身架构和流量需求选择:
方案一:利用CI/CD VPC的公网ALB转发流量(推荐生产场景)
既然已经打通了两个VPC的Peering,完全可以把公网入口放在CI/CD VPC的公有子网里,通过Peering把流量导向EKS集群的NodePort服务:
- 在CI/CD VPC的公有子网创建一个internet-facing的ALB,配置好HTTP/HTTPS监听器
- 创建目标组,类型选择「实例」,把EKS集群的worker节点IP添加进去,端口填你NodePort Service的端口号(比如30000这类)
- 配置VPC Peering的路由表:确保CI/CD VPC的路由表能访问EKS节点所在的私有子网,EKS VPC的路由表也能指向CI/CD VPC的ALB子网
- 调整安全组规则:
- EKS节点的安全组允许来自CI/CD VPC ALB安全组的NodePort端口流量
- ALB的安全组允许公网的HTTP/HTTPS(80/443)流量访问
- 完成后,用户直接访问ALB的公网域名就能到达你的应用了
方案二:CloudFront + EKS内部ALB(适合需要CDN/全球加速的场景)
如果你的应用需要全球加速、缓存或者更安全的公网入口,可以用CloudFront配合EKS VPC内的内部ALB:
- 在EKS VPC的私有子网创建一个内部ALB,目标组指向NodePort Service或者直接关联ClusterIP(如果ALB能访问集群Pod网络的话)
- 创建CloudFront分发,源站设置为内部ALB的私有DNS名称,源类型选「自定义源」
- 配置CloudFront的Origin Access Control(OAC),限制只有CloudFront能访问内部ALB,避免直接访问
- 调整安全组:内部ALB的安全组允许CloudFront边缘节点的IP段(或者通过VPC Peering的CI/CD VPC方向)访问应用端口
- 公网用户通过CloudFront的分配域名访问应用,流量会通过CloudFront的边缘节点转发到EKS的内部ALB
方案三:Bastion主机端口转发(适合临时测试/小流量场景)
如果只是临时需要公网访问测试,不想改动太多架构,可以用CI/CD VPC里的Bastion主机做中转:
- 在CI/CD VPC的公有子网部署一台Bastion实例,分配公网IP,安全组允许公网的SSH(22)和应用端口(比如80)访问
- 可以用两种方式转发流量:
- SSH端口转发:本地执行
ssh -L 80:<EKS节点IP>:<NodePort端口> -i <密钥文件> ec2-user@<Bastion公网IP>,然后本地访问localhost:80就能看到应用(适合个人测试) - 在Bastion上部署Nginx做反向代理,配置Nginx把公网80端口的请求转发到EKS节点的NodePort地址
- SSH端口转发:本地执行
- 确保Bastion的安全组能访问EKS节点的NodePort端口,EKS节点的安全组允许来自Bastion的流量
方案四:扩展EKS VPC添加公有子网部署公网ALB(适合允许修改EKS网络架构的场景)
如果你的EKS VPC目前只有私有子网,可以新增公有子网来部署公网ALB:
- 在EKS VPC中创建两个以上的公有子网,配置路由表指向互联网网关
- 在这些公有子网创建公网ALB,目标组指向EKS节点的NodePort端口
- 调整EKS节点的安全组,允许来自公有子网ALB的流量
- 公网用户直接访问ALB的公网域名即可
内容的提问来源于stack exchange,提问作者jolla
相关产品推荐
相关产品推荐

