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

如何将Ingress-nginx的externalIPs设置为仅单个指定节点IP

问题原因

你之前的配置不生效核心是两个原因:

  • ConfigMap里的bind-address参数控制的是Nginx进程在Pod内部的监听绑定地址,属于Pod内的应用层配置,和Service层面对外宣告的externalIPs完全无关,修改这个参数不会改变对外暴露的IP列表。
  • 你使用的云场景部署模板默认开启了Service配置自动调和逻辑:Ingress Nginx控制器启动时携带的--publish-service参数,会持续将所有运行Ingress控制器Pod的节点IP同步到ingress-nginx-controller Service的externalIPs、Endpoints字段,你手动修改的配置会被这个自动逻辑覆盖,所以修改后过段时间就会恢复为所有节点IP。
可行方案

方案1:替换为裸金属场景部署包(最稳定,无自动回滚逻辑)

云场景部署包本身的设计目标就是对接云厂商负载均衡、自动同步所有节点流量入口,不适合你要固定单IP的场景,直接替换为裸金属版本即可:

  1. 先完整清理当前已部署的云版本Ingress Nginx资源,避免残留webhook、配置资源影响新部署。
  2. 部署v1.2.0版本对应的裸金属场景Ingress Nginx部署清单,该版本清单没有强制同步所有节点IP的逻辑。
  3. 部署完成后执行kubectl edit svc ingress-nginx-controller -n ingress-nginx编辑Service,在spec段下添加你需要的单个externalIP配置:
spec:
  externalIPs:
  - 192.168.30.16

保存退出后配置会持久生效,不会被自动覆盖。

方案2:保留现有部署,关闭自动IP同步逻辑

如果不想重装现有Ingress Nginx,可以直接关停自动同步IP的逻辑:

  1. 执行kubectl edit deploy ingress-nginx-controller -n ingress-nginx编辑控制器Deployment,找到容器的args启动参数段,删除--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller这一行,保存后等待控制器Pod滚动重启完成。
  2. 再次编辑ingress-nginx-controller Service,将externalIPs修改为你需要的单个IP即可,后续不会再被自动回滚。

注意:该方案下如果Ingress控制器Pod因为节点故障、调度等原因漂移到其他节点,Service不会自动更新对外IP,建议搭配节点亲和规则使用。

方案3:搭配节点亲和固定控制器调度位置

为了避免Pod漂移导致单IP访问不通,建议在完成上述配置后,给Ingress Nginx控制器Pod添加节点亲和规则,强制Pod只调度到你指定的目标节点(也就是你配置的externalIP对应的节点):

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - 替换为目标节点的主机名

配置后控制器Pod只会运行在你指定的单节点上,配合单个externalIP配置即可完全满足单入口访问的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:18:31