Skip to content

官方文档,

https://openelb.io/

https://openelb.io/docs/getting-started/installation/install-openelb-on-kubernetes/

1. openELB简介

OpenELB是一个为裸机Kubernetes集群设计的开源负载平衡器实现,是国内青云开源

1.1 选择openELB原因

在基于云的 Kubernetes 集群中,服务通常使用云供应商提供的负载均衡器公开。但是,基于云的负载均衡器在裸机环境中不可用。OpenELB 允许用户在裸机、边缘和虚拟化环境中创建 LoadBalancer 服务以供外部访问,并提供与基于云的负载均衡器相同的用户体验

1.2 openELB特点

  • BGP 模式和第 2 层模式
  • ECMP 路由和负载均衡
  • IP 地址池管理
  • 使用 CRD 的 BGP 配置

2. openELB模式

2.1 yayer2

❌ 注意

  • 通常,建议您使用 BGP 模式,因为它允许您创建没有故障转移中断和带宽瓶颈的高可用性系统。但是,BGP 模式要求路由器支持 BGP 和等价多路径 (ECMP) 路由,这在某些系统中可能不可用。在这种情况下,您可以使用第 2 层模式来实现类似的功能。
  • 第 2 层模式要求基础结构环境允许匿名 ARP/NDP 数据包。如果 OpenELB 安装在基于云的 Kubernetes 集群中进行测试,您需要与云供应商确认是否允许匿名 ARP/NDP 数据包。否则,无法使用第 2 层模式。

官方文档,https://openelb.io/docs/concepts/layer-2-mode/

官方网络拓扑

OpenELB 层 2 拓扑

拓扑描述:

  • Kubernetes 集群中部署了由两个 Pod 支持的 Service,并分配了 IP 地址 192.168.0.91 以供外部访问。服务 IP 地址与群集节点 IP 地址位于同一网段。
  • 安装在 Kubernetes 集群中的 OpenELB 会随机选择一个节点(本示例中为 worker 1)来处理 Service 请求。之后,OpenELB 向路由器发送 ARP/NDP 数据包,路由器将服务 IP 地址映射到工作线程 1 的 MAC 地址。
  • 如果集群中部署了多个 openelb-manager 副本,OpenELB 会使用 Kubernetes 的 leader 选举功能来确保只有一个副本响应 ARP/NDP 请求。
  • 当外部客户端计算机尝试访问服务时,路由器会根据服务IP地址与工作线程1的MAC地址之间的映射将服务流量转发到工作线程1。当 Service 流量到达 worker 1 后,kube-proxy 可以进一步将流量转发到其他节点进行负载均衡(Pod 1 和 Pod 2 都可以通过 kube-proxy 到达)。
  • 如果工作线程 1 发生故障,OpenELB 会向路由器重新发送 APR/NDP 数据包,以将服务 IP 地址映射到工作线程 2 的 MAC 地址,服务流量将切换到工作线程 2。

❌ 注意

第 2 层模式有两个限制:

  • 工作线程 1 和工作线程 2 在流量转发方面处于主备模式。发生故障转移时,Kubernetes 集群中的服务将中断一小段时间。
  • 所有 Service 流量总是首先发送到一个节点,然后在第二跳中通过 kube-proxy 转发到其他节点。因此,业务带宽限制为单个节点的带宽,导致带宽瓶颈。