为GKE节点添加防火墙规则

时间:2020-03-18 17:36:35

标签: kubernetes google-cloud-platform google-kubernetes-engine rancher terraform-provider-gcp

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

我能够使用节点的外部IP添加防火墙规则来访问牧场主,但我应该能够使用标签来代替添加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节点的标签?

2 个答案:

答案 0 :(得分:3)

您没有使用正确的标签。要知道这一点,请转到Compute Engine页面,然后单击VM上的详细信息。您可以看到以下内容:

enter image description here

实例组名称与网络标记名称不同。使用网络标记代替实例组名称。

当您转到实例组页面并转到实例模板详细信息时,您也可以看到这些值。

更新

由于您不知道(或我不知道该怎么做)应用于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上执行相同的操作。为您的牧场主部署使用特定的服务帐户,这应该可以工作。

希望有帮助!

答案 1 :(得分:0)

我不太确定这里描述的问题是否相同,但是您可以向VM添加另一个标签。 (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]
...
}