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

时间:2016-03-14 21:48:48

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

如果这不在群集之外,事情并不容易,我想您的担忧是合理的。目前,GKE不允许使用超出为您的个人kubeconfig文件生成的自定义身份。

您可以获取服务帐户的令牌(在pod中,从/var/run/secrets/kubernetes.io/serviceaccount/token读取),而不是使用您的凭据,而是使用它。这是一个严重的黑客行为,而不是一个很好的通用解决方案,但使用您自己的个人凭证可能略胜一筹。