GKE Autopilot集群获取身份令牌返回404问题排查求助
排查GKE Pod中获取身份令牌返回404的问题
1. 修正元数据服务器地址
GKE Pod内的元数据服务器正确地址是http://metadata.google.internal,你当前使用的http://metadata缺少.google.internal后缀,这是导致404的核心原因。修正后的命令:
wget -q -O - --header 'Metadata-Flavor:Google' 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=test&format=full&licences=TRUE'
2. 验证Workload Identity绑定状态
Autopilot默认启用Workload Identity,但需确认Kubernetes服务账号(KSA)与Google Cloud服务账号(GSA)的绑定关系:
- 执行
gcloud iam service-accounts get-iam-policy [你的GSA邮箱],检查是否存在roles/iam.workloadIdentityUser权限授予serviceAccount:[你的项目ID].svc.id.goog[命名空间/KS名称] - 确认Deployment配置中
serviceAccountName字段指向的KSA存在且配置正确
3. 检查NetworkPolicy限制
若命名空间下有自定义NetworkPolicy,需确保允许Pod访问元数据服务器:
- 验证策略是否放行对
169.254.169.254(元数据服务器IP)的请求,以及metadata.google.internal的DNS解析
4. 修正参数拼写错误
命令中的licences是英式拼写,元数据API要求美式拼写licenses,虽然这不会直接引发404,但修正后可避免潜在问题:
wget -q -O - --header 'Metadata-Flavor:Google' 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=test&format=full&licenses=TRUE'
5. 测试基础元数据连通性
先执行简单请求验证元数据服务器是否可达:
wget -q -O - --header 'Metadata-Flavor:Google' 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email'
若返回服务账号邮箱,说明元数据访问正常;若仍返回404,需检查Pod所在节点的DNS解析能力。
内容的提问来源于stack exchange,提问作者Genkus
相关产品推荐
相关产品推荐

