如何避免Terraform覆盖AKS AGIC生成的Application Gateway后端地址池
问题根因
AGIC(Application Gateway Ingress Controller)的工作机制就是根据K8s集群中的Ingress资源,自动增删改Application Gateway的后端地址池、路由规则、HTTP设置、健康探针等流量路由相关配置。你在Terraform脚本中显式定义了这些AGIC管控范围的配置,会导致Terraform状态与AGIC实际修改后的配置冲突,每次Terraform执行apply时就会覆盖AGIC生成的配置。
解决方案
方案1:添加Terraform生命周期忽略规则(最便捷)
在你的azurerm_application_gateway资源块中添加lifecycle.ignore_changes配置,忽略所有AGIC会自动修改的配置项,Terraform后续执行apply时就不会检测和覆盖这部分配置的变更,仅管理AGW的基础规格、WAF配置、IP地址这类不会被AGIC修改的属性。
示例配置如下:
resource "azurerm_application_gateway" "main" { name = "你的应用网关名称" resource_group_name = azurerm_resource_group.main.name location = azurerm_resource_group.main.location # 直接指定WAF_v2规格满足你的安全需求 sku { name = "WAF_v2" tier = "WAF_v2" capacity = 2 # 可按需调整 } # WAF功能配置,按需调整规则 waf_configuration { enabled = true firewall_mode = "Prevention" # 可先设为Detection测试 rule_set_type = "OWASP" rule_set_version = "3.2" } # 其他基础配置:公网IP、私有IP、监听端口、证书等AGIC不会修改的配置正常保留 # 核心配置:忽略AGIC管控的所有配置项变更 lifecycle { ignore_changes = [ backend_address_pool, backend_http_settings, request_routing_rule, http_listener, redirect_configuration, rewrite_rule_set, probe ] } }
该方案可以同时解决后端地址池、路由规则被覆盖的问题。
方案2:拆分Terraform管理范围
直接从Terraform脚本中删除所有自定义的后端地址池、路由规则、HTTP设置等流量路由相关配置,只保留AGW的基础规格、WAF、IP等底层配置。这类AGIC管控的配置完全交给AGIC根据Ingress自动生成,从根源上避免配置冲突。
WAF规格需求适配说明
你无需使用AKS自动创建Application Gateway的模式,现有预先创建WAF_v2规格AGW再绑定AGIC的流程完全可行,只要按上述两种方案调整Terraform配置即可,不需要修改现有部署架构。
内容的提问来源于stack exchange,提问作者SK001
相关产品推荐
相关产品推荐

