我有以下 kubernetes list
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik-external
traefik.ingress.kubernetes.io/router.entrypoints: websecure, web
traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
name: ingressname
namespace: thenamespace
spec:
rules:
- host: my.host
http:
paths:
- backend:
serviceName: theservice
servicePort: 8080
path: /api
有一个服务,theservice
,监听/
我希望 url my.host/api/something/anotherthing
匹配到/something/anotherthing
在 theservice
中。不过,这对我来说并没有发生,我得到了 404 返回。
任何想法可能是错误的?
最佳答案
在从 v1 到 v2 的过渡期间,Traefik 的许多内部部分和组件被重写和重组。因此,前端和后端等核心概念的组合已被 routers 的组合所取代。 , services , 和 middlewares .
使用 v2 转换传入请求的 URL 路径前缀配置为 middlewares对象,在带有 router rule PathPrefix
的路由步骤之后.
对于 v1,它是在入口级别定义的:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: traefik
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
spec:
rules:
- host: company.org
http:
paths:
- path: /admin
backend:
serviceName: admin-svc
servicePort: admin
对于 v2,您还可以在入口路由旁边定义中间件对象:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: http-redirect-ingressroute
namespace: admin-web
spec:
entryPoints:
- web
routes:
- match: Host(`company.org`) && PathPrefix(`/admin`)
kind: Rule
services:
- name: admin-svc
port: admin
middlewares:
- name: admin-stripprefix
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: admin-stripprefix
spec:
stripPrefix:
prefixes:
- /admin
更多信息可以在这里找到:
Frontends and Backends Are Dead...
... Long Live Routers, Middlewares, and Services
关于kubernetes - 我如何获得 traefik.ingress.kubernetes.io/rule-type : PathPrefixStrip to work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64563957/