Мы пытаемся запустить 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 перезаписывает этот токен токеном, сгенерированным кубернетами? Есть ли какие-то другие настройки, которые мы могли бы попробовать?