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

Kubernetes Ingress精确路径未优先于前缀路径问题及解决

Kubernetes Ingress路径匹配问题:新服务接管根路径,旧服务处理其余路径

问题场景

在Kubernetes集群中,需要实现以下路由规则:

  • 根路径my.domain.com/由新服务处理
  • 其他所有路径仍由现有前端服务处理

最初的配置逻辑:

  • 现有前端Ingress使用路径/,pathType设为Prefix
  • 新服务Ingress配置了根路径的Exact类型,同时包含/someendpoint路径

但实际测试发现,根路径请求始终被转发到现有前端服务,并未遵循Kubernetes文档中「精确路径优先于前缀路径」的匹配规则。

解决方案

通过调整两处Ingress配置,解决了路径匹配问题:

  1. 修改现有前端Ingress:启用正则匹配,将路径改为/(.+),pathType保留Prefix,并添加nginx.ingress.kubernetes.io/use-regex: "true"注解,确保仅匹配非根路径的请求
  2. 修改新服务Ingress:将根路径的pathType从Exact改为Prefix,让其优先匹配根路径请求

现有前端修改后配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: current-frontend
  labels:
    app: current-frontend
    tier: frontend
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    kubernetes.io/ingress.class: nginx
spec:
  tls:
    - hosts:
      - my.domain.com
      secretName: tls-secret
  rules:
    - host: my.domain.com
      http:
        paths:
          - backend:
              service:
                name: current-frontend
                port:
                  number: 80
            path: /(.+)
            pathType: Prefix

新服务修改后配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: new-service
  labels:
    app: new-service
    tier: frontend
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  tls:
  - hosts:
    - my.domain.com
    secretName: tls-secret
  rules:
  - host: my.domain.com
    http:
      paths:
      - backend:
          service:
            name: new-service
            port:
              number: 80
        path: /someendpoint
        pathType: ImplementationSpecific
      - backend:
          service:
            name: new-service
            port:
              number: 80
        path: /
        pathType: Prefix

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:01:06