OpenELB 在 CVTE 的最佳实践

作者:大飞哥,视源电子股份运维工程师, KubeSphere 社区用户委员会广州站站长,KubeSphere Ambassador。

公司介绍

广州视源电子科技股份有限公司(以下简称视源股份)成立于 2005 年 12 月,旗下拥有多家业务子公司。截至 2022 年 12 月 31 日,公司总人数超 6000 人,约 60% 为技术人员,员工平均年龄约为 29 岁。

目前公司的主营业务为液晶显示主控板卡和交互智能平板等显控产品的设计、研发与销售,产品已广泛应用于家电领域、 教育信息化领域、企业服务领域等,始终致力于通过产品创新、研发设计提升产品的用户体验,为客户和用户持续创造价值。公司自成立以来,依托在音视频技术、信号处理、电源管理、人机交互、应用开发、系统集成等电子产品领域的软硬件技术积累,面向多应用场景进行技术创新和产品开发,通过产品和资源整合等能力在细分市场逐步取得领先地位,并建立了教育数字化工具及服务提供商希沃(seewo)、智慧协同平台 MAXHUB 等多个业内知名品牌。

挑战

随着在 Kubernetes 上运行的应用程序数量增加,如何优雅地将服务导出到集群成为一个需要解决的问题。Kubernetes 提供了 NodePort 和 Loadbalancer 来导出服务。NodePort 受到主机端口数量的限制,过多的端口开放还会有安全风险,在流量治理方面更是让人望而生畏;Loadbalancer 则用于声明云供应商的服务,对于裸金属服务器而言,Kubernetes 官方不提供支持。对于企业私有云中的 Kubernetes 集群,想要对外提供服务,就遇到了挺大的挑战。在这种情况下,我们发现了 OpenELB, 它可以在 Loadbalancer 类型中导出服务并稳定运行。

解决方案

作为 KubeSphere 团队开源的项目,OpenELB(曾用名 Porter)是一款为裸金属服务器提供 LoadBalancer 类型服务的产品。

总结起来,有如下几个优点:

  • 首先,它是由一个团队而不是个人运行的,而且社区贡献者颇多,因此可以避免厂商依赖或者无人维护。
  • 其次,OpenELB 支持的协议比同类竞争对手更多。
  • 最后,OpenELB 有完备的文档,对中文支持友好,企业服务可以获得更多的技术服务支持。在使用过程中,您会发现更多的惊喜。

实践过程

管理员可以通过 NodePort 导出 Kubernetes 服务。在这种情况下,每台集群主机都会导出同样的端口,这在大规模集群中的开销是巨大的。不幸的是,Kubernetes 可以使用的主机端口是有限的(30000-32768)。开源社区建议使用动态端口,这可能会带来风险和管理难度,给流量治理带来巨大的挑战。Kubernetes 中的默认 LoadBalancer 类型的服务仅支持云厂商提供的服务。

OpenELB 是一种解决方案,用于为裸机提供负载均衡类型的服务,基于 BGP 和 ECMP 协议,可实现最佳性能和高可用性。OpenELB 提供了两个功能模块:

  1. 负载均衡控制器(Controller)

    该控制器负责将 BGP 路由同步到物理交换机。

  2. CRD 和 CRD 控制器

    CRD EIP 定义了在 Layer2 模式中使用的 EIP 地址池,同样,CRD BgpConf 和 BgpPeer 定义了 Kubernetes 集群内部的 BGP,并用于 BGP 模式。

生产环境中,强烈建议使用 BGP 模式。如下图所示,把物理路由器设备划归到 AS50001 中,把 OpenELB 所在的集群划归到 AS 50000 中,OpenELB 会建立服务路由规则,并将其同步到物理路由器上,BGP 路由器根据负载均衡策略转发对应的流量到达相应的集群主机节点上,kube-proxy 再近一步转发流量到 Service 层。BGP 模式需要物理路由器设备和集群主机网络的支持,其最大的优点就是稳定可靠,解决了路由转发的单点故障问题。

虽然 BGP 模式是建议的模式,但是在实际应用中,Layer2 模式使用更为广泛。因为它简单易用,配置要求低,配置简单。对于使用虚拟机作为 K8s 集群节点的用户,受 VMware 网络的限制,只能选择 Layer2 模式。让我们来看下 Layer2 模式的网络架构。

我们使用 GitLab CI 和 Argo CD 建立自动化流水线,以帮助开发人员提高效率,并使用 Nginx Ingress 处理 7 层请求。Argo CD 使用 IP 10.10.1.2 导出负载均衡类型的服务,而 Nginx Ingress 则使用 IP 10.10.1.3 导出。因此,我们可以建立如下的 DNS 记录:

# HOSTS
10.10.1.2  argocd.cvte.com
10.10.1.3  ingress.cvte.com

当用户访问像 argocd.cvte.com 这样的域名时,请求将路由到路由器。由于 EIP 不能绑定到任何网络卡硬件上,因此路由器需要广播 ARP 请求,这个请求将被 OpenELB 回应一个集群节点的 IP。这样,路由器就知道将网络数据包发送到哪里了。由 Ingress 控制的任何其他域都会路由到另一个 EIP。

通常情况下,OpenELB 仅会使用一个集群节点 IP 响应 ARP 请求。如果此节点关闭或不可用,则 OpenELB 会切换到另一个节点,以确保业务的连续性。

通过对 Layer2 模式原理的讲解,不难发现,Layer2 模式有单点故障风险。为了减少这种单点风险,KubeSphere 研发团队贴心地开发了 VIP 模式,即虚拟 IP 模式。VIP 提供了单点故障的转移,当 Layer2 模式中的主机节点故障,OpenELB 会自动切换流量到备份 IP。VIP 模式,只能算是减少单点故障风险,无法完全消灭风险。所以在生产环境中,普通 Layer2 模式或 VIP 模式,都不建议使用。根据我们的经验,如万般无奈,只能使用 Layer2 模式,那就独立两台机器,只用来接收外部流量,并尽量保证这两台机器的高可用。

使用效果

OpenELB 以 TCP 协议导出服务,并与 Ingress 配合使用,可以轻松管理大多数 Web 应用程序。与 NodePort 不同,OpenELB 只需要几个 EIP 即可代理请求到服务,流量集中处理从而极大地降低了管理难度。

总结

OpenELB 提供了一种为裸金属服务器导出 LoadBalancer 类型服务的功能,帮助我们轻松地管理网络基础设施。作为 KubeSphere 的一个子项目,OpenELB 非常适合在企业私有云环境中使用,具有较强的稳定性和可信度。

参考阅读

  • 负载均衡器 OpenELB ARP 欺骗技术解析

  • 详解 K8s 服务暴露机制与 OpenELB 负载均衡器插件(直播回放 + PPT)

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/27472.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[7]PCB设计实验|认识常用元器件|电容器|19:00~19:30

目录 一、电容器的识别 电容的应用 1. 电容有通交流阻隔直流电的作用 2. 有滤波、耦合、旁路作用等 3. 有些电容是有极性,有些是没有极性 二、常见电容器 1. 贴片电容 a、材质瓷片 b、材质钽介质 c、材质电解质 2. 手插电容 a、瓷片电容 b、聚脂电容 …

Windows命令行查找并kill进程及常用批处理命令汇总

Windows命令行查找并kill进程及常用命令汇总 打开命令窗口 开始—->运行—->cmd,或者是 windowR 组合键,调出命令窗口。 cmd命令行杀死Windows进程方法 1、根据进程名称批量kill 1)、执行tasklist|more检索进程 2)、执…

使用OpenAI创建对话式聊天机器人

引言 在当今的技术世界中,人工智能(AI)的发展迅猛,为我们带来了许多令人兴奋的创新。其中,自然语言处理(NLP)领域的进展使得开发对话式聊天机器人成为可能。OpenAI是一家领先的人工智能研究实验…

常见的JS存储方式及其特点

在前端开发中,经常需要在浏览器端存储和管理数据。为了实现数据的持久化存储和方便的访问,JavaScript提供了多种数据存储方式。本文将介绍几种常见的前端JS数据存储方式及其特点。 1. Cookie Cookie是一种小型的文本文件,由浏览器保存在用户…

如何利用google的protobuf设计、实现自己的RPC框架

一、前言 这篇文章我们就来聊一聊 RPC 的相关内容,来看一下如何利用 Google 的开源序列化工具 protobuf,来实现一个我们自己的 RPC 框架,内容有点长,请耐心看完。 序列化[1]:将结构数据或对象转换成能够被存储和传输&…

基于javaweb jsp+servlet实验室设备管理系统的设计与实现

一.项目介绍 本系统分为 超级管理员、老师、学生三类角色 超级管理员:通知管理、维护用户信息、实验室管理(负责维护实验室、预约实验室)、设备管理(维护技术参数、维护运行数据、维护电子文档)、设备维修管理&am…

JavaScript 教程---互联网文档计划

学习目标: 每天记录一章笔记 学习内容: JavaScript 教程---互联网文档计划 笔记时间: 2023-6-5 --- 2023-6-11 学习产出: 1.入门篇 1、JavaScript 的核心语法包含部分 基本语法标准库宿主API 基本语法:比如操作符…

【深入理解函数栈帧:探索函数调用的内部机制】

本章我们要介绍的不是数学中的函数&#xff0c;而是C语言中的函数哟&#xff01; 本章重点 了解汇编指令深刻理解函数调用过程 样例代码&#xff1a; #include <stdio.h> int MyAdd(int a, int b) {int c 0;c a b;return c; }int main() {int x 0xA;int y 0xB;int…

N皇后问题

1题目 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。…

电商--抢购总结

文章目录 业务流程业务难点技术难点技术方案技术方向具体落地客户端流控网关流控容器流控后端接口流控数据库流控 流控总结优化读取加速异步化流程处理系统扩容 压测监控 总结参考文献 业务流程 客户端抢购流程中会涉及到商品数据的读取用于商品展示&#xff0c;运营活动数据的…

Docker 概述与命令操作

一、Docker 概述 1、Docker的概念 • Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源 • Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机” • Docker 的容器技术可以在一台主机上轻松为任何应用创建一…

【4】Midjourney常用技巧

【常用技巧】 本篇主要讲述MJ的常用技巧&#xff0c;围绕着一些常用指令的使用方法展开。 【版本切换】 在使用MJ时&#xff0c;最常用的技巧之一是版本切换。你可以在输入提示后添加"--v"加上相应的数字来实现版本切换。通常我默认使用MJ 4&#xff0c;偶尔会使用…

信创办公–基于WPS的EXCEL最佳实践系列 (设置多级列表)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;设置多级列表&#xff09; 目录 应用背景操作步骤1、删除重复项2、部门绑定3、填入相关信息 应用背景 当我们在使用电子表格时&#xff0c;很多类型重复输入很麻烦&#xff0c;看起来也很复杂&#xff0c;我们就可以设置多级…

PCB材料选择与性能比较

PCB板被广泛应用于电子行业&#xff0c;作为电子设备的重要组成部分之一&#xff0c;负责连接各种电子元件。PCB板的性能直接影响着电子设备的质量和稳定性。而PCB板的材料选择则是影响PCB板性能的关键因素之一。本文将对常见PCB材料进行比较分析&#xff0c;以便于选择适合的材…

SQL-基础

SQL-小基础 1 SQL简介 英文&#xff1a;Structured Query Language&#xff0c;简称 SQL结构化查询语言&#xff0c;一门操作关系型数据库的编程语言定义操作所有关系型数据库的统一标准对于同一个需求&#xff0c;每一种数据库操作的方式可能会存在一些不一样的地方&#xff…

第9章:SpringMVC的拦截器

一、拦截器 1.拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行SpringMVC中的拦截器需要实现HandlerInterceptorSpringMVC的拦截器必须在SpringMVC的配置文件进行配置 ①创建拦截器&#xff0c;继承接口HandlerInterceptor. Component public class FirstIntercep…

Log4j2漏洞复现补丁绕过

漏洞复现 这里我一共使用了两个jdk版本 8u202的情况比较特殊&#xff0c;其实我今天凌晨在家里用的也是8u202的版本&#xff0c;失败了。今天来公司也是用的8u202版本的jdk&#xff0c;成功了。我仔细研究了两者的不同&#xff0c;我发现唯一不同的就是我公司这个idea启的proie…

Spring Cloud Feign实战

概述 Feign是一种声明式、模板化的HTTP Client&#xff0c;目标是使编写Java HTTP Client变得更简单。Feign通过使用Jersey和CXF等工具实现一个HTTP Client&#xff0c;用于构建REST或SOAP的服务。Feign还支持用户基于常用的HTTP工具包&#xff08;OkHTTP、HTTPComponents&…

全志V3S嵌入式驱动开发(开发环境再升级)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们陆陆续续开发了差不多有10个驱动&#xff0c;涉及到网口、串口、音频和视频等几个方面。但是整个开发的效率还是比较低的。每次开发调试的…

Java中查看堆里的信息

文章目录 前言1 建议无脑的做一件事2 jmp命令3 导入 hprof 文件到Visual VM 中4 查看对象属性值 前言 日常工作中&#xff0c;我们可能会遇到这样的场景&#xff1a; java项目发生了OOM&#xff1b;想知道在某种场景下&#xff0c;堆里的信息&#xff0c;从而确认一些代码功能…