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