不同子网上的 kubernetes master 的负载平衡

不同子网上的 kubernetes master 的负载平衡

我正在尝试为不同站点(不同子网)上具有主 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。开始使用它需要满足一些先决条件:

  • 注册域名
  • NS1 帐户
  • 已部署三个或更多 NGINX Plus 实例,每个实例均具有:

请阅读带有 GSLB 的 Nginx PLUS 的完整描述和设置文章

更新:

GSLB 概念不仅涉及负载均衡器和健康检查(例如keepalived,还涉及使用 DNS。通常使用 DNS 提供商提供的服务更便宜、更可靠。例如,NS1 提供基于 DNS 的 GSLB

你也可以熟悉一些当前的 GSLB 项目这里- 其中一些是开源的:

相关内容