Google Cloud Flex App Engine接入HA VPN的流量问题排查
问题分析与排查建议
可能遗漏的关键配置
- App Engine Flex出站IP模式错误:你当前
app.yaml里的instance_ip_mode设为external,这会让应用实例优先用公网IP发流量,根本不会走VPC内网的VPN隧道。要通过VPN访问私有服务,必须把这个参数改成internal,强制流量走子网私有IP。 - AWS侧路由/安全组未放行:GCP侧BGP和隧道状态正常不代表AWS端配置到位——AWS可能没把GCP子网的路由挂到VPN网关,或者私有服务的安全组/网络ACL没允许GCP子网IP段的访问请求。
- GCP路由优先级冲突:如果VPC里默认路由(指向公网)的优先级比BGP学习到的AWS路由还低,流量会被导去公网而非VPN。得确认BGP路由的优先级(默认100)低于默认路由(默认1000)。
- App Engine服务账号权限不足:应用的服务账号可能没权限使用VPC内网资源,需要给它加
roles/compute.networkUser权限,允许实例接入指定子网。
具体排查步骤
- 修正App Engine配置并重新部署:修改
app.yaml的instance_ip_mode为internal,执行gcloud app deploy重新部署。部署后检查实例IP是否属于custom-subnet的私有IP段。 - 核对GCP路由表:进入VPC路由表页面,查看
custom-subnet关联的路由表,确认存在指向AWS私有IP段的BGP路由,下一跳是HA VPN网关,且优先级正确。 - 检查AWS端配置:
- 确认AWS VPN连接的路由表包含GCP子网IP段,且已关联到私有服务所在的子网。
- 检查私有服务的安全组,是否放行GCP子网IP段对应端口的入站流量(比如Web服务的80/443端口)。
- 检查AWS网络ACL,入站和出站规则都要允许GCP与AWS私有IP段之间的双向流量。
- 用临时VM测试连通性:在
custom-subnet里创建一个Compute Engine实例,用它ping或traceroute AWS私有服务IP。如果能通,问题肯定在App Engine Flex配置上;如果也不通,说明VPN或路由/安全组有问题。 - 查看流量日志定位丢包点:
- 在GCP启用VPC流日志,过滤App Engine实例IP和AWS目标IP的流量,看是否有被丢弃的记录。
- 在AWS启用VPC流量日志,检查GCP流量是否到达AWS边界,以及是否被安全组/ACL拦截。
- 确认DNS解析结果:虽然能解析主机名,但要确认解析出的是AWS私有服务的私有IP(不是公网IP)。可以在App Engine实例里执行
nslookup <目标主机名>验证。
内容的提问来源于stack exchange,提问作者Gavin Siu
相关产品推荐
相关产品推荐

