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

Nginx Ingress通过K8s主节点绑定域名访问应用故障求助

问题根因

  1. 域名解析IP与Ingress Controller实际暴露IP不匹配:你本地/etc/hosts将master.example.com指向192.168.5.51,但集群中ingress-nginx-controller的对外暴露IP为192.168.9.51,两者网段完全不同,流量根本无法到达集群Ingress入口。
  2. Ingress Controller无有效后端:从kubectl describe service ingress-nginx-controller结果可见,该Service的selector配置错误,匹配的标签是app.kubernetes.io/name=metrodash-ingress,和实际nginx controller pod的标签不符,导致Service的Endpoints为空,即使流量到达该IP也无法转发到nginx服务。
  3. Ingress后端端口配置错误:metrodash-service的ClusterIP端口为80(对应NodePort 30239),但Ingress规则中配置的后端端口为8000,无法匹配到Service端口。
  4. 私有网络IP网段不统一:你希望托管应用的主节点IP为192.168.5.91,当前Ingress Controller的外部IP为192.168.9.51,不在同一个私有网段,无法直接通过本地私有网络访问。

解决步骤

  1. 修正ingress-nginx-controller的selector配置
    编辑ingress-nginx-controller的Service配置,将selector中的app.kubernetes.io/name=metrodash-ingress改为app.kubernetes.io/name=ingress-nginx,与实际nginx controller pod的标签对齐:

    kubectl edit service -n ingress-nginx ingress-nginx-controller
    

    修改后确认Service的Endpoints出现正常的nginx pod IP,不再为空。

  2. 调整Ingress Controller的对外IP为你需要的主节点IP段
    因为是私有网络环境,没有云厂商负载均衡,你可以将ingress-nginx-controller改为NodePort类型,或者直接给它绑定主节点的192.168.5.91作为外部IP:
    编辑Service配置,在spec.externalIPs字段添加192.168.5.91即可。如果你希望直接用80/443端口访问,也可以给ingress-nginx-controller添加hostNetwork: true配置,让nginx pod直接使用宿主机网络,占用主节点的80/443端口。

  3. 修正Ingress规则的后端端口
    编辑metrodash-ingress配置,将backend.service.port.number从8000改为80,匹配metrodash-service的ClusterIP端口:

    kubectl edit ingress -n ingress-nginx metrodash-ingress
    
  4. 修正本地/etc/hosts配置
    将master.example.com对应的IP改为你调整后的Ingress Controller对外IP,比如绑定了主节点IP就改成192.168.5.91。

  5. 验证访问
    配置完成后执行curl http://master.example.com测试是否能正常返回应用内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 23:45:08