如何通过Terraform将Cloud Armor绑定到GKE服务的Ingress负载均衡
Cloud Armor关联GKE Ingress的Terraform实现方案
完全可以纯通过Terraform完成该配置,以下是两种可落地的实现方案:
方案1:通过Kubernetes Provider管理BackendConfig(推荐,和原YAML实现逻辑一致)
本方案和你之前手动编写YAML部署BackendConfig的逻辑完全对齐,只是将YAML配置转换为Terraform的kubernetes_manifest资源进行管理,无需额外适配业务配置。
resource "kubernetes_manifest" "backendconfig_cloud_armor" { manifest = { apiVersion = "cloud.google.com/v1" kind = "BackendConfig" metadata = { name = "gke-service-armor-config" namespace = "你的业务命名空间" } spec = { securityPolicy = { name = "你的Cloud Armor安全策略名称" } } } }
部署完该BackendConfig资源后,在对应Service的Terraform配置中添加如下注解即可完成关联:
resource "kubernetes_service" "your_business_service" { metadata { name = "你的业务服务名称" annotations = { "beta.cloud.google.com/backend-config" = jsonencode({ default = kubernetes_manifest.backendconfig_cloud_armor.manifest.metadata.name }) } } # 其余Service配置省略 }
方案2:直接在GCP资源层面绑定安全策略
本方案无需操作Kubernetes自定义资源,直接通过Google Provider将Cloud Armor策略关联到GKE Ingress自动生成的后端服务上,适合统一管控所有云资源的场景。
# 先获取GKE Ingress生成的Backend Service数据源 data "google_compute_backend_service" "gke_ingress_backend" { name = "k8s-be-xxxxxx" # 替换为你的GKE Ingress对应的后端服务名称,也可通过标签/前缀过滤动态获取 } # 绑定Cloud Armor安全策略 resource "google_compute_backend_service_security_policy_association" "armor_bind" { backend_service = data.google_compute_backend_service.gke_ingress_backend.name security_policy = google_compute_security_policy.your_armor_policy.name }
注意事项
- 该配置依赖GKE Ingress已经成功创建并生成对应Backend Service,注意添加资源依赖关系避免部署报错
- 无需硬编码Backend Service名称,可通过名称前缀、关联的负载均衡标签等方式动态过滤获取数据源
内容的提问来源于stack exchange,提问作者Zack Tzeng
相关产品推荐
相关产品推荐

