1

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

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

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

我在文档和 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.

在这种情况下,如果我可以将标头中间件的优先级设置为高于速率限制中间件,那将是一个很好的解决方案。

4

3 回答 3

2

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

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

于 2019-09-02T11:28:58.187 回答
0

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

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

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

于 2019-06-19T12:39:24.677 回答
0

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

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

于 2019-08-31T02:54:55.097 回答