EKS私有子网工作节点访问AWS LoadBalancer的正确配置方案咨询
根因说明
你遇到的访问逻辑问题本质是流量路径的源IP变化:
- 你当前配置的Route53记录默认将域名解析到LoadBalancer的公网IP
- 私有子网内的Pod访问公网IP时,流量会先经过NAT网关做源地址转换,访问LoadBalancer的请求源IP会被替换为NAT网关的公网IP,而非工作节点的私有IP
- 因此你放行工作节点安全组的规则不会匹配到来自NAT网关的公网请求,才会出现超时
第一个问题:放行NAT网关公网IP的方案是否正确
该方案技术上可以解决当前问题,但不是最优选择:
- 可行的前提是你使用弹性EIP作为NAT网关的公网IP,不会随NAT网关重建/变更而修改
- 缺陷是维护成本高:如果有多可用区多NAT网关、多VPC访问的场景,需要手动维护大量公网IP规则,安全性也弱于安全组引用的方式
更简洁合理的访问方案
根据你的业务场景可以选择以下任意一种方案,都是生产环境的常用最佳实践:
方案1:开启公网LoadBalancer的私有DNS解析(最推荐,适配公网LB同时对内对外提供服务的场景)
如果你的LoadBalancer是公网ALB:
- 开启ALB的
Private DNS Name功能,开启后,同VPC内访问ALB的公网域名时,会自动解析到ALB的VPC内网接口IP - 流量全程走VPC内部路由,不需要经过NAT网关和公网,请求源IP为工作节点的私有IP
- 此时只需要在LoadBalancer安全组入站规则中引用工作节点安全组作为源,即可完成访问放行,无需维护任何公网IP规则
方案2:配置Route53私有托管区拆分解析
如果你的LoadBalancer是NLB,或者不想修改LB配置:
- 创建和公网托管区同名的Route53私有托管区,关联到你的EKS集群所在VPC
- 在私有托管区中添加同域名的A记录,指向LoadBalancer的VPC内网IP
- 效果和方案1完全一致,VPC内部访问域名时直接解析到内网IP,走内网流量,适配安全组引用规则
方案3:切换为内部LoadBalancer
如果该LoadBalancer仅需要给VPC内部(包括EKS集群)的业务提供服务,不需要对外暴露公网入口:
- 直接将LoadBalancer的类型修改为
internal,不会分配公网IP,所有访问都是VPC内部流量 - 直接在安全组放行工作节点安全组即可,不需要额外的DNS配置
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

