我正在尝试为不同站点(不同子网)上具有主 HA 的新 k8s 集群构建一个架构。
我面临的问题是找到一个可以支持不同子网(GSLB)的开源软件负载均衡(站点上没有物理的,它是一个内部环境)。
负载均衡器用于 Apiserver 和与主服务器的所有连接。
有人部署过这种架构吗?你用的是哪个 LB?我不能使用 HAproxy 或 seesaw,因为它们不支持不同的子网。
答案1
经过一些研究和实验,对于其中一种解决方案及其用法有以下考虑(这个问题可以用不同的方式解决)。
Nginx
(常规,不是 PLUS),并且haproxy
可以在 kubernetes API 服务器的不同子网之间平衡流量,而不会出现任何问题。但是,keepalived
由于协议限制,无法在超过 1 个子网中工作,例如高速备份协议,虚拟专用网络备份组 或者鲤鱼。
这里的潜在解决方案可以是使用在 1 个子网内至少有 2 个 haproxy/nginx 实例(用于冗余)的架构,并且keepalived
+ 例如CARP 层 在负载均衡器之上。这样,健康检查将在顶层进行,负载均衡器将具有到具有 kubernetes api 服务器的其他子网的路由。
至于子网可用性和冗余,可以使用动态路由来解决,例如OSPF 协议interior gateway protocol
作为路由的一部分BPG 协议用于exterior gateway protocol
路由。
另一个开源但需要付费的解决方案是 Nginx PLUS。它可以进行主动健康检查(例如TCP 主动健康检查) 也GeoIP 功能。
Nginx PLUS 还支持 GSLB。以下是 Nginx 官方文档的引文:
全局服务器负载平衡 (GSLB) 是指在位于多个接入点 (PoP) 的服务器资源之间智能分配流量。GSLB 最常见的实现方式是控制对 DNS 请求的响应,根据每个 PoP 的可用性、性能和接近度将每个用户引导到最合适的目标 IP 地址。
这导致需要使用额外的 DNS 服务。例如 NS1。开始使用它需要满足一些先决条件:
请阅读带有 GSLB 的 Nginx PLUS 的完整描述和设置文章
更新:
GSLB 概念不仅涉及负载均衡器和健康检查(例如keepalived
,还涉及使用 DNS。通常使用 DNS 提供商提供的服务更便宜、更可靠。例如,NS1 提供基于 DNS 的 GSLB
你也可以熟悉一些当前的 GSLB 项目这里- 其中一些是开源的: