官方文档,
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/
官方网络拓扑
拓扑描述:
- 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 转发到其他节点。因此,业务带宽限制为单个节点的带宽,导致带宽瓶颈。