[英]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)
我的选择似乎是:
我不喜欢他们中的任何一个!
我一直遇到一个类似的问题,因为最近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.