如何在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
相关产品推荐
相关产品推荐

