You need to enable JavaScript to run this app. Ubuntu 18.04下ingress-nginx路由本地K8s服务无法访问问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04下ingress-nginx路由本地K8s服务无法访问问题求助

逐步骤排查与解决方法

1. 先确认ingress-nginx的流量入口能被本地访问

本地自建场景下最容易忽略的问题是ingress控制器的服务没有暴露到宿主机网络:

  • 执行kubectl get svc -n ingress-nginx查看ingress控制器的Service类型,如果显示为ClusterIP,代表服务仅能在K8s集群内部访问,宿主机发往127.0.0.1的请求根本碰不到ingress组件
  • 根据集群类型调整暴露方式:
    • 自定义kubeadm搭建的单节点集群:给ingress控制器的Deployment开启hostNetwork: true配置,让ingress进程直接占用宿主机的80/443端口接收流量
    • minikube/kind等本地集群:需要额外启动集群隧道(比如执行minikube tunnel),把LoadBalancer类型的ingress服务映射到本地网卡
  • 执行netstat -tulpn | grep -E ':80|:443'确认宿主机的80/443端口没有被本地nginx、apache等其他进程占用,如果有占用先停掉对应进程,不然ingress没法绑定端口接收流量

关键逻辑:你把ecommerce.dev映射到127.0.0.1,本质是让浏览器的请求发到本地回环地址的80端口,这一步如果端口上没有ingress在监听,就会直接触发“站点无法访问”的连接错误。

2. 修正Ingress资源的版本兼容性问题

你当前写的Ingress配置使用的是extensions/v1beta1 apiVersion,这个版本的API在K8s 1.19及以上版本已经被完全移除,ingress-nginx控制器根本不会解析这类资源:

  • 执行kubectl get ingress ingress-service查看资源详情,如果输出的规则、后端信息为空,基本就是版本不兼容导致的
  • 把配置修正为当前集群支持的networking.k8s.io/v1版本,调整后的可参考配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: ecommerce.dev
      http:
        paths:
          - path: /api/users/?(.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: auth-srv
                port:
                  number: 3000
  • 重新应用配置后,执行kubectl describe ingress ingress-service,确认输出里没有配置报错,Address字段能正常显示ingress控制器的监听地址

3. 验证后端服务的基础连通性

排除ingress本身的问题后,要确认对应的后端服务是正常可访问的:

  • 执行kubectl get endpoints auth-srv检查服务的端点列表,如果列表为空,代表服务没有匹配到正在运行的后端Pod,就算ingress通了也会返回502错误
  • 临时创建一个测试Pod,直接通过集群内地址curl访问auth-srv,确认后端服务本身能正常返回响应

4. 排查hosts配置和浏览器的实际解析行为

很多时候hosts配置写对了,但实际流量根本没走本地配置:

  • 终端执行ping ecommerce.dev,确认返回的解析IP是127.0.0.1,没有被其他DNS配置覆盖
  • 如果本地开了代理/VPN,浏览器默认会绕过本地hosts配置直接走公网DNS解析域名,需要把ecommerce.dev加入代理的直连规则
  • 注意不要直接输裸域名访问:如果浏览器默认开启HTTPS强制跳转,裸域名访问会被直接转到443端口,如果ingress没有配置443端口的证书监听,就会触发连接失败的错误。测试的时候要在地址栏手动输入完整的http://ecommerce.dev,跳过强制HTTPS跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 09:45:05