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

标签 go google-cloud-platform kubernetes google-kubernetes-engine

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

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

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

谢谢。

最佳答案

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

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

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

关于go - 如何创建新的客户端证书/ token 以编程访问托管在 GKE 上的 Kubernetes API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998735/

相关文章:

concurrency - Enque 和 deque 使 channel 死锁

google-cloud-platform - GCP - 无法对自己进行身份验证以调用 Google Cloud 功能

kubernetes - 运行 kubelet 时出错

kubernetes - 如何禁用 Stackdriver 日志记录?

regex - HostRegexp 失败

go - 构建自定义 Terraform 提供程序出错

戈尔姆 : two foreign keys to one table

jenkins - 已从 Google Cloud VM 中删除 authorized_keys

kubernetes - 如何在GCP中创建ClusterPodMonitoring?

elasticsearch - 没有为弹性生成外部IP