Azure负载均衡器如何替换自定义公网IP绑定K8s Django应用
Azure AKS 负载均衡器替换指定公网IP操作方案
你无法在负载均衡器面板直接修改IP的核心原因是:AKS集群的负载均衡器由云控制器全托管,手动在Azure门户修改的配置会被集群的调和逻辑自动覆盖,所有配置变更需要通过修改Kubernetes资源完成。
前置校验
操作前先确认以下条件满足,否则会配置失败:
- 待替换的目标公网IP(2.3.4.5)和AKS集群、现有负载均衡器属于同一Azure区域,且IP的SKU和现有负载均衡器SKU一致(当前AKS默认使用Standard SKU负载均衡器,对应公网IP也必须是Standard SKU)
- 目标公网IP的分配方式已经设置为静态,动态IP无法固定绑定
- 如果目标公网IP存放在非AKS自动生成的
MC_开头节点资源组中,需要提前给AKS集群的托管标识授予目标IP所在资源组的Network Contributor角色权限
操作步骤
- 获取目标公网IP的资源信息
在本地Azure CLI或者Azure Cloud Shell中执行以下命令,替换占位符为你的实际资源信息:
留存命令输出的资源ID字符串备用。az network public-ip show --resource-group <目标公网IP所在资源组名称> --name <目标公网IP的资源名称> --query id -o tsv - 修改Django应用对应的LoadBalancer服务配置
执行命令编辑Kubernetes中暴露Django服务的LoadBalancer类型资源:
在打开的YAML配置中,找到kubectl edit svc <Django应用对应的LoadBalancer服务名> -n <服务所在命名空间>metadata.annotations字段,添加以下两个注解,替换掉原有旧的公网IP相关注解:
保存文件退出编辑器即可,AKS云控制器会在1~2分钟内自动完成负载均衡器的前端IP配置更新。metadata: annotations: service.beta.kubernetes.io/azure-pip-name: <目标公网IP的资源名称> service.beta.kubernetes.io/azure-load-balancer-ipv4: 2.3.4.5 - 验证生效
执行以下命令查看服务状态:
当返回结果中kubectl get svc <Django应用对应的LoadBalancer服务名> -n <服务所在命名空间>EXTERNAL-IP字段显示为2.3.4.5时,说明IP替换完成。此时直接访问http://2.3.4.5:8000确认服务连通性正常即可,你提前绑定到该IP的example.com域名不需要额外修改解析,等待本地DNS缓存过期后即可正常通过域名访问应用。
常见问题处理
- 服务EXTERNAL-IP长期处于Pending状态:优先检查目标公网IP的SKU是否与负载均衡器匹配,再检查AKS托管标识是否拥有目标IP资源的操作权限
- 手动在Azure门户修改LB IP后自动还原:属于正常现象,所有AKS托管的负载均衡器配置都以Kubernetes中Service资源的定义为准,不要直接在门户修改LB配置
- IP更新后无法访问:检查负载均衡器的后端池是否正常关联集群节点,对应资源的网络安全组是否放行了8000端口的入站规则
内容的提问来源于stack exchange,提问作者Burak
相关产品推荐
相关产品推荐

