为什么在 GKE 实例中 运行 时 @google-cloud/profiler 抛出 'permission_denied' 错误?

Why is @google-cloud/profiler throwing 'permission_denied' errors when running inside a GKE instance?

我一直在按照 https://cloud.google.com/profiler/docs/profiling-nodejs#gke 上的说明进行操作 为我的 nodejs 应用程序使用 gcloud 分析器:

我将 RUN npm install @google-cloud/profiler 添加到我的 dockerfile 中。 我添加了

require('@google-cloud/profiler').start({
    serviceContext: {
        service: 'your-service',
        version: '1.0.1',
    },
});

到我的 app.js 文件。

然后我 运行 GKE 集群上的容器并收到以下错误:

@google-cloud/profiler Failed to create profile, waiting 8.6s to try again: Error: generic::permission_denied

根据我对文档的理解,当 运行 来自 gcloud 托管实例中的代码时,我不需要明确的身份验证或权限来创建配置文件。 错误本身并不是很有帮助,我在这里有点不知所措。 我已经尝试过使用 --(autoprovisioning-)scopes "https://www.googleapis.com/auth/cloud-platform" 创建集群是否可以解决问题,但也没有运气。

知道这里的问题是什么吗?

您说得对,文档建议您不需要凭据但是我认为您需要(而且文档不完整)。

当应用程序(例如 Profiler)使用 Google 的应用程序默认凭据并在例如Compute Engine(App Engine、Cloud 运行 等)它能够从环境中获取 credentials automatically(在 GCP 上使用元数据服务;由开发人员在本地使用,将 GOOGLE_APPLICATION_CREDENTIALS 导出到密钥) .

在 GKE 上,我认为这 不是 正确的(除非 Google 在某处做一些魔术)并且该应用程序将无法访问凭证会自动 除非 您在 GKE 中代表它们。我 认为 (!?) 您需要创建一个服务帐户并且:

NOTE Workload Identity is a neat feature but it's only useful if you only ever plan to use GKE (and not some other Kubernetes implementation).

在继续之前,让我们看看其他人是否回复告诉我我错了。

wrote 关于使用当时称为 Stackdriver Profiler 的 GKE 部署应用程序。文章已过时,但它应该提供您需要执行的操作的概要。