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

如何为Kubernetes集群安全配置外部负载均衡?

如何为Kubernetes集群安全配置外部负载均衡?

兄弟,我完全懂你现在的处境——之前把DNS直接绑到集群单节点的坑你已经踩过了,现在用HAProxy做外部负载均衡总算解决了单点故障的问题,但又纠结负载均衡器到K8s集群之间的流量还是明文HTTP,想把这部分也加密对吧?我给你几个生产环境里常用的靠谱方案:

方案一:在K8s服务/Ingress层配置SSL,让HAProxy与集群走HTTPS

这是最直接的应用层加密方式,核心是让K8s侧提供HTTPS服务,HAProxy作为客户端发起加密请求:

  • 证书准备:生产环境推荐用Cert-Manager自动签发Let's Encrypt的可信证书,测试环境可以用自签证书。如果是Ingress Controller管理流量,直接在Ingress资源里配置证书即可;如果是直接暴露NodePort/ClusterIP服务,需要把证书挂载到对应的Pod中,让服务本身监听HTTPS端口。
  • HAProxy配置调整:把后端服务器的协议改成https,同时添加证书验证逻辑(如果用自签证书,要把CA证书放到HAProxy的信任目录里)。举个简单的配置示例:
backend k8s-backend
    mode http
    server k8s-node-1 10.0.0.10:443 check ssl verify required ca-file /etc/haproxy/root-ca.crt
    server k8s-node-2 10.0.0.11:443 check ssl verify required ca-file /etc/haproxy/root-ca.crt

方案二:让HAProxy做四层TCP转发,SSL终止在K8s Ingress层

这种方式更适合集群内有统一Ingress Controller的场景,HAProxy只负责把HTTPS流量原封不动转发到Ingress的端口,加密逻辑全在K8s侧处理:

  • HAProxy四层转发配置:把frontend和backend都设置为tcp模式,直接转发443端口的流量到K8s节点的Ingress NodePort(比如30443):
frontend https-tcp-in
    bind *:443
    mode tcp
    default_backend k8s-ingress-tcp

backend k8s-ingress-tcp
    mode tcp
    server node-1 10.0.0.10:30443 check
    server node-2 10.0.0.11:30443 check
  • K8s侧配置:在Ingress资源中配置好SSL证书(同样推荐用Cert-Manager自动管理),这样从用户到HAProxy是HTTPS,HAProxy到Ingress也是HTTPS,整个链路全程加密,而且Ingress可以统一管理所有服务的证书,不用逐个配置。

方案三:网络层加密(VPN/IPsec)

如果不想在应用层折腾SSL配置,还可以在负载均衡器和K8s集群之间搭建专用加密网络,比如用WireGuard或IPsec:

  • 给HAProxy服务器和所有K8s节点配置WireGuard隧道,让两者之间的通信都走加密隧道,不管是HTTP还是HTTPS流量都会被加密,适合对网络安全要求极高的场景。
  • 这种方式的好处是不用修改任何应用或负载均衡器的应用层配置,只需要在网络层面做设置,对业务透明。

额外注意事项

  • 如果用自签证书,一定要确保HAProxy信任对应的CA证书,否则会出现SSL握手失败的问题。
  • 生产环境优先用Cert-Manager管理证书,它能自动续期证书,避免证书过期导致服务中断。
  • 别忘了配置健康检查,确保HAProxy能及时识别K8s节点的状态,不会把流量转发到故障节点上。

备注:内容来源于stack exchange,提问作者Viktor Eriksson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:53:06