通过中间Admin账户VPC Peering无法访问AWS环境中Prod账户的Nexus服务器
问题诊断与修复方案
1. 先查DNS解析是否正确
Jenkins agent访问nexus.company.com时,必须解析到prod账户内部ALB的私有IP——要是解析到公网IP肯定连不上(内部ALB没有公网入口)。
- 在Jenkins agent上执行
nslookup nexus.company.com或dig nexus.company.com,检查返回的IP是否属于prod VPC的私有CIDR范围。 - 如果解析到公网IP:
- 确认staging与admin的VPC peering连接已开启
Allow DNS resolution from peer VPC选项。 - 检查内部DNS服务(比如Route 53私有托管区)是否已将
nexus.company.com指向prod内部ALB的私有IP,且staging、admin的VPC都关联了该托管区。
- 确认staging与admin的VPC peering连接已开启
2. 核对三段VPC peering的路由表规则
因为流量路径是staging -> admin -> prod,三个账户的相关路由表都需要添加对应规则:
- staging账户:Jenkins agent所在子网的路由表添加一条规则:
- 目标:prod VPC的CIDR(例如
10.1.0.0/16) - 下一跳:staging与admin之间的VPC peering连接ID
- 目标:prod VPC的CIDR(例如
- admin账户:关联peering的路由表(主路由表或对应子网的自定义路由表)添加两条规则:
- 目标:staging VPC的CIDR(例如
10.2.0.0/16),下一跳选择staging-admin的peering ID - 目标:prod VPC的CIDR(例如
10.1.0.0/16),下一跳选择admin-prod的peering ID
- 目标:staging VPC的CIDR(例如
- prod账户:Nexus和内部ALB所在子网的路由表添加一条规则:
- 目标:staging VPC的CIDR(例如
10.2.0.0/16) - 下一跳:admin-prod的peering连接ID
- 目标:staging VPC的CIDR(例如
3. 安全组与网络ACL要放通双向流量
安全组是状态化的,但网络ACL是非状态化的,必须确保双向流量都被允许:
- Jenkins agent的安全组:出站规则允许到prod VPC CIDR的Nexus服务端口(例如
8081/TCP) - prod内部ALB的安全组:入站规则允许来自staging VPC CIDR的对应端口(例如
8081/TCP) - Nexus服务器的安全组:入站规则允许来自prod内部ALB所在子网CIDR的对应端口(例如
8081/TCP) - 三个VPC的网络ACL:
- 入站规则:允许来自对方VPC CIDR的TCP流量(目标端口为Nexus端口),如果需要用traceroute排查,同时放通ICMP协议
- 出站规则:允许返回的TCP流量(源端口为Nexus端口,目标为对方VPC CIDR),以及ICMP响应包
4. 确认VPC peering的关键开关
两个peering连接(staging-admin、admin-prod)都需要开启以下选项:
Allow inbound communication from peer VPCAllow DNS resolution from peer VPC
5. 绕过DNS直接测试IP(排除DNS干扰)
如果怀疑DNS有问题,可以直接用prod内部ALB的私有IP测试连通性:
- 在Jenkins agent上执行
telnet <ALB私有IP> 8081或nc -zv <ALB私有IP> 8081 - 能连通说明问题出在DNS配置;仍然不通则继续排查路由和安全组
路由表配置最佳实践
- 避免在VPC主路由表中添加跨账户路由,建议为需要跨网通信的子网单独创建自定义路由表,减少影响范围。
- 路由规则的目标CIDR要精确,不要使用过于宽泛的网段,避免流量走向异常。
- 定期审计路由表,清理无用的路由条目,避免规则混乱。
内容的提问来源于stack exchange,提问作者Mujahed Altahleh
相关产品推荐
相关产品推荐

