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

多后端服务Ingress配置求助:Ingress-Nginx TLS终止与路径重写失败

正确的Ingress-Nginx配置方案

核心问题分析

你当前的配置存在三个关键问题:

  • Ingress规则中的host字段与TLS配置的主机名不匹配(写成了some-url-here而非some.url.here)
  • Ingress中引用的Service名称与实际定义的Service名称不匹配(serviceOne vs service-one,serviceTwo vs service-two)
  • Rewrite规则的正则表达式和目标路径配置不正确,无法满足serviceTwo的路径转发需求

修正后的完整Ingress配置

kind: Ingress
metadata:
  name: rp-some-url-here
  namespace: reverse-proxy
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: "/$2"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
    nginx.ingress.kubernetes.io/proxy-ssl-verify: "false"
    nginx.ingress.kubernetes.io/upstream-vhost: "some.url.here"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-buffering: "off"
spec:
  tls:
  - hosts:
    - some.url.here
    secretName: my-tls-secret
  rules:
  - host: some.url.here
    http:
      paths:
      - backend:
          service:
            name: service-one
            port:
              number: 80
        path: /serviceOne(/|$)(.*)
        pathType: ImplementationSpecific
      - backend:
          service:
            name: service-two
            port:
                number: 8180
        path: /serviceTwo(/|$)(.*)
        pathType: ImplementationSpecific

关键配置说明

  1. Service名称匹配:将Ingress中backend.service.name修正为与实际Service定义一致的service-one和service-two,避免服务发现失败。
  2. Host字段修正:将spec.rules[0].host改为some.url.here,与TLS配置的主机名保持一致,确保请求能匹配到正确的Ingress规则。
  3. Rewrite规则配置:
    • 启用use-regex: "true"以支持正则路径匹配
    • 使用/serviceOne(/|$)(.*)作为路径规则:捕获/serviceOne之后的所有内容(包括空路径),通过rewrite-target: "/$2"将请求转发到后端的根路径
    • 使用/serviceTwo(/|$)(.*)作为路径规则:捕获/serviceTwo之后的所有内容,通过rewrite-target: "/someServiceNameHere/$2"将请求转发到后端的/someServiceNameHere/路径(包括后续子路径)
  4. PathType设置:使用ImplementationSpecific替代Prefix,因为正则路径匹配需要Ingress Controller自行处理路径匹配逻辑。

验证方法

应用配置后,可以通过以下命令查看生成的Nginx配置,确认Rewrite规则是否正确:

kubectl exec -n <ingress-nginx-namespace> <ingress-controller-pod-name> -- cat /etc/nginx/nginx.conf | grep -A 10 -B 5 serviceTwo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:20:27