Терраформированный частный доступ к кластеру GKE - PullRequest
0 голосов
/ 01 ноября 2018

Я терраформировал (Terraform версия 11.10) частный кластер Kubernetes в Google Kubernetes Engine (GKE), используя следующее .tf:

module "nat" {
  source     = "GoogleCloudPlatform/nat-gateway/google"
  region     = "europe-west1"
  network    = "default"
  subnetwork = "default"
}

resource "google_container_node_pool" "cluster_1_np" {
  name               = "cluster-1-np"
  region             = "europe-west1"
  cluster            = "${google_container_cluster.cluster_1.name}"
  initial_node_count = 1

  lifecycle {
    ignore_changes = ["node_count"]
  }

  autoscaling {
    min_node_count = 1
    max_node_count = 50
  }

  management {
    auto_repair  = true
    auto_upgrade = true
  }

  node_config {
    oauth_scopes = [
      "https://www.googleapis.com/auth/compute",
      "https://www.googleapis.com/auth/devstorage.read_only",
      "https://www.googleapis.com/auth/logging.write",
      "https://www.googleapis.com/auth/monitoring",
      "https://www.googleapis.com/auth/pubsub",
    ]

    tags = ["${module.nat.routing_tag_regional}"]
  }
}

resource "google_container_cluster" "cluster_1" {
  provider                 = "google-beta"
  name                     = "cluster-1"
  region                   = "europe-west1"
  remove_default_node_pool = true

  private_cluster_config {
    enable_private_endpoint = false
    enable_private_nodes    = true
    master_ipv4_cidr_block  = "172.16.0.0/28"
  }

  ip_allocation_policy {
    create_subnetwork = true
  }

  lifecycle {
    ignore_changes = ["initial_node_count", "network_policy", "node_config", "node_pool"]
  }

  node_pool {
    name = "default-pool"
  }

  addons_config {
    http_load_balancing {
      disabled = false
    }

    horizontal_pod_autoscaling {
      disabled = false
    }
  }

  master_authorized_networks_config {
    cidr_blocks = [
      {
        cidr_block   = "<MY_OFFICE_CIDR>"
        display_name = "Office"
      },
    ]
  }
}

Это прекрасно работает, предоставляя мне частный кластер (и работает NAT, предоставляя узлам доступ к Интернету), и машины в моем офисе могут запускать команды kubectl, чтобы взаимодействовать с ним без проблем.

Проблема, с которой я сейчас сталкиваюсь, заключается в интеграции любой непрерывной интеграции (CI) или непрерывного развертывания (CD) на основе веб-интерфейса. Частные кластеры являются новой функцией облачной платформы Google (GCP), и в этой области документации немного не хватает.

Мои попытки пока полностью провалились, мои сетевые знания просто недостаточны. Я попытался это решение , но кажется, что автомат должен быть в той же сети, что и прокси.

Я нашел этот похожий вопрос SO (почти такой же, но он специфичен для Cloud Build). В комментариях к одному из ответов на этот вопрос OP упоминает, что он нашел обходной путь, где он временно изменяет основные авторизованные сети машины сборки, но он не указал точно, как он это выполняет.

Я попытался повторить его обходной путь, но соответствующие gcloud команды, похоже, могут update список сетей или полностью удалить все из них, а не добавлять / удалять по одной за раз, как предполагает его комментарий.

Помощь сетевых мастеров была бы очень признательна.

1 Ответ

0 голосов
/ 02 ноября 2018

Это распространенная проблема при взаимодействии с системами CI, такими как CircleCI или Travis , которые живут в общедоступном облаке. Вы можете использовать эту команду для обновления вашего master authorized networks

gcloud container clusters update [CLUSTER_NAME] \
  --enable-master-authorized-networks \
  --master-authorized-networks=<MY_OFFICE_CIDR>,<NEW-CIDR-FROM-CI> \
  --zone=<your-zone>

Чтобы удалить сеть системы CI, вы можете сделать что-то вроде этого (просто удалите сеть из cli):

gcloud container clusters update [CLUSTER_NAME] \
  --enable-master-authorized-networks \
  --master-authorized-networks=<MY_OFFICE_CIDR> \
  --zone=<your-zone>

Чтобы полностью удалить все авторизованные сети (отключить):

gcloud container clusters update [CLUSTER_NAME] \
  --no-enable-master-authorized-networks 

Вы также можете сделать это из пользовательского интерфейса:

authorized networks

Это на самом деле задокументировано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...