networking - Terraformed 私有(private) GKE 集群自动化访问

标签 networking kubernetes google-cloud-platform terraform google-kubernetes-engine

我使用以下 .tf 对 Google Kubernetes Engine (GKE) 上的私有(private) Kubernetes 集群进行了 terraform(Terraform 版本 11.10) :

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"
      },
    ]
  }
}

效果很好,给了我一个私有(private)集群(并且 NAT 工作,让节点可以访问互联网),我办公室的机器可以运行 kubectl与它交互的命令没有麻烦。

我现在面临的问题是集成任何基于 Web 的持续集成 (CI) 或持续部署 (CD)。私有(private)集群是谷歌云平台(GCP)的一个新特性,这方面的文档有点欠缺。

到目前为止,我的尝试完全失败了,我的网络知识根本不够。我试过this solution但似乎自动化机器必须与代理在同一网络上。

我找到了this similar SO question (几乎完全相同,但他是特定于 Cloud Build 的)。在对该问题的一个答案的评论中,OP提到他找到了一种解决方法,他暂时修改了构建机器的主授权网络,但他没有确切说明他是如何执行此操作的。

我试图复制他的解决方法,但相关的 gcloud命令似乎可以 update网络列表,或完全删除所有网络,而不是按照他的评论建议一次添加/删除一个。

网络向导的帮助将不胜感激。

最佳答案

这是与 CircleCI 等 CI 系统交互时的常见问题。或 Travis生活在公共(public)云中。您可以使用此命令更新您的 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 

您也可以从 UI 中执行此操作:

authorized networks

它实际上记录在 here .

关于networking - Terraformed 私有(private) GKE 集群自动化访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106222/

相关文章:

c - 在 c 中使用 sendto() 发送自定义 tcp 数据包?

kubernetes - 使用 UDP 和 TCP 的 AKS(kubernetes)服务

docker - 当运行多个部署时,Kubernetes是否会受到Docker Swarm随机获得的 “update out of sequence”错误的困扰?

python - 带有时间戳的 Spanner 读取失败

python - 删除 Flask Web 应用程序的终端依赖性

node.js - 如何在谷歌云平台上部署strapi?

networking - 从网络驱动器启动时,Structuremap 不加载注册表

c - 如何使用 winpcap 修改 HTTP 响应数据包?

linux - 带有桥接适配器的 VirtualBox 上的 Debian guest 无法访问互联网

python - Python 3 引发的 IndentationError : unexpected indent,。Pod 部署 YAML 中 Kubernetes args 条目中使用的代码