簡體   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