3.4.3. 使用 PROXY 协议
默认情况下,HAProxy 路由器不使用 PROXY 协议。可以使用 ROUTER_USE_PROXY_PROTOCOL
环境变量配置路由器,以预期传入连接的 PROXY 协议:
启用 PROXY 协议
oc set env dc/router ROUTER_USE_PROXY_PROTOCOL=true
$ oc set env dc/router ROUTER_USE_PROXY_PROTOCOL=true
将变量设置为 true
或 TRUE
以外的任何值,以禁用 PROXY 协议:
禁用 PROXY 协议
oc set env dc/router ROUTER_USE_PROXY_PROTOCOL=false
$ oc set env dc/router ROUTER_USE_PROXY_PROTOCOL=false
如果您在路由器中启用 PROXY 协议,则必须将路由器前面的负载均衡器配置为使用 PROXY 协议。以下是配置 Amazon Elastic Load Balancer(ELB)服务以使用 PROXY 协议的示例。本例假定 ELB 将端口 80(HTTP)、443(HTTPS)和 5000(镜像注册表)转发到一个或多个 EC2 实例上运行的路由器。
将 Amazon ELB 配置为使用 PROXY 协议
要简化后续步骤,首先设置一些 shell 变量:
lb='infra-lb' instances=( 'i-079b4096c654f563c' ) secgroups=( 'sg-e1760186' ) subnets=( 'subnet-cf57c596' )
$ lb='infra-lb'
1 $ instances=( 'i-079b4096c654f563c' )
2 $ secgroups=( 'sg-e1760186' )
3 $ subnets=( 'subnet-cf57c596' )
4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接下来,使用适当的监听程序、安全组和子网创建 ELB。
注意您必须将所有监听程序配置为使用 TCP 协议,而不是 HTTP 协议。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 ELB 注册路由器实例或实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 ELB 的健康检查:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最后,创建一个启用了
ProxyProtocol
属性的负载均衡器策略,并在 ELB 的 TCP 端口 80 和 443 中配置它:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证配置
您可以按如下所示检查负载均衡器以验证配置是否正确:
或者,如果您已经配置了 ELB,但没有配置为使用 PROXY 协议,则需要更改 TCP 端口 80 的现有监听程序以使用 TCP 协议而不是 HTTP(TCP 端口 443 应已使用 TCP 协议):
aws elb delete-load-balancer-listeners --load-balancer-name "$lb" \ --load-balancer-ports 80 aws elb create-load-balancer-listeners --load-balancer-name "$lb" \ --listeners 'Protocol=TCP,LoadBalancerPort=80,InstanceProtocol=TCP,InstancePort=80'
$ aws elb delete-load-balancer-listeners --load-balancer-name "$lb" \
--load-balancer-ports 80
$ aws elb create-load-balancer-listeners --load-balancer-name "$lb" \
--listeners 'Protocol=TCP,LoadBalancerPort=80,InstanceProtocol=TCP,InstancePort=80'
验证协议更新
验证协议是否已更新,如下所示:
- 1
- 所有监听器(包括 TCP 端口 80 的监听器)都应使用 TCP 协议。
然后,创建一个负载均衡器策略,并将其添加到 ELB 中,如上一步第 5 步所述。