Traefik Ingress 重写目标不执行任何操作

Mar*_*arc 4 kubernetes-ingress traefik-ingress

我有一个可以响应的后端服务,/但我希望它在入口路由上运行myhost.com/overview。无论我尝试哪种配置,traefik 都不会删除路径/overview- 我可以看到后端正在获取/overview.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: registry-ingress
  namespace: ingress
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: myhost.com
      http:
        paths:
        - path: /overview
          pathType: Prefix
          backend:
            service:
              name: overview
              port:
                number: 8079
Run Code Online (Sandbox Code Playgroud)

我尝试过几种变体:

traefik.ingress.kubernetes.io/rewrite-target: /$1
...
        - path: /overview(.*)
Run Code Online (Sandbox Code Playgroud)

但这些会导致入口/overview请求未到达后端时出现 404。

总之,我想https://myhost.com/overview/访问后端/

小智 9

Traefik 不支持traefik.ingress.kubernetes.io/rewrite-target注释。请参阅此处的可用注释列表: https://doc.traefik.io/traefik/routing/providers/kubernetes-ingress/#annotations

但使用StripPrefix中间件可以实现您的目标。

---
# Middleware
# Strip prefix /overview
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: mw-admin
  namespace: ingress
spec:
  stripPrefix:
    forceSlash: false
    prefixes:
      - /overview
---
# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: registry-ingress
  namespace: ingress
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.middlewares: ingress-mw-admin@kubernetescrd
spec:
  tls:
  - hosts:
    - myhost.com
    secretName: tls-secret
  rules:
    - host: myhost.com
      http:
        paths:
        - path: /overview
          pathType: Prefix
          backend:
            service:
              name: overview
              port:
                number: 8079
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,以下内容尚不清楚 - 如何定义这个值?`traefik.ingress.kubernetes.io/router.middlewares: ingress-mw-admin@kubernetescrd` 后来我意识到它是 `traefik.ingress.kubernetes.io/router.middlewares: <namespace>-<middlewarew_name>@kubernetescrd` 。我希望这可以帮助其他人。 (3认同)