我正在尝试在Openshift 3.11上实现基于标头的路由。
我的意思是,我希望HAProxy根据标头的存在和值而不是主机名将请求路由到某个服务。标头值将在路由配置中设置。
我知道HAProxy可以实现,但是我不知道该怎么做。 我遵循了一条发现here的建议,但似乎配置已更改并且不再起作用。
任何建议都将受到欢迎。我有另一种选择,那就是放置第二个代理来完成工作,但这根本不够优雅……
答案 0 :(得分:0)
好的,我设法使其正常运行。但这不是文档的帮助。 我在问题中发布的链接中显示的代码段位于以下配置部分中:
frontend public
(http代理)frontend fe_sni
(带有自定义证书的https代理)frontend fe_no_sni
(具有默认证书的https代理)此外,这段代码很旧,没有包含实际的变量名。 这是每条路线的地方:
haproxy.router.openshift.io/tenant-id
的路线注释tenant-id
的cookie的值以及主机是否为预期的主机(主机值可通过路由注释haproxy.router.openshift.io/tenant-hostname
配置 # 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 }}