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

跨项目使用GCP Pub/Sub指标配置HPA遇权限问题求助

跨项目GKE HPA访问Pub/Sub指标的403权限问题解决

问题场景

我需要为ProjectA中的GKE工作负载配置HPA,使用ProjectB的Pub/Sub未投递消息数指标,但遇到如下权限拒绝错误:

Warning FailedGetExternalMetric 9s (x12 over 2m56s) horizontal-pod-autoscaler unable to get external metric default/pubsub.googleapis.com|subscription|num_undelivered_messages/&LabelSelector{MatchLabels:map[string]string{resource.labels.project_id: ProjectB,resource.labels.subscription_id: ProjectB.Subscription,},MatchExpressions:[]LabelSelectorRequirement{},}: unable to fetch metrics from external metrics API: the server could not find the descriptor for metric pubsub.googleapis.com/subscription/num_undelivered_messages: googleapi: Error 403: Permission monitoring.metricDescriptors.get denied (or the resource may not exist)., forbidden

已确认前置条件:

  • 两个项目都分配了Monitoring.admin角色
  • 已启用Pub/Sub API
  • ProjectA内部的Pub/Sub指标可正常用于HPA配置

核心问题

错误提示的monitoring.metricDescriptors.get权限缺失,本质是GKE集群的Metrics Server/External Metrics Adapter使用的服务账号,没有跨项目访问ProjectB监控指标的权限——这和你手动操作的账号权限无关。


修复步骤

1. 找到GKE节点池的服务账号

查看ProjectA中GKE集群节点池使用的服务账号:

gcloud container node-pools describe YOUR_NODE_POOL_NAME --cluster=YOUR_CLUSTER_NAME --project=ProjectA

输出中找到serviceAccount字段,格式通常为[PROJECT_NUMBER]-compute@developer.gserviceaccount.com(默认计算引擎服务账号)。

2. 给该服务账号授予ProjectB的监控权限

在ProjectB中,为上述服务账号添加细粒度的监控读取权限(比Monitoring.admin更安全):

gcloud projects add-iam-policy-binding ProjectB \
  --member="serviceAccount:[YOUR_SERVICE_ACCOUNT_FROM_STEP1]" \
  --role="roles/monitoring.metricReader"

这个角色包含访问监控指标描述和时间序列数据的必要权限,足够满足HPA需求。

3. 配置Pub/Sub订阅的访问权限

确保服务账号能读取ProjectB的Pub/Sub订阅信息:

gcloud pubsub subscriptions add-iam-policy-binding ProjectB.Subscription \
  --project=ProjectB \
  --member="serviceAccount:[YOUR_SERVICE_ACCOUNT_FROM_STEP1]" \
  --role="roles/pubsub.viewer"

4. 验证权限是否生效

用服务账号模拟访问ProjectB的监控指标:

# 仅测试用,生产环境请勿下载密钥
gcloud iam service-accounts keys create key.json --iam-account=[YOUR_SERVICE_ACCOUNT_FROM_STEP1] --project=ProjectA
export GOOGLE_APPLICATION_CREDENTIALS=./key.json
# 查询指标描述
gcloud monitoring metrics descriptors describe pubsub.googleapis.com/subscription/num_undelivered_messages --project=ProjectB

如果能成功返回指标详情,说明权限配置没问题。

5. 刷新HPA配置

删除并重新创建HPA资源,让它读取新的权限配置:

kubectl delete hpa YOUR_HPA_NAME
kubectl apply -f your-hpa-config.yaml

注意事项

  • 遵循最小权限原则:优先用Monitoring Metric Reader而非Monitoring.admin,避免过度授权
  • 跨项目IAM权限生效可能有1-2分钟延迟,不用反复操作
  • 若使用自定义服务账号而非默认计算引擎账号,要确保该账号已正确关联到GKE节点池

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:19:58