terraform一直在为kubernetes提供者覆盖令牌

terraform一直在为kubernetes提供者覆盖令牌,terraform,terraform-provider-kubernetes,Terraform,Terraform Provider Kubernetes,我们正在尝试使用terraform文件中的以下kubernetes提供程序设置运行terraform apply: data "google_client_config" "current" { } data "google_container_cluster" "onboarding_cluster" { name = var.cluster_name location = var.cluster_location } provider "kubernetes" { l

我们正在尝试使用terraform文件中的以下kubernetes提供程序设置运行
terraform apply

data "google_client_config" "current" {
}

data "google_container_cluster" "onboarding_cluster" {
  name     = var.cluster_name
  location = var.cluster_location
}

provider "kubernetes" {
  load_config_file       = false
  host                   = data.google_container_cluster.onboarding_cluster.endpoint
  cluster_ca_certificate = base64decode(data.google_container_cluster.onboarding_cluster.master_auth[0].cluster_ca_certificate)
  token                  = data.google_client_config.current.access_token
}

resource "kubernetes_service_account" "service_account" {
  metadata {
    name      = var.kubernetes_service_account_name
    namespace = var.kubernetes_service_account_namespace
  }
}
但我们得到了以下错误:

错误:未经授权
在main.tf第85行的资源“kubernetes_服务账户”“服务账户”中:
85:资源“kubernetes_服务账户”“服务账户”{
TF_LOG
设置为
DEBUG
后,我们看到创建kubernetes服务帐户的请求如下:

---[ REQUEST ]---------------------------------------
POST /api/v1/namespaces/default/serviceaccounts HTTP/1.1
...
Authorization: Bearer <SOME_KUBERNETES_JWT>
即使使用了上述方法,令牌在HTTP请求中仍将保持不变

我们发现,在auth头中发送的令牌位于terraform容器上的
/run/secrets/kubernetes.io/servicecomport/token


terraform是否有理由用kubernetes生成的令牌覆盖此令牌?我们是否可以尝试其他设置?

这是kubernetes提供商的问题。Github问题如下:

要修复此问题,请将提供商版本设置为1.9,如下所示:

provider "kubernetes" {
  version = "1.9"
  cluster_ca_certificate = base64decode(
    data.google_container_cluster.this.master_auth[0].cluster_ca_certificate,
  )
  host             = data.google_container_cluster.this.endpoint
  token            = data.external.get_token.result["token"]
  load_config_file = false
}
provider "kubernetes" {
  version = "1.9"
  cluster_ca_certificate = base64decode(
    data.google_container_cluster.this.master_auth[0].cluster_ca_certificate,
  )
  host             = data.google_container_cluster.this.endpoint
  token            = data.external.get_token.result["token"]
  load_config_file = false
}