terraform продолжает перезаписывать токен для провайдера Kubernetes

Мы пытаемся запустить terraform apply со следующей настройкой провайдера kubernetes в нашем файле terraform:

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
  }
}

Но мы получаем следующую ошибку:

Error: Unauthorized

  on main.tf line 85, in resource "kubernetes_service_account" "service_account":
  85: resource "kubernetes_service_account" "service_account" {

После установки TF_LOG на DEBUG мы видим следующий запрос на создание учетной записи службы kubernetes:

---[ REQUEST ]---------------------------------------
POST /api/v1/namespaces/default/serviceaccounts HTTP/1.1
...
Authorization: Bearer <SOME_KUBERNETES_JWT>

Токен носителя аутентификации перезаписывается, даже когда мы жестко кодируем токен в нашем провайдере! Например:

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                  = "some.hardcoded.token"
}

Даже с учетом вышеизложенного токен останется прежним в HTTP-запросе.

Мы обнаружили, что токен, который отправляется в заголовке auth, находится в контейнере terraform по адресу /run/secrets/kubernetes.io/serviceaccount/token.

Есть ли причина, по которой terraform перезаписывает этот токен токеном, сгенерированным кубернетами? Есть ли какие-то другие настройки, которые мы могли бы попробовать?


person Bilbo Baggins    schedule 18.11.2019    source источник


Ответы (1)


Это проблема с провайдером Kubernetes. Проблема с Github здесь: https://github.com/terraform-providers/terraform-provider-kubernetes/issues/679

Чтобы исправить это, установите версию вашего провайдера 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
}
person Bilbo Baggins    schedule 20.11.2019