如何创建新的客户端证书/令牌以编程访问托管在 GKE 上的 Kubernetes API?

How to create new client certificates / tokens for programmatic access to the Kubernetes API hosted on GKE?

我是 运行 托管在 GKE 上的 Kubernetes 集群,我想编写一个与 Kubernetes API 通信的应用程序(用 Go 编写)。我的理解是,我可以提供客户端证书、不记名令牌或 HTTP 基本身份验证,以便通过 apiserver 进行身份验证。我已经找到了将这些中的任何一个注入 Golang client library.

的正确位置

不幸的是,我 运行 中的示例倾向于引用存储在我的个人 kubeconfig 文件中的现有凭据。从安全角度来看,这似乎是不可取的,并且让我相信我应该创建一个新的客户端证书/令牌/用户名-密码对,以支持容易 revocation/removal 的受损帐户。但是,我在文档中找不到实际描述在 GKE 中的托管 Kubernetes 上 运行 时如何解决这个问题的地方。 (this guide on creating new certificates 解释说 apiserver 最终需要使用更新的参数重新启动,据我所知,这在 GKE 中无法完成。)

我对在一个(或可能多个)应用程序中重复使用我的个人 Kubernetes 凭据的安全担忧是否没有道理?如果不是,生成一组新凭据的正确方法是什么?

谢谢。

如果您的应用程序在 运行 集群内,您可以使用 Kubernetes Service Accounts 向 API 服务器进行身份验证。

如果这在集群之外,事情就没那么容易了,我想你的担心是有道理的。目前,除了为您的个人 kubeconfig 文件生成的身份之外,GKE 不允许使用其他自定义身份。

您可以获取服务帐户的令牌(在 pod 内,从 /var/run/secrets/kubernetes.io/serviceaccount/token 读取),而不是使用您的凭据,而是使用它。这是一个严重的 hack,而不是一个很好的通用解决方案,但它可能比使用您自己的个人凭据稍微好一点。