我的代码与哪个服务帐户一起运行?

时间:2020-07-15 23:00:49

标签: go kubernetes google-kubernetes-engine prometheus

首先了解一些背景

我们正在运行一个kubernetes集群,该集群具有一个由Google提供的容器(具体来说,prometheus-to-sd,我们使用它来将自定义指标导入Google云端监控fka stackdriver)。 在我们在集群上启用Workload Identity之前,该pod运行良好。

该Pod当前使用应用程序默认凭据运行,该凭据以前是被设置为具有gcp角色monitoring.writer的服务帐户。

当我们引入Workload Identity时,应用程序的默认凭据发生了变化,prometheus-to-sd容器开始抱怨缺少权限monitoring.timeSeries.create

我尝试将GOOGLE_APPLICATION_CREDENTIALS设置为从gke机密挂载的文件。 我确认文件在那里并且已设置环境var(kubectl exec -it $POD /bin/sh)。

我正在尝试调试问题所在。

编程问题

我想编写一些go代码来验证哪个gcp服务帐户正在运行,但是所有示例都显示了Client,这是具有授权标头设置的http客户端。 参见https://github.com/googleapis/google-api-go-client

例如:

import (
        "context"
        "fmt"
        "golang.org/x/oauth2/google"
)

func main() {
    ctx := context.Background()

    creds, err := google.FindDefaultCredentials(ctx)
    fmt.Printf("%+v\n", *creds)
    
}

这将大致打印出一些内容:

{ProjectID:projectId TokenSource:0xc000120880 JSON:[/* big chunk of byte values, no idea what these mean */]}

现在我可以自己加载文件了,但这违背了测试是否选择默认凭据的机制的目的。

我也看过其他语言,例如nodejs,但基本上显示了相同的问题。该代码正在使用某些凭据运行,尚不清楚使用了哪些凭据。

0 个答案:

没有答案