我使用 HAProxy 负载平衡我的 Kubernetes 集群,使用 TCP 运行状况检查,如 k3s 文档所述。我发现我的节点有时会变得“Unready”,但节点仍然回复 TCP 检查,使得对集群的请求不可靠。
为了解决这个问题,我想使用 Kubernetes 健康端点(/livez 和 /readyz),但 api 是经过身份验证的。我创建了一个具有长期令牌的服务帐户,并将监视角色绑定到它。现在我可以使用以下命令
curl https://192.168.1.201:6443/healthz --cacert /usr/local/share/ca-certificates/ca.crt --header "Authorization: Bearer $TOKEN"
来卷曲 api 点。但是,我一生都无法创建一个 HAProxy 配置来转发所有流量而不触及它,并同时对 Kubernetes API 进行经过身份验证的运行状况检查。任何有关 HAProxy 配置的建议将不胜感激。
我当前的 HAProxy 设置:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
defaults
log global
mode tcp
option tcplog
option logasap
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 k3s-frontend-api
bind *:6443
mode tcp
option tcplog
default_backend k3s-backend-api
backend k3s-backend-api
mode tcp
option tcp-check
balance leastconn
default-server downinter 5s
server server-1 192.168.1.201:6443 check
server server-2 192.168.1.202:6443 check
server server-3 192.168.1.203:6443 check
frontend k3s-frontend-http
bind *:6443
mode tcp
option tcplog
default_backend k3s-backend-http
backend k3s-backend-http
mode tcp
option tcp-check
balance leastconn
default-server downinter 5s
server server-1 192.168.1.201:80 check
server server-2 192.168.1.202:80 check
server server-3 192.168.1.203:80 check
frontend k3s-frontend-https
bind *:443
mode tcp
option tcplog
default_backend k3s-backend-https
backend k3s-backend-https
mode tcp
option tcp-check
balance leastconn
default-server downinter 5s
server server-1 192.168.1.201:443 check
server server-2 192.168.1.202:443 check
server server-3 192.168.1.203:443 check
frontend stats
mode http
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth user:pass
您可以在 TCP 模式下为后端创建 HTTP 检查,但您的配置只有
option tcp-check
。
相反,请进行 HTTP 检查:
option httpchk
http-check send meth GET uri /healthz hdr authorization "Bearer $TOKEN"
这使得 HTTP/1.0 检查。如果不起作用,请在
ver HTTP/1.1 hdr host <hostname_of_your_service>
之后添加 uri
来执行 HTTP/1.1。
可能还需要http-check connect ssl
,因为你的服务器没有提到ssl
,因为它是TCP模式。