Команды Terraform kubernetes, терпящие неудачу с частным кластером GKE - PullRequest
0 голосов
/ 12 апреля 2020

Я запустил частный кластер GKE с использованием ресурса terraform "google_container_cluster" с блоком private_cluster_config.

Я добавил master_authorized_networks_config к разрешить мой собственный IP-адрес в авторизованных сетях для GKE.

И я добавил k8s пространство имен , используя ресурс terraform "kubernetes_namespace".

Я также установил все Google, провайдеры kubernetes, токен k8s, cluster_ca_certificate et c правильно, и пространство имен действительно было предоставлено этой терраформой.


resource "google_container_cluster" "k8s_cluster" {
  # .....
  # .....
  private_cluster_config {
    enable_private_nodes = true
    enable_private_endpoint = false
    master_ipv4_cidr_block = "172.16.0.0/28"
  }
  ip_allocation_policy { } # enables VPC-native
  master_authorized_networks_config {
    cidr_blocks {
      {
        cidr_block = "0.0.0.0/0"
        display_name = "World"
      }
    }
  }
  # .....
  # .....
}
data "google_client_config" "google_client" {}

data "google_container_cluster" "k8s_cluster" {
  name     = google_container_cluster.k8s_cluster.name
  location = var.location
}

provider "kubernetes" {
  # following this example https://www.terraform.io/docs/providers/google/d/datasource_client_config.html#example-usage-configure-kubernetes-provider-with-oauth2-access-token
  version = "1.11.1"
  load_config_file = false
  host = google_container_cluster.k8s_cluster.endpoint
  token = data.google_client_config.google_client.access_token
  cluster_ca_certificate = base64decode(
    data.google_container_cluster.k8s_cluster.master_auth.0.cluster_ca_certificate
  )
}

resource "kubernetes_namespace" "namespaces" {
  depends_on = [google_container_node_pool.node_pool]
  for_each = ["my-ns"]
  metadata {
    name = each.value
  }
}

Затем я запустил terraform apply, и пространство имен было создано отлично ✅✅✅

kubernetes_namespace.namespaces["my-ns"]: Creating...
kubernetes_namespace.namespaces["my-ns"]: Creation complete after 1s [id=my-ns]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Однако, когда я снова запускаю terraform apply или terraform plan и terraform пытается обновить sh ресурс пространства имен,

data.google_container_cluster.k8s_cluster: Refreshing state...
kubernetes_namespace.namespaces["my-ns"]: Refreshing state... [id=my-ns]

выдает следующую ошибку периодически . 10 ❌ ❌

Error: Get http://localhost/api/v1/namespaces/my-ns: dial tcp 127.0.0.1:80: connect: connection refused

Иногда оно проходит, а иногда и сбой - с перерывами .


Куда бы вы посоветовали мне обратиться, чтобы исправить эту прерывистую ошибку?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Я думаю, что вы можете сообщить о проблеме на https://github.com/terraform-providers/terraform-provider-google/issues, это хорошее место, чтобы сообщить о проблемах с Terraform и GP C.

С уважением.

0 голосов
/ 12 апреля 2020

Это может быть проблема с контекстами k8s. Вы должны создать специальный уникальный контекст k8s для доступа к вашему кластеру GKE и указать его в поставщике terraform

provider "kubernetes" {
  config_context = var.K8S_CONTEXT
  version        = "1.10"
}

Проверьте kubectl config get-contexts, чтобы получить список всех ваших контекстов k8s.

Ресурс Terraform может быть полезно для создания контекста Вашего GKE автоматически

resource "null_resource" "local_k8s_context" {
  depends_on = [google_container_cluster.gke_cluster_0]
  provisioner "local-exec" {
    command = "gcloud container clusters get-credentials ${var.GKE_CLUSTER_NAME} --project=${var.GCP_PROJECT_ID} --zone=${var.GKE_MASTER_REGION} && ( kubectl config delete-context ${var.K8S_CONTEXT}; kubectl config rename-context gke_${var.GCP_PROJECT_ID}_${var.GKE_MASTER_REGION}_${var.GKE_CLUSTER_NAME} ${var.K8S_CONTEXT} )"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...