我希望更好地理解“自托管” Kubernetes 环境中的负载平衡概念。
我有一个外部负载均衡器,我们将其标记为LB
。这只是一个运行 NGINX 的虚拟机。然后,我有 2 个用于控制平面的主节点和 3 个用于数据平面的工作节点,其中 2/3 个工作节点正在运行 NGINX 入口控制器。我想通过 将出站流量路由到不同的服务LB
。
在这种情况下,我应该如何考虑路由?理想情况下,我希望 100% 自动化此设置。
- NGINX 配置是否会指向运行以处理路由 TCP 流量的
LB
所有工作节点?ingress controller
- 我是否需要添加额外的配置来
LB
指向cluster.example.com
主节点的 3 个 IP 地址?
我正在研究 metallb,但它似乎更适合那些拥有某种未分配的 IPv4 地址池的人。就我而言,我只是在某个云提供商上运行虚拟机,该提供商为我的分配了一个公共 IPv4 地址LB
。另外,我觉得让我困惑的是如何自动配置更新会发生。我能想到的最好的办法是使用 Hashicorp 的 Consul 将 Kubernetes 服务/节点同步到 Consul,然后编写自定义模板来自动更新节点上的 NGINX 配置LB
。
目标摘要
我想:
- 外部负载均衡器能够访问主节点,例如
kubectl
- 使用入口控制器时,能够使用外部负载均衡器将请求路由到我的不同服务
- 我希望这能轻松实现自动化
答案1
我有一个自托管的 LB 在运行。我最终选择了 metallb。地址池不需要是未分配的租用 IPv4 地址。它可以是 kubernetes 集群内的私有 IPv4 地址池。我在运行私有 192.168.1.x 网络的办公室中执行了此操作。我通过 CIDR 将 IP 地址池定义为 192.168.2.0/24。metallb 解决的复杂性是 LB 和入口控制器之间的通信(即与每个工作节点上的入口准入 pod 通信的 nginx 入口控制器)。这种区别很重要,因为您的入口控制器没有工作节点那么多。Metallb 可以使用 layer2 - 我使用过。它也可以使用 BGP - 但这更复杂,因为它需要路由器 - 我还没有研究过这一点。