如何配置Azure避免删除服务/ingress-controller时误删公网IP
自动删除公网IP的成因
这是AKS云控制器的默认清理逻辑:当LoadBalancer类型的Service被删除时,控制器会自动回收它关联的、被标记为Kubernetes托管的公网IP资源。如果仅在配置中填写loadBalancerIP,没有显式声明该IP是用户自定义的外部资源,控制器会自动给这个公网IP打上托管标记,哪怕IP是你手动创建的,也会在Service删除时被一并清理。
避免公网IP被自动删除的配置方法
核心配置项调整
在你现有的nginx-ingress Helm values基础上,补充以下注解,显式告知云控制器该公网IP是用户自主管理的资源,不要执行清理动作:
controller: service: loadBalancerIP: "<my-public-ip>" annotations: # 指定公网IP所在的资源组,避免控制器跨资源组扫描误删 service.beta.kubernetes.io/azure-load-balancer-resource-group: "<你的公网IP所属资源组名称>" # 显式指定现有公网IP的资源名称,标记为用户自定义资源 service.beta.kubernetes.io/azure-pip-name: "<你的公网IP资源名称>"
额外资源层面的防护
- 如果你手动创建的公网IP放在了AKS自动生成的节点资源组(命名格式为
MC_<原资源组名>_<集群名>_<部署区域>)中,需要给该公网IP添加标签kubernetes.azure.com/managed: "false",显式标记资源为非托管状态,阻止控制器的自动清理流程。 - 长期留存的公网IP尽量放置在独立的自定义资源组中,不要放在AKS自动生成的节点资源组内,从资源隔离层面避免集群升级、资源组回收时的意外清理风险。
- 配置中的
loadBalancerIP值需要和手动创建的公网IP的实际公网地址完全一致,避免资源匹配失败。
配置生效后的效果
完成上述配置后,即使删除nginx-ingress所在的整个命名空间,云控制器仅会清理LoadBalancer关联的负载均衡转发规则、后端池配置,不会删除你手动创建的公网IP资源,原有DNS解析配置可以直接复用,无需频繁调整。
内容的提问来源于stack exchange,提问作者Ilya Chernomordik
相关产品推荐
相关产品推荐

