为 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 tag
和 source 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]
...
}
所以我正在努力实现以下目标: - 通过 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 tag
和 source 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]
...
}