OpenELB 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
OpenELB 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
OpenELB 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache
开发语言 Google Go
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 KubeSphere
适用人群 未知
收录时间 2021-04-20

软件简介

OpenELB 是一款适用于物理机部署 Kubernetes 的负载均衡器,该负载均衡器使用物理交换机实现,利用 BGP 和 ECMP 从而达到性能最优和高可用性。我们知道在云上部署的 Kubernetes 环境下,通常云服务厂商会提供 cloud LB 插件暴露 Kubernetes 服务到外网,但在物理机部署环境下由于没有云环境,服务暴露给外网非常不方便,Porter 是一个提供用户在物理环境暴露服务和在云上暴露服务一致性体验的插件。该插件提供两大功能模块:

  1. LB controller 和 agent: controller 负责同步 BGP 路由到物理交换机;agent 以 DaemonSet 方式部署到节点上负责维护引流规则;
  2. EIP service,包括 EIP pool 管理和 EIP controller,controller 会负责更新服务的 EIP 信息。

OpenELB 是 KubeSphere 的一个子项目。

物理部署架构

下图是物理部署架构图,假设有一个服务部署在 node1 (192.168.0.2) 和 node2 (192.168.0.6) 上,需要通过公网 IP 1.1.1.1 访问该服务,服务部署人员按照示例部署该服务后,Porter 会自动同步路由信息到 leaf 交换机,进而同步到 spine,border 交换机,互联网用户就可以通过 EIP 1.1.1.1 直接访问该服务了。

node architecture

插件部署架构

插件通过一个Manager监控集群中的 Service 的变化,广播相关路由。同时集群中所有节点都部署有一个 Agent,每当有一个 EIP 被使用时,就会在主机上添加一条主机路由规则,将发往这个 EIP 的 IP 报文引流到本地。

porter deployment

插件逻辑

该插件以服务的形式部署在 Kubernetes 集群中时,会与集群的边界路由器(三层交换机)建立 BGP 连接。每当集群中创建了带有特定注记(一个 annotation 为 lb.kubesphere.io/v1apha1: porter,见示例)的服务时,就会为该服务动态分配 EIP (用户也可以自己指定 EIP),LB controller 创建路由,并通过 BGP 将路由传导到公网(私网)中,使得外部能够访问这个服务。

OpenELB controller 是基于 Kubernetes controller runtime 实现的 custom controller,通过 watch service 的变化自动变更路由信息。

porter architecture

部署插件

  1. 在物理部署的 K8s 集群上部署
  2. 在青云上用模拟路由器的方式测试

从代码构建新的插件

软件需求

  1. go 1.11,插件使用了 gobgp 创建 BGP 服务端,gobgp 需要 go 1.11
  2. docker,无版本限制
  3. kustomize,插件使用了 kustomize 动态生成集群所需的 k8s yaml 文件
  4. 如果插件会推送到远端私有仓库,需要提前执行 docker login

步骤

  1. git clone https://github.com/kubesphere/porter.git, 进入代码目录
  2. 按照上面教程的要求修改 config.toml (位于 config/bgp/ 下)
  3. (optional)根据自己需要修改代码
  4. (optional)根据自己的需求修改镜像的参数(位于 config/manager 下)
  5. (optional)按照模拟教程部署一个Bird主机,修改hack/test.sh中的BirdIP,然后运行make e2e-test进行e2e测试
  6. 修改 Makefile中 的 IMG 名称,然后 make release,最终的 yaml 文件在 deploy 目录下
  7. kubectl apply -f deploy/release.yaml 部署插件

开源许可

OpenELB is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(2)
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
2 评论
21 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部