我正在尝试编写一个简单的后端来访问我的 Google Cloud Firestore,它位于 Google Kubernetes Engine 中。在我的本地,我使用以下代码对 Firestore 进行身份验证,如 Google 文档中所述。
if (process.env.NODE_ENV !== 'production') {
const result = require('dotenv').config()
//Additional error handling here
}
Run Code Online (Sandbox Code Playgroud)
这会提取 GOOGLE_APPLICATION_CREDENTIALS 环境变量,并使用我google-application-credentals.json
通过创建具有该角色的服务帐户时获得的my 来填充它"Cloud Datastore User"
。
所以,在本地,我的代码运行良好。我可以到达我的 Firestore 并执行我需要执行的所有操作。然而,一旦我部署到GKE,问题就出现了。
我按照此Google 文档为我的集群设置了工作负载身份,我创建了一个部署,并通过运行以下命令验证所有 Pod 是否都使用正确的 IAM 服务帐户:
kubectl exec -it POD_NAME -c CONTAINER_NAME -n NAMESPACE sh
> gcloud auth list
Run Code Online (Sandbox Code Playgroud)
我从文档中得到的印象是,只要上述内容成立,我的服务就会处理身份验证。我真的不确定为什么,但我的 Firestore() 实例的行为就好像它没有访问 Firestore 所需的凭据。
如果有帮助的话,下面是我的实例声明和实现:
kubectl exec -it POD_NAME -c CONTAINER_NAME -n NAMESPACE sh
> gcloud auth list
Run Code Online (Sandbox Code Playgroud)
更新: …
node.js kubernetes google-kubernetes-engine google-iam google-cloud-firestore