如何通过Terraform为GKE自动创建的集群及服务防火墙规则开启Logconfig
GKE自动生成防火墙规则开启日志的Terraform实现方案
方案1:导入GKE自动规则到Terraform状态管理
- 第一步:获取所有GKE自动生成的防火墙规则列表,执行命令:
gcloud compute firewall-rules list --filter="description:*-gke-*" --format="value(name)" - 第二步:将每一条规则导入到Terraform状态,命令格式为:
terraform import google_compute_firewall.gke_fw_<规则标识> <项目ID>/<防火墙规则完整名称> - 第三步:编写对应资源配置,完全保留规则原有参数,仅添加日志相关配置即可,示例如下:
resource "google_compute_firewall" "gke_fw_sample" { # 以下参数需和GKE自动生成的规则原始配置完全一致 name = "gke-cluster1-xxxx-node-hc" network = "sample-network" project = "sample-project" allow { protocol = "tcp" ports = ["10256"] } source_ranges = ["130.211.0.0/22", "35.191.0.0/16"] target_tags = ["gke-cluster1-node"] # 仅添加以下日志配置即可 enable_logging = true log_config { metadata = "INCLUDE_ALL_METADATA" } }
方案2:通过null_resource批量自动配置(无需管理规则全量配置)
适合不想将GKE自动规则纳入Terraform全生命周期管理的场景,通过本地执行gcloud命令批量开启所有GKE自动规则的日志:
resource "null_resource" "enable_gke_fw_log" { provisioner "local-exec" { command = <<EOT gcloud compute firewall-rules list --filter="description~'gke-' AND logConfig.enable=False" --format="value(name)" | xargs -r -I {} gcloud compute firewall-rules update {} --enable-logging --logging-metadata=INCLUDE_ALL_METADATA EOT } # 可选配置:GKE集群版本变更时自动触发执行,适配集群升级后新生成的规则 triggers = { gke_cluster_version = google_container_cluster.your_cluster_name.current_version } }
注意事项
- GKE调整集群配置、新增Service/Ingress时可能会生成新的防火墙规则,选择方案2时会自动处理新生成的未开日志的规则
- 选择方案1时,GKE如果自动更新了原有规则的参数,需要同步更新Terraform中的对应配置,避免出现配置漂移
内容的提问来源于stack exchange,提问作者Bhanu
相关产品推荐
相关产品推荐

