【问题标题】:Restrict allowed methods on Traefik routes限制 Traefik 路由上允许的方法
【发布时间】:2019-09-19 13:23:34
【问题描述】:

我目前在我的 K8s 集群中使用 traefik 1.6.x 作为入口控制器。我想更新到 1.7.x(然后再更新到 2.x),但更新后我的 ingresses 不再工作了。

问题似乎是,我通过将方法添加到 traefik.frontend.rule.type 注释来对我的入口进行 http 方法限制,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-name
  namespace: namespace1
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: "Method: CONNECT, DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT; PathPrefix"
    ingress.kubernetes.io/hsts-max-age: "315360000"
    ingress.kubernetes.io/hsts-include-subdomains: "true"
    ingress.kubernetes.io/custom-frame-options-value: "SAMEORIGIN"
    ingress.kubernetes.io/content-type-nosniff: "true"
    ingress.kubernetes.io/browser-xss-filter: "true"
    ingress.kubernetes.io/custom-response-headers: "Server:||X-Application-Context:||X-Powered-By:||exception:"
spec:
  rules:
    - host: ...

我不知道这是否曾经打算以这种方式完成,但显然它奏效了。我在其他 StackOverflow 帖子 iirc 中发现了这一点。

删除 Method 部分(或整个注释,因为 PathPrefix 是默认值)使路由恢复生机。但是,这当然允许再次使用 TRACE 方法,例如。

是否有另一种方法可以使用 1.7.x 的 traefik 版本来限制那些(甚至可能是所有入口)?

提前致谢!

【问题讨论】:

标签: http kubernetes traefik traefik-ingress


【解决方案1】:

实际上@Crou 关于 CORS 标头的评论有效!我刚刚又偶然发现了这个问题,并将 method 部分移到 custom-reponse-headers 并且它似乎可以工作:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-name
  namespace: namespace1
  annotations:
    kubernetes.io/ingress.class: traefik
    ingress.kubernetes.io/hsts-max-age: "315360000"
    ingress.kubernetes.io/hsts-include-subdomains: "true"
    ingress.kubernetes.io/custom-frame-options-value: "SAMEORIGIN"
    ingress.kubernetes.io/content-type-nosniff: "true"
    ingress.kubernetes.io/browser-xss-filter: "true"
    ingress.kubernetes.io/custom-response-headers: "Server:||X-Application-Context:||X-Powered-By:||exception:||Access-Control-Allow-Headers:CONNECT, DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT"
spec:
  rules:
    - host: ...

然后我完全删除了traefik.frontend.rule.type 部分,因为PathPrefix 是默认设置。

(!)我只升级到 traefik 1.7.20。我还没有成功迁移到 traefik 2。所以我不确定这是否适用于 traefik 2!

【讨论】:

  • 那个Access-Control-Allow-Headers:GET 应该是Access-Control-Allow-Methods:GET,对吧?这不会阻止使用不正确的 HTTP 方法的请求。
  • 是的,对不起。那是一个错字。它应该是Access-Control-Allow-Headers。但这并不能解决根本问题,因为这些标头主要由浏览器使用。所以你并没有真正阻止请求。与此同时,我们迁移到 Traefik2,并在入口规则中配置了允许的方法。
猜你喜欢
  • 1970-01-01
  • 2015-09-06
  • 2013-11-10
  • 2019-03-10
  • 2018-03-28
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多