You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE访问受限IP的Google APIs遭拒:请求源自IPv6地址

GKE调用Google Maps API遇REQUEST_DENIED:IPv6地址未授权问题

问题描述

我为Geocoding API、Maps JavaScript API和Places API的API密钥配置了Cloud NAT的IPv4地址作为IP限制,但从Google Kubernetes Engine(GKE)集群内通过curl调用API时,收到REQUEST_DENIED响应,提示请求来自某IPv6地址。但在集群内执行curl ifconfig.me返回的却是Cloud NAT的IPv4地址(34.87.xxx.xx),对此十分困惑。

请求命令:

curl --location --request GET 'https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Wonogiri&types=&key=MY-API-KEY'

错误响应:

{
   "error_message" : "This IP, site or mobile application is not authorized to use this API key. Request received from IP address IPV6_ADDRESS, with empty referer",
   "predictions" : [],
   "status" : "REQUEST_DENIED"
}

原因分析

  • GKE节点默认支持双栈(IPv4+IPv6)时,系统会优先尝试用IPv6连接Google API服务器,而你的API密钥仅授权了Cloud NAT的IPv4地址,导致请求被拒绝。
  • curl ifconfig.me返回IPv4是因为该服务可能仅返回IPv4结果,或curl访问该服务时默认优先使用IPv4,但访问Google Maps API时走了IPv6路由。

解决方法

1. 强制curl使用IPv4

在curl命令中添加-4参数,强制使用IPv4协议发起请求:

curl -4 --location --request GET 'https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Wonogiri&types=&key=MY-API-KEY'

如果请求成功,即可确认是IPv6优先级导致的问题。

2. 调整GKE节点网络配置

  • 检查集群是否启用双栈:若集群开启了IPv6,可修改节点池配置,禁用IPv6,或添加路由规则让访问Google API的流量强制走IPv4。
  • Pod级别配置:在容器中添加环境变量或修改网络设置,强制容器内请求使用IPv4(例如设置IPV6_DISABLE=1之类的环境变量,具体取决于容器基础镜像)。

3. 为API密钥添加IPv6授权

若需保留IPv6功能,可将GKE节点的IPv6地址(或集群IPv6网段)添加到API密钥的IP允许列表中。注意:若节点IPv6地址是动态分配的,需定期更新授权列表。

4. 检查Cloud NAT配置

确认Cloud NAT是否仅处理IPv4流量,未配置IPv6 NAT规则。若集群启用IPv6但Cloud NAT未处理IPv6请求,IPv6流量会直接从节点IPv6地址发出,不经过Cloud NAT转换,导致不在授权范围内。

内容的提问来源于stack exchange,提问作者adhithia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:10:54