我们可以为traefik v2中的中间件设置优先级吗?

时间:2019-06-18 08:05:01

标签: kubernetes traefik traefik-ingress

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

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

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

我找不到任何线索in the docs,也没有发现github问题。

具体用例:

我希望始终设置CORS-policy标头,即使限速生效了。我想要这样做是因为我的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,那将是一个很好的解决方案。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

常规网页可以使用XMLHttpRequest对象从远程服务器发送和接收数据,但是它们受同一原始策略的限制。扩展不受限制。扩展可以在其起源之外与远程服务器通信,只要它首先请求跨域许可。

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

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

答案 2 :(得分:0)

在v2中,中间件可以按您想要的顺序排序,您可以将同一类型的中间件多次放置在同一路径上,并且配置不同。

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