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

三、参考文献

openelb官方文档

posted @ 2025-06-19 16:40  怀恋小时候  阅读(169)  评论(0)    收藏  举报