我有一个示例应用程序在具有 3 个副本的 kubernetes 集群中运行。我正在使用 metallb 公开 type=LoadBalancer 的应用程序。
发出的外部ip是10.10.10.11
当我运行时,curl 10.10.10.11
我会得到一个不同的 pod 来响应每个请求,正如您对轮询所期望的那样。这是我想要的行为。
我现在已经设置了一个后端指向 10.10.10.11 的 HAProxy,但是每次我访问 HAProxy 前端时,我都会得到相同的节点来响应每个请求。如果我不断刷新,我会间歇性地获得不同的 pod,有时在 20 次刷新后,有时在 50 次以上刷新后。我已经尝试清除我的浏览器历史记录,但没有任何效果。
我认为这是我的 HAProxy 配置导致问题的原因,也许是缓存?但我没有配置任何缓存。我是一个 HAProxy 新手,所以我可能会遗漏一些东西。
这是我的 HAProxy 配置。
我都尝试过mode tcp
and mode http
,但都给出了相同的结果(同一个 pod 响应每个请求)
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /home/simon/haproxy/haproxy_certs
crt-base /home/simon/haproxy/haproxy_certs
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend https
bind *:443 ssl crt /home/simon/haproxy/haproxy_certs
timeout client 60s
mode tcp
#Hello App
acl ACL_hello_app hdr(host) -i hello.xxxxxxxxxdomain2.com
use_backend hello_app if ACL_hello_app
#Nginx App
acl ACL_nginx_app hdr(host) -i nginx.xxxxxxxxxdomain1.com
use_backend nginx_app if ACL_nginx_app
backend hello_app
timeout connect 10s
timeout server 100s
mode tcp
server hello_app 10.10.10.11:80
backend nginx_app
mode tcp
server nginx_app 10.10.10.10:80
更新
经过进一步测试,该问题似乎与timeout client
, timeout connect
, timeout server
. 我将这些时间减少到 1 秒,然后我每 1 秒得到一个不同的 POD,但是这些时间太短了,我也会遇到间歇性连接失败。
所以,我也有这个问题。HAProxy 是否能够在另一个负载均衡器前作为反向代理工作,还是我需要使用另一种技术,例如 Nginx?