在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,那将是一个很好的解决方案。
答案 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中,中间件可以按您想要的顺序排序,您可以将同一类型的中间件多次放置在同一路径上,并且配置不同。