为 GKE 节点添加防火墙规则

Adding firewall rule for GKE nodes

所以我正在努力实现以下目标: - 通过 Terraform 在 GCE 上部署 Rancher 2 - 创建 K8s 集群 - 添加防火墙规则,以便节点能够与 Racher Master Vm 对话。

我能够使用节点的外部 IP 添加防火墙规则来访问 rancher master,但我应该能够使用标签而不是添加 IP。 Google Kubernetes Engine 创建计算引擎实例组

 gke-c-wlvrt-default-0-5c42eb4e-grp

当我添加防火墙规则时:

Target Tag: rancher-master
Source Tag: gke-c-wlvrt-default-0-5c42eb4e-grp

没有任何效果。

当我将其更改为:

Target Tag: rancher-master
Source IP: 35.xx.xx.xx, 35.xx.xx.xx.xx, 35.xx.x.xxx.x

有效。

所以我要获取在防火墙规则上工作的 Kubernetes 节点的标签?

您没有使用正确的标签。要了解它,请转到 Compute Engine 页面并单击 VM 上的详细信息。你可以看到这个:

实例组名称与网络标记名称不同。使用网络标记而不是实例组名称。

您还可以在转到实例组页面和实例模板详细信息时看到这些值。

更新

因为你不能(或者我不知道该怎么做)知道应用于VM的网络标签,你可以在GCP上使用一个特殊的技巧。

开始使用服务帐户更新您的节点池定义

resource "google_service_account" "sa-node" {
  account_id = "sa-node"
  display_name = "sa-node"
}

resource "google_container_node_pool" "primary_preemptible_nodes" {
  name       = "my-node-pool"
  location   = "us-central1"
  cluster    = google_container_cluster.primary.name
  node_count = 1

  node_config {
    preemptible  = true
    machine_type = "n1-standard-1"
    service_account = google_service_account.sa-node.email
....

然后使用服务帐户而不是网络标记作为源来定义防火墙规则

resource "google_compute_firewall" "default" {
  name    = "test-firewall"
  network = google_compute_network.default.name

  allow {
    protocol = "tcp"
    ports    = ["80", "8080", "1000-2000"]
  }

  source_service_accounts = [google_service_account.sa-node.email]
}

遗憾的是,您不能混合使用 target tagsource service account,但您可以使用 target service account。因此,在 Rancher 上做同样的事情。为您的 Rancher 部署使用特定的服务帐户,这应该有效。

希望对您有所帮助!

我不确定这里描述的问题是否相同,但您可以为虚拟机添加另一个标签。 (GKE 的节点)

我的问题是我想将另一个端口添加到 GKE 的自动生成的防火墙规则中。

resource "google_container_node_pool" "node_pool" {
...
    tags = [
      module.vpc_network.private
    ]
...
}
resource "google_compute_firewall" "master_webhooks" {
...
  target_tags   = [module.vpc_network.private]
...
}