openelb部署手册(helm版本)
OpenELB 完整部署流程
OpenELB 是一个开源的 Kubernetes 负载均衡器实现,支持 BGP、Layer 2 和 VIP 模式,适用于裸金属、边缘计算和 Kubernetes 集群中的负载均衡场景。本文将详细介绍如何在 Kubernetes 集群中部署 OpenELB,并配置 BGP 模式以实现动态负载均衡。
一、部署前的准备工作
在开始部署 OpenELB 之前,需要确保你的 Kubernetes 集群和网络环境满足以下前提条件:
1️⃣ Kubernetes 集群要求
- Kubernetes 版本:OpenELB 支持 Kubernetes 1.19 及以上版本。确保你的集群版本符合要求。
- 集群网络:确保集群节点之间网络互通,并且节点能够访问外部物理网络(尤其是 BGP 对等体的 IP 地址)。
- 节点网络配置:每个节点需要有一个可路由的 IP 地址(通常是节点的主机 IP),用于 BGP 会话和负载均衡。
2️⃣ 网络环境要求
- BGP 支持:你的物理网络中必须有一台支持 BGP 协议的路由器或交换机,用于与 OpenELB 建立 BGP 会话。
- IP 地址规划:提前规划好用于外部访问的 IP 地址池(EIP),确保这些 IP 地址在物理网络中是可用的,并且未被其他设备占用。
- 网络连通性:确保 OpenELB 所在的节点能够通过网络访问物理路由器或交换机的 IP 地址,并且网络策略允许 BGP 流量(默认端口
179)通过。
3️⃣ 权限要求
- 集群管理员权限:部署 OpenELB 需要具有集群管理员权限,以便创建自定义资源(CRD)和相关的 Kubernetes 资源。
- RBAC 配置:如果你的集群启用了 RBAC(基于角色的访问控制),需要确保 OpenELB 的 ServiceAccount 具有足够的权限来创建和管理相关资源。
二、部署步骤
步骤1: 使用 Helm 部署 OpenELB(推荐)
# 添加 OpenELB 的 Helm 仓库
helm repo add openelb https://openelb.github.io/openelb
helm repo update
# 安装 OpenELB
helm install openelb openelb/openelb -n openelb-system --create-namespace
步骤2: 配置 BGP 全局设置(BgpConf)
BgpConf 是 OpenELB 中用于定义 BGP 全局配置的资源类型。你需要创建一个 BgpConf 资源,指定 OpenELB 的 ASN 号、Router ID 和监听端口。
apiVersion: network.kubesphere.io/v1alpha2
kind: BgpConf
metadata:
name: default
spec:
as: 65000 # OpenELB 的 ASN 号(私有 ASN 范围:64512 到 65535)
routerId: 192.168.1.100 # 任意节点 IP(建议k8s master ip)
listenPort: 179 # BGP 端口
参数说明
- as:OpenELB 的自治系统号(ASN),必须与物理路由器的 ASN 不同;
- routerId:OpenELB 的 Router ID,通常是一个节点的 IP 地址;
- listenPort:BGP 监听端口,默认是 179。
步骤3:配置 BGP 对等体(BgpPeer)
BgpPeer 是 OpenELB 中用于定义 BGP 对等体(即与 OpenELB 建立 BGP 会话的物理路由器或交换机)的资源类型。
apiVersion: network.kubesphere.io/v1alpha2
kind: BgpPeer
metadata:
name: bgp-peer
spec:
conf:
peerAs: 65001 # 物理路由器的 ASN 号(必须与 BgpConf 中的 AS 不同)
neighborAddress: 192.168.1.254 # 路由器 IP
afiSafis:
- config:
family:
afi: AFI_IP
safi: SAFI_UNICAST
enabled: true
addPaths:
config:
sendMax: 10
参数说明
- peerAs:物理路由器的 ASN 号,必须与 BgpConf 中的 as 不同;
- neighborAddress:物理路由器的 IP 地址;
- afiSafis:地址族配置,通常设置为 AFI_IP 和 SAFI_UNICAST,表示支持 IPv4 单播路由;
- addPaths.sendMax:指定 BGP 的 ADD-PATH 功能的最大发送路径数。
步骤 4:配置 IP 池(EIP)
Eip 是 OpenELB 中的一种自定义资源(Custom Resource,CR),用于定义和管理一组可用的外部 IP 地址(IP 池)。OpenELB 会从这个 IP 池中动态分配外部 IP 地址给 LoadBalancer 类型的 Service。
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
name: bgp-eip-pool # EIP 资源的名称,集群内唯一
annotations:
eip.openelb.kubesphere.io/is-default-eip: "true" # 标记为默认 EIP 资源(可选)
spec:
address: 192.168.1.100-192.168.1.200 # 定义可用的 IP 地址范围(CIDR 或 IP 段)
priority: 100 # EIP 资源的优先级,数值越大优先级越高
namespaces: # 指定允许使用该 EIP 的命名空间(可选)
- default
- ingress-nginx
namespaceSelector: # 通过标签选择器动态选择允许使用该 EIP 的命名空间(可选)
kubesphere.io/workspace: workspace
disable: false # 是否禁用该 EIP 资源,false 表示启用
protocol: bgp # 使用的协议模式:bgp(BGP 模式)
# interface: eth0 # BGP 模式下通常不需要指定网络接口
# interface: can_reach:192.168.1.1 # 可选:通过可达性检测动态选择网络接口(高级用法)
status:
occupied: false # 当前是否有 IP 被占用(由 OpenELB 自动维护)
usage: 0 # 当前已使用的 IP 数量(由 OpenELB 自动维护)
poolSize: 101 # IP 地址池的总大小(由 OpenELB 自动维护)
used: {} # 当前已分配的 IP 地址及其关联的 Service(由 OpenELB 自动维护)
firstIP: 192.168.1.100 # IP 地址池的起始 IP(由 OpenELB 自动维护)
lastIP: 192.168.1.200 # IP 地址池的结束 IP(由 OpenELB 自动维护)
ready: true # EIP 资源是否就绪(由 OpenELB 自动维护)
v4: true # 是否为 IPv4 地址(true 表示 IPv4,false 表示 IPv6)
步骤5: ingress-nginx 应用 OpenELB
# helm-values.yaml (ingress-nginx)
controller:
service:
type: LoadBalancer
annotations:
lb.kubesphere.io/v1alpha1: openelb
protocol.openelb.kubesphere.io/v1alpha1: bgp # 或 layer2
externalTrafficPolicy: Local

浙公网安备 33010602011771号