使用 Traefik 2 向数百个 Ingress 添加唯一的请求标头

使用 Traefik 2 向数百个 Ingress 添加唯一的请求标头

我们(终于)从 Traefik 1 迁移到 2。我们在 GKE 上运行 400 多个应用。我们剩下的一个挑战是:

在 Traefik 1 中,我们在每个应用程序的 Ingress 上设置了一个注释,该注释将向后端的请求添加标头。该标头的值对于每个 Ingress 都是唯一的。以下是值为 的示例。每个应用程序在其 Ingress 中都有另一个值。:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: testapp
  namespace: test
  annotations:
    ingress.kubernetes.io/custom-request-headers: X-Backend-Hint:<appname>
spec:
...

Traefik 2 不再支持此标头。似乎向每个应用程序添加此类请求标头的唯一方法是为每个唯一值创建一个唯一的 customRequestHeaders 中间件,然后将该中间件添加到匹配的 Ingress。如下所示:

---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: backend-hint-header
  namespace: test
spec:
  headers:
    customRequestHeaders:
      X-Backend-Hint: <appname>
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: testapp
  namespace: test
  annotations:
    traefik.ingress.kubernetes.io/router.middlewares: test-backend-hint-header@kubernetescrd
spec:
...

当然可以实现自动化,但这意味着要部署 400 多个几乎相同的中间件。这不会给 Traefik 带来问题吗?

这真的是最好的方法吗?或者我们能以某种方式使用单个中间件并通过 Ingress 注释传入变量吗?也许还有其他我还没想到的东西?

此时,由于与引用 Ingress 的其他工具(例如 cert-manager 和 external-dns)的兼容性,我们还不能使用 IngressRoute CRD,而必须使用经典 Ingress。

相关内容