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

本地正常但K8S集群中Vertex AI服务账号认证失败求助

解决K8S集群中Vertex AI调用的认证失败问题

问题背景

开发的TypeScript服务器应用使用Vertex AI文本生成功能,打包为Docker镜像后在本地K8S集群运行时,调用Vertex AI方法返回错误:

[ExceptionsHandler] [VertexAI.GoogleAuthError]: Unable to authenticate your request

已执行的认证操作:

  1. 本地Linux机器执行gcloud auth activate-service-account --key-file=$GOOGLE_APPLICATION_CREDENTIALS可正常运行,但K8S集群中初始失败;
  2. 因自定义凭证问题,已在Google Cloud控制台IAM服务账号中注册PEM文件,并执行gcloud config set custom_ca_certs_file=custom_cert.pem,此后gcloud认证命令成功,但应用调用Vertex AI仍失败。

已知条件:

  • 环境变量GOOGLE_APPLICATION_CREDENTIALS已正确配置服务账号密钥文件
  • Docker镜像包含Google Cloud认证所需工具和凭证
  • 服务账号拥有Vertex AI所需权限

排查与解决步骤

1. 验证Pod内凭证文件的可用性与权限

  • 进入运行中的Pod,执行cat $GOOGLE_APPLICATION_CREDENTIALS确认密钥文件内容完整、格式正确;
  • 检查密钥文件权限,确保应用进程拥有读取权限(建议设置为600),可在Dockerfile中添加chmod 600 $GOOGLE_APPLICATION_CREDENTIALS,或在K8S部署文件中配置文件权限。

2. 为应用显式配置自定义CA证书

gcloud config设置的自定义CA仅对gcloud工具生效,TypeScript应用依赖的Google Cloud Client Library不会自动读取该配置,需手动指定:

  • 在代码中通过GoogleAuth配置证书路径:
    import { GoogleAuth } from 'google-auth-library';
    const auth = new GoogleAuth({
      keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS,
      sslCertPath: '/path/to/custom_cert.pem' // 替换为实际证书路径
    });
    
  • 或设置环境变量GRPC_DEFAULT_SSL_ROOTS_FILE_PATH指向自定义CA证书,确保Vertex AI依赖的gRPC客户端使用该证书。

3. 在Pod内直接测试Vertex AI API调用

通过curl直接调用Vertex AI REST API,验证认证有效性:

# 获取访问令牌
ACCESS_TOKEN=$(gcloud auth print-access-token)
# 调用文本生成API(替换为你的项目、区域、模型信息)
curl -X POST \
  "https://us-central1-aiplatform.googleapis.com/v1/projects/[PROJECT_ID]/locations/[LOCATION]/publishers/google/models/text-bison:predict" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "instances": [{"prompt": "test"}],
    "parameters": {"temperature": 0.7}
  }'

如果调用成功,说明认证本身有效,问题出在应用SDK配置;如果失败,需排查K8S网络连通性或令牌权限。

4. 检查K8S网络与防火墙规则

  • 在Pod内执行ping aiplatform.googleapis.com或telnet aiplatform.googleapis.com 443,确认集群能访问Google Cloud API端点;
  • 若集群处于企业内网,检查是否有防火墙或代理拦截HTTPS请求,必要时为应用配置HTTP_PROXY、HTTPS_PROXY环境变量。

5. 改用Workload Identity认证(若支持)

如果本地K8S集群兼容Workload Identity(如GKE或适配的本地集群),建议替代密钥文件认证:

  • 创建K8S ServiceAccount并与Google Cloud服务账号绑定;
  • 在部署文件中指定该K8S ServiceAccount,应用将自动获取认证凭证,无需手动管理密钥。

6. 开启认证详细日志定位问题

在应用中开启Google Auth调试日志,获取具体失败原因:

process.env.GOOGLE_AUTH_DEBUG = 'true';

运行应用后查看日志,可定位如密钥文件读取失败、证书验证错误等具体问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:37:37