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

Nginx Ingress仅带NodePort可访问 如何配置无需NodePort即可访问

问题原因及排查方案

一、带NodePort可访问、不带端口无法访问的常见原因

你访问时携带的31840是Ingress Nginx控制器的LoadBalancer服务对应80端口的NodePort,默认不带端口访问时请求的是目标IP的80端口,出现该问题核心原因是你本地到Ingress控制器80端口的网络链路不通,常见场景如下:

  • 你的Ingress Controller的LoadBalancer服务只有内网IP:从你给出的输出可以看到EXTERNAL-IP是172.xxx.xx.130的私网地址,如果你本地不在集群所在的VPC/内网环境下,无法直接访问该私网IP的80端口,只能通过NodePort走集群节点的公网IP+端口访问。
  • 域名解析配置错误:你将somehostname.xyz解析到了集群节点的公网IP,而节点本身没有监听80端口,只有Ingress Controller的NodePort31840在节点上被监听,所以只有带端口才能访问。
  • 云服务商安全组/防火墙规则拦截:你没有给LoadBalancer或者集群节点开放80端口的入方向访问规则,导致80端口的请求被拦截。

二、定位问题的测试方法

  • 集群内部验证Ingress配置有效性:在集群内启动临时测试Pod执行请求,验证Ingress和后端服务是否正常
    kubectl run -it --rm --image=curlimages/curl testcurl -- curl -H "Host: somehostname.xyz" http://172.xxx.xx.130
    
    如果能正常返回Auth服务的页面内容,说明Ingress规则、后端服务配置完全正常,问题出在集群外部的网络链路。
  • 本地验证域名解析:执行nslookup somehostname.xyz,确认返回的IP是否符合预期,如果返回的是集群节点的公网IP,不带端口访问80端口肯定会失败。
  • 直接访问LoadBalancer IP验证:本地执行命令测试能否直接访问Ingress的80端口
    curl http://172.xxx.xx.130 -H "Host: somehostname.xyz"
    
    如果请求失败说明你本地到该IP的80端口网络不通。
  • 节点端口监听验证:登录集群任意节点执行ss -tulpn | grep :80,如果没有进程监听80端口,说明节点本身没有开放80端口的服务,访问节点IP的80端口必然被拒绝。

三、排查方向说明

首先可以排除以下可能性:

  1. Auth服务配置错误:带NodePort可以正常访问所有路径,说明Flask配置、Auth的Deployment和Service配置都没有问题。
  2. Ingress规则/命名空间配置错误:kubectl describe ingress的输出显示规则匹配正常,所有资源都在default命名空间下,不存在匹配问题。
  3. Ingress控制器故障:带NodePort可以正常转发请求,说明Ingress控制器Pod运行正常,规则已经成功加载。

按照以下步骤排查即可:

  1. 先确认Ingress的LoadBalancer IP的网络属性:如果172.xxx.xx.130是内网IP,你本地不在同一内网环境下,要么给LoadBalancer申请公网IP,开放80/443端口的安全组规则,再把域名解析到该公网IP;要么继续使用NodePort方式访问。
  2. 检查域名解析配置:如果已经申请了公网LoadBalancer IP,确保somehostname.xyz解析到的是该公网IP,而不是集群节点的IP。
  3. 如果没有公网LoadBalancer资源,可以在集群节点上部署Nginx反向代理,监听80端口,将请求转发到Ingress的NodePort31840,即可实现不带端口访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:54:03