OpenELB —— 负载均衡器
OpenELB
是一款适用于物理机部署 Kubernetes 的负载均衡器,该负载均衡器使用物理交换机实现,利用 BGP 和 ECMP 从而达到性能最优和高可用性。我们知道在云上部署的 Kubernetes 环境下,通常云服务厂商会提供 cloud LB 插件暴露 Kubernetes 服务到外网,但在物理机部署环境下由于没有云环境,服务暴露给外网非常不方便,Porter 是一个提供用户在物理环境暴露服务和在云上暴露服务一致性体验的插件。该插件提供两大功能模块:
- LB controller 和 agent: controller 负责同步 BGP 路由到物理交换机;agent 以 DaemonSet 方式部署到节点上负责维护引流规则;
- 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 直接访问该服务了。
插件部署架构
插件通过一个Manager
监控集群中的 Service 的变化,广播相关路由。同时集群中所有节点都部署有一个 Agent,每当有一个 EIP 被使用时,就会在主机上添加一条主机路由规则,将发往这个 EIP 的 IP 报文引流到本地。
插件逻辑
该插件以服务的形式部署在 Kubernetes 集群中时,会与集群的边界路由器(三层交换机)建立 BGP 连接。每当集群中创建了带有特定注记(一个 annotation 为 lb.kubesphere.io/v1apha1: porter,见示例)的服务时,就会为该服务动态分配 EIP (用户也可以自己指定 EIP),LB controller 创建路由,并通过 BGP 将路由传导到公网(私网)中,使得外部能够访问这个服务。
OpenELB controller 是基于 Kubernetes controller runtime 实现的 custom controller,通过 watch service 的变化自动变更路由信息。
部署插件
从代码构建新的插件
软件需求
- go 1.11,插件使用了 gobgp 创建 BGP 服务端,gobgp 需要 go 1.11
- docker,无版本限制
- kustomize,插件使用了 kustomize 动态生成集群所需的 k8s yaml 文件
- 如果插件会推送到远端私有仓库,需要提前执行
docker login
步骤
git clone https://github.com/kubesphere/porter.git
, 进入代码目录- 按照上面教程的要求修改 config.toml (位于
config/bgp/
下) - (optional)根据自己需要修改代码
- (optional)根据自己的需求修改镜像的参数(位于
config/manager
下) - (optional)按照模拟教程部署一个Bird主机,修改
hack/test.sh
中的BirdIP,然后运行make e2e-test
进行e2e测试 - 修改 Makefile中 的 IMG 名称,然后
make release
,最终的 yaml 文件在deploy
目录下 kubectl apply -f deploy/release.yaml
部署插件
开源许可
OpenELB is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
每日一博 | 使用 Kotlin Flow 构建数据流
Flow 是一种基于流的编程模型,本文我们将向大家介绍响应式编程以及其在 Android 开发中的实践,您将了解到如何将生命周期、旋转及切换到后台等状态绑定到 Flow 中,并且测试它们是否能按照预期执行。 如果您更喜欢通过视频了解此内容,请 点击此处 查看。 单向数据流 △ 加载数据流的过程 每款 Android 应用都需要以某种方式收发数据,比如从数据库获取用户名、从服务器加载文档,以及对用户进行身份验证等。接下来,我们将介绍如何将数据加载到 Flow,然后经过转换后暴露给视图进行展示。 为了大家更方便地理解 Flow,我们以 Pancho (潘乔) 的故事来展开。当住在山上的 Pancho 想从湖中获取淡水时,会像大多数新手一开始一样,拿个水桶走到湖边取水,然后再走回来。 △ 山上的 Pancho 但有时 Pahcho 不走运,走到湖边时发现湖水已经干涸,于是就不得不再去别处寻找水源。发生了几次这种情况后,Pancho 意识到,搭建一些基础设施可以解决这个问题。于是他在湖边安装了一些管道,当湖中有水时,只用拧开水龙头就能取到水。知道了如何安装管道,就能很自然地想到从多个水源地把管...
- 下一篇
开源武器化,OSI:开源“抗议软件”危害开源
俄乌冲突在西方社会引发了一系列针对俄罗斯的制裁,在此背景下,部分开源软件及社区也纷纷进行了站队。事件发展至今,一些愤怒的开源软件维护者则已经开始向开源存储库添加代码,以进行战争抗议。当用户进行部署时,这种"抗议软件"就会向用户传递软件维护者的立场。 对此,OSI 认为,“大多数抗议软件在运行时只是显示反战或支持乌克兰的信息。这是一种非暴力的、创造性的抗议形式,可能是有效的”。但node-ipc 包投毒事件除外,该软件包通过一个 peacenotwar 模块更新破坏了 npm 开发者的代码,旨在抹去存储在俄罗斯和白俄罗斯的数据。网络安全公司 Snyk 公司的 Liran Tal 指出:"这一安全事件涉及一个维护者破坏磁盘上的文件的破坏性行为,以及他们试图以不同形式隐藏和重述这种蓄意破坏的行为"。 软件顾问 Gerald Benischke也在其博文中表示,"开源武器化"是一种不分青红皂白的行为,它造成的附带损害对开发者和运营商的工作都造成了伤害,而这一切仅仅是因为他们有一个俄罗斯分配的 IP 地址。它对和平者的伤害不亚于战争贩子,甚至可能连累运用技术手段从事反入侵工作的道德黑客。 OSI...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器