如何防止AKS Ingress覆盖Application Gateway现有服务及多集群配置
AKS与Application Gateway集成:避免配置覆盖及多集群共存方案
一、单AKS集群更新Ingress时避免全量覆盖网关配置
核心思路是让AGIC(Application Gateway Ingress Controller)仅管理与自身关联的配置,而非操作整个网关:
- 启用增量同步模式:部署AGIC时添加启动参数
--enable-incremental=true,开启后AGIC仅同步Kubernetes中Ingress资源对应的网关配置项,不会覆盖或删除网关中手动创建的、不属于该Ingress的资源(如独立后端池、探针等)。 - 使用分段(Segments)隔离配置范围:给Application Gateway创建专属分段,让AGIC仅负责该分段内的配置更新:
- 在Ingress资源中添加注解:
appgw.ingress.kubernetes.io/segment-name: my-app-segment - 部署AGIC时指定
--segment-name=my-app-segment,这样AGIC只会更新该分段下的路由规则、后端池等资源,不影响网关其他部分的配置。
- 在Ingress资源中添加注解:
- 限制AGIC监听的命名空间:部署AGIC时设置
--watch-namespace=my-target-namespace,让AGIC仅处理指定命名空间下的Ingress资源,避免触碰网关中其他无关配置。
二、多AKS集群共用同一Application Gateway的冲突规避
关键是让每个集群的AGIC实例各自管理独立的配置域,互不干扰:
- 为每个集群分配独立分段:给每个AKS集群的AGIC指定专属的分段名称,比如:
- 集群1的AGIC启动参数:
--segment-name=cluster1-segment,对应Ingress添加注解appgw.ingress.kubernetes.io/segment-name: cluster1-segment - 集群2的AGIC启动参数:
--segment-name=cluster2-segment,对应Ingress添加注解appgw.ingress.kubernetes.io/segment-name: cluster2-segment
每个AGIC仅更新自己分段内的配置,不会影响其他集群的分段资源。
- 集群1的AGIC启动参数:
- 每个AGIC独立筛选命名空间/标签:让不同集群的AGIC只监听自身集群内的特定命名空间或带指定标签的Ingress,比如集群1的AGIC设置
--watch-namespace=cluster1-apps,集群2的设置--watch-namespace=cluster2-apps,实现配置隔离。 - 强制所有AGIC启用增量同步:所有集群的AGIC都开启
--enable-incremental=true,确保每个实例仅操作自身负责的配置项,不会清空整个网关的资源。 - 标记手动配置资源为非AGIC管理:对于网关中手动创建的全局资源(如公共探针、后端设置),添加标签
appgw.ingress.kubernetes.io/managed-by: manual,AGIC会自动忽略这些资源,不会进行修改或删除。
注意事项
- 分段功能仅支持Application Gateway v2 SKU,需确认网关SKU符合要求。
- 保持所有AGIC实例的版本一致,避免因版本差异导致的同步逻辑冲突。
- 变更配置前建议在测试环境验证,确保不会影响现有业务流量。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

