如何通过Terraform为Kubernetes Ingress创建的负载均衡绑定Cloud Armor策略?
可行实现方案
以下两种方案均可通过Terraform完成绑定操作:
方案1:使用GKE Ingress原生注解(推荐)
GKE的Ingress控制器原生支持通过注解绑定Cloud Armor安全策略,无需额外操作其他GCP资源,也不会和Kubernetes控制器的资源管理逻辑冲突,是最优选择。
你只需要在现有的kubernetes_ingress(K8s 1.19+版本建议使用kubernetes_ingress_v1)资源的metadata.annotations中添加对应配置即可,示例代码如下:
resource "kubernetes_ingress_v1" "your_ingress" { metadata { name = "你的Ingress资源名称" annotations = { # 原有注解保持不变,新增以下配置即可 "cloud.google.com/security-policy" = google_compute_security_policy.你已创建的Cloud Armor策略资源名.name } } # 原有spec等配置保持不变 }
配置更新应用后,GKE Ingress控制器会自动将对应的安全策略绑定到负载均衡关联的Backend Service上,无需手动干预。
方案2:使用独立的安全策略关联资源绑定
如果因为特殊场景无法使用注解方案,可以通过Terraform Google Provider提供的独立关联资源实现绑定,不需要修改或导入原有Backend Service的完整配置,避免和GKE控制器产生资源冲突。
操作步骤:
- 第一步:通过数据源获取Ingress自动创建的Backend Service信息
data "google_compute_backend_service" "ingress_backend" { # 填入Ingress自动生成的Backend Service名称,可在GCP控制台负载均衡页面查看 name = "k8s-bs-xxxxxxx" # 也可以通过filter按标签匹配,避免硬编码名称 }
- 第二步:创建安全策略关联资源
resource "google_compute_backend_service_security_policy_association" "armor_bind" { backend_service = data.google_compute_backend_service.ingress_backend.name security_policy = google_compute_security_policy.你已创建的Cloud Armor策略资源名.name }
注意事项
- 两种方案二选一即可,优先选择注解方案,兼容性和稳定性更高
- 绑定操作不会中断现有负载均衡的业务流量,配置会无缝生效
- 如果后续需要解绑,删除对应注解或关联资源即可
内容的提问来源于stack exchange,提问作者fuzzi
相关产品推荐
相关产品推荐

