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

Kubernetes集群Nginx迁移至Traefik V1/V2的Ingress路由配置示例求助

问题解答

同一域名下的多子路径路由不需要拆分多个Ingress资源,单份Ingress(V2版本对应IngressRoute CRD)即可完成所有规则配置。

一、Traefik V1(适配你当前使用的1.7.19版本)

你当前配置的问题出在traefik.frontend.rule.type: PathPrefixStrip注解,这个注解的作用是把匹配到的路径前缀删除后再转发给后端服务,所以会出现/backend/someImage.png被转发为/someImage.png的情况,根据你的实际需求选择对应配置即可:

  • 如果你需要保留路径中的/backend前缀转发给后端,直接把规则类型改成PathPrefix即可:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefix
spec:
  rules:
    - host: demo.myapp.com
      http:
        paths:
          - path: /
            backend:
              serviceName: frontend-app
              servicePort: 80
          - path: /backend
            backend:
              serviceName: backend-api
              servicePort: 80
  • 如果你需要和原Nginx配置逻辑一致,把/backend/xxx转发为后端的/xxx,保持PathPrefixStrip规则,调整路径匹配规则避免误匹配即可:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefixStrip
spec:
  rules:
    - host: demo.myapp.com
      http:
        paths:
          - path: /
            backend:
              serviceName: frontend-app
              servicePort: 80
          - path: /backend/
            backend:
              serviceName: backend-api
              servicePort: 80

二、Traefik V2 版本配置

V2版本使用CRD资源进行配置逻辑更清晰,核心用到IngressRoute和Middleware两个资源,根据需求选择对应配置:

场景1:保留/backend前缀转发给后端

直接配置IngressRoute即可,不需要额外的Middleware:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: demo-ingressroute
  namespace: default
spec:
  entryPoints:
    - web # 可替换为你实际配置的入口点,比如websecure对应HTTPS入口
  routes:
    - match: Host(`demo.myapp.com`) && PathPrefix(`/`)
      kind: Rule
      services:
        - name: frontend-app
          port: 80
    - match: Host(`demo.myapp.com`) && PathPrefix(`/backend`)
      kind: Rule
      services:
        - name: backend-api
          port: 80

场景2:转发时去掉/backend前缀(和原Nginx逻辑一致)

先创建路径剥离的Middleware,再在IngressRoute中引用即可:

# 第一步:创建路径剥离Middleware
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: strip-backend-prefix
  namespace: default
spec:
  stripPrefix:
    prefixes:
      - /backend
---
# 第二步:创建IngressRoute路由规则
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: demo-ingressroute
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`demo.myapp.com`) && PathPrefix(`/`)
      kind: Rule
      services:
        - name: frontend-app
          port: 80
    - match: Host(`demo.myapp.com`) && PathPrefix(`/backend`)
      kind: Rule
      middlewares:
        - name: strip-backend-prefix # 引用上方的路径剥离规则
      services:
        - name: backend-api
          port: 80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:02