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

如何在K3s/Kubernetes中配置Ingress实现路径前缀转发并剥离前缀

K3s/Kubernetes 中实现Ingress前缀路由与剥离

Traefik Ingress 配置(K3s默认内置)

K3s默认搭载Traefik作为Ingress Controller,要实现前缀剥离,核心是利用专属注解配合路径规则:

示例YAML(以service1为例):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service1-ingress
  annotations:
    # 开启路径前缀剥离
    traefik.ingress.kubernetes.io/router.pathstrip: "true"
spec:
  rules:
  - http:
      paths:
      - path: /service1
        pathType: Prefix
        backend:
          service:
            name: service1-service
            port:
              number: 80

关键说明

  • traefik.ingress.kubernetes.io/router.pathstrip: "true":Traefik会自动移除匹配到的/service1前缀,将请求转发到后端服务的根路径(/)。
  • pathType: Prefix:匹配所有以/service1开头的请求,比如/service1/foo会被剥离为/foo转发给后端。
  • 后端服务若监听非80端口,直接修改port.number为对应端口即可。

Nginx Ingress 配置

如果使用Nginx Ingress Controller,需要通过正则路径匹配+重写注解实现前缀剥离:

示例YAML(以service1为例):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service1-ingress
  annotations:
    # 重写目标路径,剥离前缀
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - http:
      paths:
      - path: /service1(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: service1-service
            port:
              number: 80

关键说明

  • 路径规则/service1(/|$)(.*):用正则捕获/service1之后的路径部分(存为变量$2)。
  • nginx.ingress.kubernetes.io/rewrite-target: /$2:将请求重写为捕获到的路径,实现前缀剥离。比如/service1/bar会被转发到后端的/bar。
  • pathType: ImplementationSpecific:因为使用了正则匹配,需指定该类型让Nginx正确处理规则。

多服务批量配置示例

可在同一个Ingress资源中配置多个服务的路由规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: multi-service-ingress
  annotations:
    traefik.ingress.kubernetes.io/router.pathstrip: "true"
spec:
  rules:
  - http:
      paths:
      - path: /service1
        pathType: Prefix
        backend:
          service:
            name: service1-service
            port:
              number: 80
      - path: /longhorn-ui
        pathType: Prefix
        backend:
          service:
            name: longhorn-ui-service
            port:
              number: 80
      - path: /nextcloud
        pathType: Prefix
        backend:
          service:
            name: nextcloud-service
            port:
              number: 80

注意事项

  • WordPress、Nextcloud这类服务默认依赖根路径,通过Ingress剥离前缀后转发到服务根路径即可正常运行,无需额外修改服务内部配置。
  • 若要启用HTTPS,只需在Ingress中添加tls字段配置证书,前缀剥离逻辑不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:23:30