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

Kubernetes Ingress配置遇404:控制器路由正常但访问失败

Kubernetes Ingress配置问题排查方案

首先澄清日志IP的疑问:你看到的10.1.0.71是API Pod的实际IP,而非Service的ClusterIP。Kubernetes Service是虚拟IP,流量最终会转发到后端Pod,所以Ingress Controller日志显示的是实际转发目标的Pod IP,这是正常行为,不是故障。

以下是针对你访问瓶颈的排查和解决步骤:

1. 检查TLS Secret是否存在

你的Ingress配置引用了ingress-cert Secret,但未提及创建操作。若该Secret不存在,Ingress Controller将无法正常处理路由规则:

  • 执行命令验证:
    kubectl get secret ingress-cert -n usinebebe
    
  • 若不存在,可二选一处理:
    • 直接删除Ingress配置中的tls块(已设置ssl-redirect: "false",暂时无需TLS);
    • 生成自签名证书并创建Secret:
      openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=www.usinebebe.com"
      kubectl create secret tls ingress-cert --key tls.key --cert tls.crt -n usinebebe
      

2. 确认路径匹配与API路径处理

Ingress配置的path: /api为Prefix类型,意味着所有以/api开头的请求才会转发到api-service。而你的API通过NodePort访问时路径为/swagger/index.html,因此通过Ingress访问时需使用http://www.usinebebe.com/api/swagger/index.html。

  • 若希望直接用/swagger访问,可修改Ingress配置:
    添加路径重写注解,并调整path规则:
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      rules:
      - http:
          paths:
          - path: /api(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: api-service
                port:
                  number: 8081
    
    这样访问/api/swagger会被重写为/swagger转发到API服务。

3. 适配Docker Desktop的Ingress Controller部署

你使用的是云环境的Ingress Controller部署文件,Docker Desktop本地集群需使用专属的docker provider版本,否则可能存在端口映射问题:

  • 删除现有Controller:
    kubectl delete -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
    
  • 重新部署docker适配版本:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/docker/deploy.yaml
    
  • 验证端口映射:
    kubectl get svc -n ingress-nginx
    
    确认ingress-nginx-controller的80、443端口已完成本地映射(Docker Desktop会自动处理)。

4. 验证Ingress资源状态

执行命令检查Ingress是否正常关联Controller:

kubectl get ingress ingress-usinebebe -n usinebebe
  • 若ADDRESS列为<none>,说明Ingress未被Controller识别:
    • 检查IngressClass是否存在:kubectl get ingressclass,确保存在名为nginx的IngressClass;
    • 若不存在,需创建IngressClass或修改Ingress的ingressClassName为集群中存在的值。

5. 测试路由有效性

用curl命令直接测试Ingress路由:

curl -H "Host: www.usinebebe.com" http://localhost/api/swagger/index.html
  • 若返回正常内容,说明配置无问题,浏览器访问时需确保Host头正确(已配置hosts文件的话直接访问http://www.usinebebe.com/api/swagger/index.html即可);
  • 若返回错误,查看Controller日志排查细节:
    kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:19:55