基于 Openshift 3.11 header 的路由

Openshift 3.11 header based routing

我正在尝试在 Openshift 3.11 上实现基于 header 的路由。

我的意思是,我希望 HAProxy 根据 header 存在和值而不是主机名将请求路由到某个服务。 header 值将在路由配置中设置。

我知道这可以通过 HAProxy 实现,但我不知道该怎么做。 我遵循了 here 发现的一条建议,但配置似乎已更改并且不再有效。

欢迎提出任何建议。我有一个替代方案,就是放置一个可以完成这项工作的第二个代理,但这一点也不优雅......

好的,我设法让它正常工作了。但帮助的不是文档。 我在问题中发布的 link 中显示的一段代码是放在以下配置部分下:

  • frontend public(http 代理)
  • frontend fe_sni(带有自定义证书的 https 代理)
  • frontend fe_no_sni(带默认证书的 https 代理)

另外,这段代码很旧,没有包含实际的变量名。 这是一个,对于每条路线:

  • 查找名为 haproxy.router.openshift.io/tenant-id
  • 的路由注释
  • 创建 2 个 acls 检查名为 tenant-id 的 cookie 的值以及主机是否是预期的主机值(主机值可使用路由注释配置 haproxy.router.openshift.io/tenant-hostname
  • 检查 2 个 acls return 是否为真,如果是,则向路由后面的服务发出 http 请求
  # Custom snippet for balancing through HTTP headers
  {{- range $cfgIdx, $cfg := .State }}
  {{- if (ne (index $cfg.Annotations "haproxy.router.openshift.io/tenant-id") "") }}
  acl custom_header_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}} cook(tenant-id) {{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}}
  acl configured_host_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}} hdr(host) {{index $cfg.Annotations "haproxy.router.openshift.io/tenant-hostname"}}
  use_backend be_edge_http:{{$cfgIdx}} if configured_host_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}} custom_header_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}}

  {{- end }}
  {{- end }}