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

这个问题我喜欢 neat, tidy, declarative 方式来创建一个集群并拥有一组凭据,我可以使用它来短期对其进行"admin"操作,包括引导其他用户 . 我知道如何使谷歌用户看起来非常好 . 尤其是,k8s TF提供程序不支持集群绑定(Issuepartial PR),因此您必须"shell out"与 local-exec 配置程序首先运行 gcloud container clusters get-credentials 然后 kubectl create clusterrolebinding ... .

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

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

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

我的选择似乎是:

  • "shell out"给TF的谷歌ID(理想情况下是服务帐户)cluster-admin(这是特权升级,但由于gcloud authz插件而有效)

  • 启用HTTP基本身份验证并为管理员帐户提供密码,然后使用别名k8s配置程序对其他服务帐户进行最小程度的引导 .

  • 启用ABAC以便"client"(输出键/证书的CN)具有无限功率 - 这就是我判断我的意思!

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