【问题标题】:Can we set priority for the middlewares in traefik v2?我们可以为 traefik v2 中的中间件设置优先级吗?
【发布时间】:2019-06-18 08:05:01
【问题描述】:

在 kubernetes 中使用 v1.7.9 我遇到了这个问题:

如果我设置了速率限制 (traefik.ingress.kubernetes.io/rate-limit) 和自定义响应标头 (traefik.ingress.kubernetes.io/custom-response-headers),那么当请求受到速率限制时,将不会设置自定义标头。我想这是因为这些插件之间的一些排序/优先级。我完全同意达到速率限制应该尽快返回响应,但是如果我们可以根据需要修改优先级,那就太好了。

因此问题是:我们能否为中间件设置优先级?

我在in the docs 和 github 问题中都找不到任何线索。

具体用例:

我希望始终设置 CORS 策略标头,即使启动了速率限制。我希望这样做是因为我的 SPA 不会获得响应对象,否则浏览器不会允许它:

Access to XMLHttpRequest at 'https://api.example.com/api/v1/resource' from origin 'https://cors.exmaple.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

在这种情况下,如果我可以将headers middleware 的优先级设置为高于rate limit middleware,那将是一个很好的解决方案。

【问题讨论】:

    标签: kubernetes traefik traefik-ingress


    【解决方案1】:

    为了将来参考,这里有一个演示这种排序的工作示例:

    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: ratelimit
    spec:
      rateLimit:
          average: 100
          burst: 50
    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: response-header
    spec:
      headers:
        customResponseHeaders:
          X-Custom-Response-Header: "value"
    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: ingressroute
    spec:
    # more fields...
      routes:
        # more fields...
        middlewares: # the middlewares will be called in this order
        - name: response-header
        - name: ratelimit
    

    我在 Containous 社区论坛上问过同样的问题:https://community.containo.us/t/can-we-set-priority-for-the-middlewares-in-v2/1326

    【讨论】:

      【解决方案2】:

      常规网页可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到同源策略的限制。扩展并没有那么有限。只要首先请求跨域权限,扩展程序就可以与其源之外的远程服务器通信。

      1. 尝试在本地机器上进行测试,将 localhost 替换为您的本地 IP。您必须通过以下代码行实现 CORS request.withCredentials = true;其中 request 是 XMLHttpRequest 的实例。必须将 CORS 标头添加到后端服务器以允许跨源访问。

      2.您可以编写自己的脚本,该脚本将负责在 headers 中间件之后执行速率限制中间件。

      【讨论】:

      • 感谢您的回复!这是一个关于特定 traefik v2 功能的问题,所以它没有回答它:) 我知道我面临什么(可能),我想知道它是否可以通过仅配置 traefik 中间件来解决,或者不是。这两个中间件都存在于那个生态系统中,所以我想使用它们,但它似乎无法针对上述情况进行配置。
      • 还有问题吗?
      【解决方案3】:

      在v2中,中间件可以按你想要的顺序排列,你可以在同一条路由上多次放置相同类型的不同配置的中间件。

      https://docs.traefik.io/v2.0/middlewares/overview/

      【讨论】:

        猜你喜欢
        • 2016-05-02
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2022-08-12
        • 2011-02-15
        相关资源
        最近更新 更多