mt1*_*165 6 google-compute-engine kubernetes google-kubernetes-engine terraform
我将Terraform与GKE集群结合使用,效果很好。然后,我希望Terraform在群集上执行一些Kubernetes级别的操作(使用k8s提供程序)-规模不大,只需安装几个Deployments等。
我遇到的问题是权限。我希望使用一种整洁,整洁,声明式的方法来创建集群,并拥有一组凭据,以便我可以使用短期凭据对其进行“管理”操作,包括引导其他用户。我知道如何使运行TF的google用户成为群集的管理员(这个问题经常出现),但这似乎不是很好。尤其重要的是,k8s TF提供程序不支持clusterolebinding(Issue,部分PR),因此您必须先使用配置程序“淘汰” ,然后再local-exec运行。gcloud container clusters get-credentialskubectl create clusterrolebinding ...
同样,我不想设置主密码,因为我不想在HTTP基本身份验证上运行。最好的选项似乎是TF GKE资源返回的密钥/证书对,但是其CN为“ client”,并且该用户没有权限。因此,再次使用它的唯一方法是将其封装到kubectl中,将其传递给gcloud服务帐户凭据,并为其添加一个用于“客户端”的clusterrolebinding,这时我也可以像服务帐户一样做所有事情像上面一样。
相比之下,在EKS上,创建集群的(AWS IAM)用户具有开箱即用的cluster-admin(我假设AWS authn提供程序声称该用户位于“ system:masters”中)。
我在这里的实际问题是:Terraform中是否有一种整洁的,完全声明性的方式来建立集群并提供(最好作为输出使用)一组有效的凭据,然后使用它们删除?(是的,我知道他们会留在tfstate中)
我的选择似乎是:
而且我不喜欢任何一个!
小智 5
我遇到了类似的问题,自从最近的 Kubernetes 问题意外禁用了默认情况下的基本身份验证以来,该问题变得特别令人讨厌,一旦我尝试从相同的配置构建新集群,这就会破坏我以前运行的 Terraform 配置。
最后在这个 SO answer 中找到了一个答案,它推荐了一种使用 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |