升级GKE节点至v1.23.16后部分Pod无法读取Secret求助
GKE节点升级后部分Java Pod读取Secret报ADC不可用错误的排查思路
检查Pod的服务账号(ServiceAccount)配置差异
- 对比异常Pod与正常Pod的
serviceAccountName,确认是否使用了不同的SA:kubectl describe pod <异常Pod名称> | grep ServiceAccount - 验证该SA是否具备Secret Manager的访问权限:检查绑定的ClusterRole/Role是否包含
secretmanager.secrets.access权限,可通过kubectl get rolebindings <绑定名称> -o yaml查看权限规则 - 确认SA未被误删除或修改,排除升级过程中可能出现的配置覆盖问题
- 对比异常Pod与正常Pod的
验证Pod对节点元数据服务器的访问能力
- 在异常Pod内执行元数据访问测试:
curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token,正常应返回包含access_token的JSON数据 - 检查Pod的
securityContext是否有阻止元数据访问的配置,比如是否设置了allowPrivilegeEscalation: false或其他网络限制规则 - 检查集群网络策略,确认不存在拦截Pod访问169.254.169.254(元数据服务器地址)的规则
- 在异常Pod内执行元数据访问测试:
排查Java客户端库的兼容性
- 对比异常Pod与正常Pod使用的Google Cloud Java客户端版本,重点检查
google-cloud-secretmanager和google-auth-library-oauth2-http的版本号 - 旧版本客户端可能与GKE 1.23.16的元数据服务器逻辑不兼容,尝试升级到对应GKE版本适配的客户端版本
- 对比异常Pod与正常Pod使用的Google Cloud Java客户端版本,重点检查
检查Pod启动环境的变量与镜像差异
- 查看异常Pod的环境变量是否存在干扰ADC的配置:
kubectl exec <异常Pod名称> -- env | grep GOOGLE,确认GOOGLE_APPLICATION_CREDENTIALS未被意外设置为空值,GOOGLE_CLOUD_PROJECT等核心变量是否正常 - 确认异常Pod使用的镜像与正常Pod完全一致,排除镜像构建错误或版本不一致的问题
- 查看异常Pod的环境变量是否存在干扰ADC的配置:
检查节点元数据服务器状态
- 登录异常Pod所在的GKE节点,检查元数据代理服务状态:
systemctl status google-metadata-agent - 查看节点元数据服务日志,排查是否存在服务异常:
journalctl -u google-metadata-agent - 对比正常节点与异常节点的元数据服务配置,确认无差异
- 登录异常Pod所在的GKE节点,检查元数据代理服务状态:
临时验证:手动挂载SA密钥
- 为异常Pod对应的SA创建密钥文件,通过Kubernetes Secret挂载到Pod内,设置环境变量
GOOGLE_APPLICATION_CREDENTIALS指向该文件,验证是否能正常读取Secret - 若手动挂载后正常,说明问题出在ADC自动获取凭证的流程;若仍异常,则需排查SA权限或Secret Manager本身的配置
- 为异常Pod对应的SA创建密钥文件,通过Kubernetes Secret挂载到Pod内,设置环境变量
内容的提问来源于stack exchange,提问作者gambitx28
相关产品推荐
相关产品推荐

