同项目下GKE集群服务无法访问设置内部入站规则的Cloud Function怎么办
配置方案(GKE访问内部限流Cloud Function 403问题)
核心原因说明
你为Cloud Function配置的仅允许内部流量的ingress规则,会拦截所有来自公网路径的请求,同时默认要求请求携带合法的GCP身份验证凭证,满足两个条件才能正常访问。
必做配置项
1. 确保GKE到Cloud Function的请求走VPC内部链路
- 确认GKE集群属于和Cloud Function同一VPC,且为VPC原生集群;如果是非VPC原生集群,需要将集群Pod、Service IP段添加到对应VPC的路由规则中
- 为GKE集群配置Serverless VPC Access连接器,强制所有发往Cloud Function的流量走内部VPC通道,避免绕行公网被拦截
2. 配置Cloud Function调用权限
给GKE工作负载使用的服务账号授予Cloud Function调用权限:
- 确定GKE使用的服务账号:未配置Workload Identity时用节点默认服务账号
[项目ID]-compute@developer.gserviceaccount.com;配置Workload Identity时用绑定的GCP服务账号 - 执行命令授予调用角色:
gcloud functions add-iam-policy-binding <Function名称> \ --region <部署区域> \ --member="serviceAccount:<服务账号邮箱>" \ --role="roles/cloudfunctions.invoker"
3. 调整GKE服务的请求逻辑
- 发送请求时需要在HTTP头添加身份验证凭证:
Authorization: Bearer <身份令牌>,令牌可以通过gcloud auth print-identity-token <Cloud Function触发URL>生成,用GCP官方SDK调用时会自动填充该请求头 - 如果你不需要额外的身份验证(ingress规则已经完成第一层防护),可以给
allUsers授予roles/cloudfunctions.invoker角色,公网用户即使有权限也无法访问,不会产生安全风险
验证方法
在GKE集群中启动测试Pod,执行如下命令验证连通性:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token <Cloud Function触发URL>)" <Cloud Function触发URL>
返回正常响应即配置完成。
内容的提问来源于stack exchange,提问作者Girish
相关产品推荐
相关产品推荐

