【问题标题】:Make Traefik route HTTP BAN requests to different service or port than regular HTTP requests使 Traefik 将 HTTP BAN 请求路由到与常规 HTTP 请求不同的服务或端口
【发布时间】:2019-11-21 16:50:52
【问题描述】:

我们在 GKE Kubernetes 集群上使用 Traefik 1.7 作为 Ingress-controller。每个应用程序都有一个 Ingress,它将传入的 HTTP 请求路由到 Varnish 服务,该服务要么提供来自缓存的响应,要么将请求路由到一些 nginx/PHP 后端应用程序。

Varnish pod 包含一个 Varnish 容器,它在端口 80 上侦听传入请求,以及一个在端口 6083 上的应用程序,负责将 BAN 请求镜像到所有 Varnish 副本,以便从所有 Varnish 副本中清除缓存对象。大多数 BAN 请求将来自内部 PHP 应用程序,但我们也有来自在该集群外部运行的 GitLab CI 任务的 BAN 请求。

我们希望将带有 BAN 动词(与 GET、POST 等相反)的传入 HTTP 请求路由到 Varnish 服务上的端口 6083,同时让 GET、HEAD、POST 流量像往常一样到达端口 80。

我想不出办法让 Traefik 根据 HTTP 动词路由到不同的服务或端口。有什么想法吗?

【问题讨论】:

标签: kubernetes traefik traefik-ingress


【解决方案1】:

您可以在路由表达式中使用Method() 规则。有关更多详细信息,请参阅https://docs.traefik.io/routing/routers/#rule,但通过快速检查 Traefik 和 Mux 中的代码,我认为Method(\"BAN\") 没有理由不工作。

【讨论】:

  • 感谢@coderanger。这会起作用,尽管它似乎是 Traefik 2 独有的功能。 Traefik 2 切换到使用 CRD 模型,它允许比“经典”Kubernetes Ingress 更多的路由选项,后者只允许基于主机和路径的路由。我会考虑迁移到 Traefik 2,因为这应该对我有用,而且似乎是未来。
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多