Kubernetes 如何获取“提供者”;“库伯内特斯”通过“google\u容器\u群集”进行身份验证`
需要在不手动运行gcloud命令的情况下将集群部署到GCP和setup、helm、ingres以及其他一些东西。 尝试了很多方法,包括使用和不使用证书和用户/通行证的google_容器_集群。 我得到两种结果:Kubernetes 如何获取“提供者”;“库伯内特斯”通过“google\u容器\u群集”进行身份验证`,kubernetes,terraform,google-kubernetes-engine,Kubernetes,Terraform,Google Kubernetes Engine,需要在不手动运行gcloud命令的情况下将集群部署到GCP和setup、helm、ingres以及其他一些东西。 尝试了很多方法,包括使用和不使用证书和用户/通行证的google_容器_集群。 我得到两种结果: 错误:serviceaccounts被禁止:用户“system:anonymous”无法在命名空间“kube system”的API组“”中创建资源“serviceaccounts” 或 错误:serviceaccounts被禁止:用户“客户端”无法在命名空间“kube system”的
错误:serviceaccounts被禁止:用户“system:anonymous”无法在命名空间“kube system”的API组“”中创建资源“serviceaccounts”
或
错误:serviceaccounts被禁止:用户“客户端”无法在命名空间“kube system”的API组“”中创建资源“serviceaccounts”
我设法理解的是,如果我生成证书,gke将有默认用户“客户端”对应于它将创建的证书,否则它将保持默认用户“匿名”-无用户
我的问题是我无法告诉google\u container\u cluster
使用特定帐户,也无法告诉提供商“kubernetes”
接受任何用户。
此外,如果不通过
gcloud
进行身份验证,也无法找到将RBAC文件应用到集群的方法。我通过更新Terraform连接到Kubernetes集群的方式解决了这个问题。当我将后端更改为使用“远程”(Terraform Cloud)时,它不再工作,并且我收到了相同类型的错误消息。
这是因为“远程”后端Terraform不使用本地kubectl配置
例如,见:
所以我添加了一个块来获取配置
data "google_client_config" "default" {
}
然后,我使用“客户端证书”和“客户端密钥”更新为“令牌”:
希望这对其他人有用
provider "kubernetes" {
load_config_file = false
host = data.google_container_cluster.gke-cluster.endpoint
token = data.google_client_config.default.access_token
cluster_ca_certificate = base64decode(data.google_container_cluster.gke-cluster.master_auth.0.cluster_ca_certificate)
}