You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为HAProxy配置针对Kubernetes API的认证式HTTP健康检查

HAProxy 配置优化方案(针对K3s集群API健康检查)

先修正配置中的端口冲突问题

你当前配置里k3s-frontend-api和k3s-frontend-http都绑定了*:6443,这会导致端口占用冲突,直接无法启动HAProxy。先把k3s-frontend-http的绑定端口改为*:80,和后端的80端口对应。

核心优化:为K3s API添加带认证的健康检查

针对6443端口的Kubernetes API后端,替换原有的TCP端口检查为带Bearer Token认证的HTTPS健康检查,直接校验/readyz端点的响应,确保只有真正Ready的节点才会被流量转发。

修改后的完整配置

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

# K3s API Server 6443端口
frontend k3s-frontend-api
    bind *:6443
    mode tcp
    option tcplog
    default_backend k3s-backend-api

backend k3s-backend-api
    mode tcp
    # 启用带认证的HTTPS健康检查
    option tcp-check
    tcp-check connect ssl verify required ca-file /usr/local/share/ca-certificates/ca.crt
    # 发送GET请求到/readyz,携带Bearer Token
    tcp-check send "GET /readyz HTTP/1.1\r\nHost: 192.168.1.201\r\nAuthorization: Bearer YOUR_LONG_LIVED_TOKEN\r\nConnection: close\r\n\r\n"
    # 期望返回200 OK状态码
    tcp-check expect string "HTTP/1.1 200 OK"

    balance leastconn
    default-server downinter 5s rise 2 fall 3
    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

# NodePort/Ingress HTTP 80端口
frontend k3s-frontend-http
    bind *:80
    mode tcp
    option tcplog
    default_backend k3s-backend-http

backend k3s-backend-http
    mode tcp
    option tcp-check
    # 可选:如果需要更准确的检查,也可以改为HTTP检查(针对Ingress Controller的健康端点)
    # tcp-check send "GET /healthz HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n"
    # tcp-check expect string "HTTP/1.1 200 OK"

    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

# NodePort/Ingress HTTPS 443端口
frontend k3s-frontend-https
    bind *:443
    mode tcp
    option tcplog
    default_backend k3s-backend-https

backend k3s-backend-https
    mode tcp
    option tcp-check
    # 可选:针对HTTPS的Ingress Controller健康检查
    # tcp-check connect ssl verify none
    # tcp-check send "GET /healthz HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n"
    # tcp-check expect string "HTTP/1.1 200 OK"

    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

# HAProxy 监控统计页
frontend stats
    mode http
    bind *:8404
    stats enable
    stats uri /stats
    stats refresh 10s
    stats auth user:pass

关键配置说明

  1. 端口冲突修正:将k3s-frontend-http绑定端口改为*:80,和后端节点的80端口对应,避免和6443的API端口冲突。
  2. API健康检查增强:
    • tcp-check connect ssl verify required ca-file:指定使用集群CA证书验证API Server的SSL证书,确保检查请求的安全性。
    • tcp-check send:构造完整的HTTP请求,携带你的长期Bearer Token,请求/readyz端点(这个端点比/healthz更能反映节点是否Ready接受请求)。
    • tcp-check expect string:校验响应是否包含HTTP/1.1 200 OK,只有符合条件的节点才会被标记为可用。
  3. 节点状态切换阈值:添加rise 2 fall 3,表示节点连续2次检查通过才标记为上线,连续3次失败标记为下线,避免网络抖动导致的误判。

注意事项

  • 替换YOUR_LONG_LIVED_TOKEN为你实际创建的服务账户令牌。
  • 确保HAProxy进程有权限读取/usr/local/share/ca-certificates/ca.crt文件,可调整文件权限或路径。
  • 对于80/443端口的后端,如果你使用的是Ingress Controller(如Traefik),可以参考API的配置方式,添加针对Ingress Controller健康端点的检查,进一步提升可靠性。

内容的提问来源于stack exchange,提问作者Ruben Hensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:50:56