You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure K8s部署后如何将Nginx Ingress Controller的公网IP更换为预留静态IP

AKS Nginx Ingress 更换绑定预留静态公网IP操作指南

原操作失效原因

  • 手动修改Service的status字段属于无效操作:该字段由AKS云控制器自动托管,用户无写入权限;同时status.loadBalancer.ingress本身是数组结构,手动传入map结构会直接触发格式校验报错,即你遇到的cannot restore slice from map问题。
  • 直接在Azure门户修改底层LoadBalancer公网IP的操作,会被AKS控制器的自动协调逻辑覆盖,最终IP配置会回到初始自动分配的状态,无法生效。

前置准备

  • 确认两个预留静态公网IP满足以下要求:
    • 公网IP SKU为Standard,匹配AKS默认Standard Load Balancer的规格要求
    • 公网IP所在Azure区域与AKS集群完全一致
    • 提前获取两个静态IP的完整Azure资源ID,格式为 /subscriptions/<你的订阅ID>/resourceGroups/<IP所在资源组名>/providers/Microsoft.Network/publicIPAddresses/<静态IP实例名称>
  • 若静态IP未存放在AKS默认创建的MC_<集群资源组名>_<集群名>_<区域>节点资源组内,需提前给AKS集群关联的托管标识/服务主体,分配静态IP所在资源组的「网络参与者」权限,确保AKS具备操作该IP的权限。

具体操作步骤

所有配置通过给LoadBalancer Service添加Azure专属注解完成,无需手动修改任何系统托管字段,执行后等待1-2分钟控制器自动完成IP绑定即可:

  1. 为ingress-A命名空间下的ingress-nginx-controller LoadBalancer Service,绑定第一个预留静态IP:
    kubectl annotate svc ingress-nginx-controller -n ingress-A \
    service.beta.kubernetes.io/azure-load-balancer-resource-id="<你的第一个静态IP完整资源ID>" \
    --overwrite
    
  2. 为ingress-B命名空间下的ingress-nginx-controller LoadBalancer Service,绑定第二个预留静态IP:
    kubectl annotate svc ingress-nginx-controller -n ingress-B \
    service.beta.kubernetes.io/azure-load-balancer-resource-id="<你的第二个静态IP完整资源ID>" \
    --overwrite
    

验证与收尾

  • 执行 kubectl get svc -A | grep ingress-nginx-controller 查看两个Service的EXTERNAL-IP字段,确认已替换为你预留的静态IP地址。
  • 原自动生成的动态公网IP会在新IP绑定完成后自动解绑,确认无其他服务依赖后,可手动删除这些临时IP,避免产生额外费用。

内容的提问来源于stack exchange,提问作者ikenahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 01:24:04