繁体   English   中英

如何在使用Terraform启动GKE集群时引导RBAC权限

[英]How to bootstrap RBAC privileges when bringing up a GKE cluster with Terraform

我带了Terraform的GKE集群,效果很好。 然后我想让Terraform在集群上执行一些Kubernetes级别的操作(使用k8s提供程序) - 没什么大不了的,只需要安装几个部署等。

我遇到的问题是权限。 我想要一个整洁,整洁,声明的方式来创建一个集群并拥有一组凭据,我可以使用短期来对其进行“管理”操作,包括引导其他用户。 我知道如何让运行TF的谷歌用户成为群集的管理员(这个问题出现了很多),但这似乎并不是很好 尤其是,k8s TF提供程序不支持集群绑定( 问题部分PR ),因此您必须使用local-exec配置程序“shell out”以首先运行gcloud container clusters get-credentials ,然后kubectl create clusterrolebinding ...

同样,我不想设置主密码,因为我不想在HTTP基本身份验证上运行。 最好的选项看起来是由TF GKE资源返回的密钥/证书对,但它具有“客户端”的CN,并且该用户没有电源。 所以再一次,使用它的唯一方法是向kubectl发送shell,将gcloud服务帐户凭据传递给它,然后让它为“client”添加一个clusterrolebinding,此时我也可以将所有内容作为服务帐户执行像上面一样。

相比之下,在EKS上,创建集群的(AWS IAM)用户具有开箱即用的集群管理员(我假设AWS authn提供者声明用户在“system:masters”中)。

我在这里的实际问题是:在Terraform中是否有一个完整的,完全声明的方式来调出一个集群并且可以(理想情况下作为输出)使用一组有效的凭据然后丢弃? (是的,我知道他们会留在tfstate)

我的选择似乎是:

  • “shell out”给TF的谷歌ID(理想情况下是服务帐户)cluster-admin(这是特权升级,但由于gcloud authz插件而有效)
  • 启用HTTP基本身份验证并为管理员帐户提供密码,然后使用别名k8s配置程序来执行另一个服务帐户的最小引导。
  • 启用ABAC以便“客户端”(输出密钥/证书的CN)具有无限的功率 - 这是我目前正在运行的,不要评判我!

我不喜欢他们中的任何一个!

我一直遇到一个类似的问题,因为最近Kubernetes问题出乎意料地默认禁用了基本身份验证,因为我试图从同一个配置构建一个新群集时,它突然破坏了我以前运行的Terraform配置。

最后在这个SO答案中找到了答案, 该答案建议使用Terraform的Google IAM信用卡连接到集群而不需要“shell out”。 请注意,此方法允许在Terraform中引导群集权限,而无需外部工具/黑客/等,无需启用基本身份验证。

该答案的相关部分是:

data "google_client_config" "default" {}

provider "kubernetes" {
  host     = "${google_container_cluster.default.endpoint}"

  token = "${data.google_client_config.default.access_token}"
  cluster_ca_certificate = "${base64decode(google_container_cluster.default.master_auth.0.cluster_ca_certificate)}"

  load_config_file = false
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM