Kubernetes 中 BGP 与二层网络的较量:究竟孰轻孰重?
如果你曾搭建过Kubernetes集群,就会知道网络配置是一个很容易让人深陷其中的领域。在负载均衡器、服务通告和IP管理之间,你要同时应对许多变动的因素。对于许多配置而言,使用二层(L2)网络就完全能满足需求。但边界网关协议(BGP)—— 支撑互联网运行的技术 —— 也逐渐出现在有关Kubernetes的讨论中。那么,为什么人们对在Kubernetes中使用BGP而非二层网络如此兴奋呢?

让我们详细剖析一下,看看究竟为何如此。
首先,我们这里在讨论什么?
在Kubernetes中部署服务时,目标是让这些服务能从外部访问到。外部可能指其他内部服务、外部用户,或者两者皆是。而实现这种可访问性的 “方式” 归根结底在于网络配置。默认情况下,Kubernetes对这种复杂性进行了抽象处理,但当你在裸机层面进行管理时,就需要深入了解其中细节了。
二层网络是传统的以太网式网络通信方式。它在同一广播域(基本上就是你的本地网络)内运行,并使用诸如地址解析协议(ARP)等协议将IP地址映射到MAC地址。可以把它看作是服务通告的 “本地” 选项。
另一方面,边界网关协议(BGP)是一种路由协议,旨在处理不同网络之间的通信。它不局限于在本地网络内工作,而是通告哪些IP地址或子网属于何处 —— 无论是在数据中心内部还是外部。
为何在Kubernetes中使用BGP?
本质上,BGP允许你的Kubernetes集群直接向路由器通告服务IP,从而无需依赖二层网络基于广播的通信方式。这带来了一些显著的优势:

1. 更强的可扩展性
二层网络在小型集群中运行良好,但随着环境规模的扩大,广播噪声也会随之增加。想象一下,几十甚至几百个节点相互大声发送ARP请求的场景。BGP的扩展性则要好得多,因为它不依赖广播。它只是简单地告诉路由器:“嘿,我这里有这个IP。”
2. 高可用性和故障转移
使用二层网络时,如果持有服务IP的节点出现故障,Kubernetes在重新调配资源时会有延迟。BGP则能很好地解决这个问题。当一个节点发生故障时,通往其IP的路由会从网络中撤销,流量会自动流向托管该服务的另一个节点。这个过程快速且无缝。
3. 全网集成
二层网络局限于本地网络,而BGP可以突破这一限制。它直接与上游路由器和对等设备通信,使外部设备能够准确知道将流量发送到何处。这在多数据中心或混合云配置中特别有用。
为何不一直使用二层网络呢?
在你认为BGP能解决Kubernetes所有问题之前,我们也不能完全否定二层网络。对于较小的配置或家庭实验室而言,二层网络通常更易于管理和部署。像MetalLB这样的工具可以高效处理基于二层的IP通告,对许多用户来说,这就足够了。
以下是二层网络的优势所在:
- 简单性:二层网络不需要复杂的路由器配置,也无需深入了解网络协议。
- 低资源需求:无需额外的CPU周期或内存来处理路由通告和计算。
但是,当节点数量超过几个,或者需要强大的故障转移和负载均衡功能时,二层网络就会显得力不从心。这时BGP就派上用场了。
BGP为何如此重要?
可以把BGP看作是Kubernetes网络的升级版。BGP不再依赖简单的广播机制,而是通过直接与网络基础设施进行通信,让你的集群变得更智能。这就是为什么大规模部署,尤其是在生产环境中,更倾向于使用BGP。

主要优势:
- 动态路由通告: Dynamic Route Advertising
BGP动态通告哪些节点可以处理特定IP或子网的流量。如果一个节点离线,BGP几乎能立即更新网络,确保停机时间最短。 - 等价多路径路由:Equal-Cost Multi-Path Routing(ECMP)
使用BGP,你可以将流量均匀分配到多个节点或网络路径上。这意味着更好的性能和更少的瓶颈。 - 消除单点故障
BGP让你能够构建冗余的高可用网络。通过将集群中的所有节点与路由器建立对等连接,你可以避免单个节点成为所有流量的网关。
在Kubernetes中开始使用BGP
如果你准备尝试使用BGP,像MetalLB这样的工具会让这个过程更轻松。MetalLB是裸机Kubernetes集群的负载均衡器,它同时支持二层和BGP模式。
- 在二层模式下,MetalLB使用ARP在本地网络内通告IP。这是默认设置,适用于小规模配置。
- 在BGP模式下,MetalLB与你的路由器或其他网络设备建立对等连接,以便在整个网络中通告IP。
使用MetalLB配置BGP的步骤:

- 安装MetalLB
将MetalLB的清单文件添加到你的集群中,并为BGP模式配置其configMap。 - 设置BGP对等体(Peers)
你需要配置网络路由器或交换机,使其与Kubernetes节点建立对等连接。这通常涉及共享自治系统号(ASN)并设置安全措施(如MD5认证)。 - 通告IP
一切就绪后,MetalLB将动态处理IP通告。
那么,结论是什么呢?
如果你运行的是小型Kubernetes配置或家庭实验室,通常二层网络就足够了。它简单明了,且能满足需求。但如果你管理的是更大的生产环境,或者需要处理高可用性和多节点故障转移,BGP则能提供显著优势。这不仅仅是关于 “炫酷技术”,它确实能让你的网络更智能、更可靠。
归根结底,BGP和二层网络的选择取决于规模和复杂性。对许多人来说,BGP可能有些大材小用,但对另一些人来说,它是充分发挥Kubernetes集群潜力的关键。而且,一旦你完成设置,看着网络自动处理一切,还挺神奇的。
参考:
- https://medium.com/@PlanB./bgp-vs-layer-2-in-kubernetes-whats-the-big-deal-ca4269720442
- 《kubernetes in action》
相关文章:
Kubernetes 中 BGP 与二层网络的较量:究竟孰轻孰重?
如果你曾搭建过Kubernetes集群,就会知道网络配置是一个很容易让人深陷其中的领域。在负载均衡器、服务通告和IP管理之间,你要同时应对许多变动的因素。对于许多配置而言,使用二层(L2)网络就完全能满足需求。但边界网关…...
大模型综述一镜到底(全文八万字) ——《Large Language Models: A Survey》
论文链接:https://arxiv.org/abs/2402.06196 摘要:自2022年11月ChatGPT发布以来,大语言模型(LLMs)因其在广泛的自然语言任务上的强大性能而备受关注。正如缩放定律所预测的那样,大语言模型通过在大量文本数…...
物理群晖SA6400核显直通win10虚拟机(VMM)
写在前面:请先确保你的核显驱动支持开启SR-IOV 确保你的BIOS开启了以下选项: VT-D VMX IOMMU Above 4G ResizeBAR 自行通过以下命令确认支持情况: dmesg | grep -i iommudmesg | grep DMAR分配1个虚拟vGPU:echo 1 | sudo tee /sy…...
【python】tkinter实现音乐播放器(源码+音频文件)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【python】tkinter实现音乐播放器(源码…...
ESP32开发工具介绍:Thonny——初学者的MicroPython利器
文章目录 引言什么是 Thonny?为什么选择 Thonny 开发 ESP32?1. **MicroPython 的天然支持**2. **极简的配置流程**3. **适合快速原型开发**如何用 Thonny 开发 ESP32?步骤 1:准备工作步骤 2:烧录 MicroPython 固件步骤 3:在 Thonny 中连接 ESP32步骤 4:编写并运行代码Th…...
进程的环境变量
export MUDUO_LOG_DEBUG1 ./testif (::getenv("MUDUO_LOG_TRACE"))return true;有时在程序运行前,我们希望设置环境变量。此处::表示全局命名空间。 在类 Unix 系统(如 Linux、macOS)中,环境变量并不直接存储在堆、栈或…...
Qwen2.5-Max:AI技术的新里程碑
随着人工智能(AI)技术的不断进步,全球各大科技公司都在竞相推出更强大的语言模型。近日,阿里巴巴发布了其最新的超大规模混合专家模型(MoE)——Qwen2.5-Max,这一成果不仅在多个基准测试中超越了…...
MyBatis-Plus速成指南:常用注解
Table Name: 概述: MyBatis-Plus 在确定操作的表时,由 BaseMapper的泛型决定,即实体类决定,且默认操作的表名和实体类的类名一致 问题: 如果实体类类型的类名和要操作表的表名不一致会出现什么问题?(把 us…...
Vue.js组件开发-Vue实现上传word模版打印设置自定义样式和布局
要使用 Vue 实现上传 Word 模板、打印并设置自定义样式和布局,可以借助一些工具和库来完成这个任务。 实现步骤 创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目。安装依赖:安装 docx-templates 库来处理 Word 模板,file-sav…...
Linux 压缩打包
Linux压缩打包 文章目录 Linux压缩打包压缩的意义和原理压缩的意义压缩的原理压缩与解压缩的好处 压缩打包命令.zipzip 命令用法unzip 的用法 .gzgzip 的用法gunzip 的用法 .bz2bzip2 的用法bunzip2 的用法 .xzxz 命令用法 tar 04-Linux压缩打包课后习题 压缩的意义和原理 压缩…...
RabbitMQ深度探索:前置知识
消息中间件: 消息中间件基于队列模式实现异步 / 同步传输数据作用:可以实现支撑高并发、异步解耦、流量削峰、降低耦合 传统的 HTTP 请求存在的缺点: HTTP 请求基于响应的模型,在高并发的情况下,客户端发送大量的请求…...
29.日常算法
1. 验证回文串 II 题目来源 给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。 示例 1: 输入: s “aba” 输出: true 示例 2: 输入: s “abca” 输出: true 解释: 可以删除 “c” 字符 或者 “b” …...
智慧校园平台:构建现代化教育体系的技术支撑
在当今信息技术飞速发展的时代,智慧校园平台成为了现代教育领域中的重要组成部分。智慧校园平台不仅能够提升学校的管理水平,还能提供更为个性化和高效的教学服务,从而促进学生的全面发展。 数据分析是智慧校园平台的重要组成部分。通过对学生…...
【单层神经网络】基于MXNet的线性回归实现(底层实现)
写在前面 刚开始先从普通的寻优算法开始,熟悉一下学习训练过程下面将使用梯度下降法寻优,但这大概只能是局部最优,它并不是一个十分优秀的寻优算法 整体流程 生成训练数据集(实际工程中,需要从实际对象身上采集数据…...
20250204将Ubuntu22.04的默认Dash的shell脚本更换为bash
20250204将Ubuntu22.04的默认Dash的shell脚本更换为bash 2025/2/4 23:45 百度:dash bash https://blog.csdn.net/2201_75772333/article/details/136955776 【Linux基础】dash和bash简介 Dash(Debian Almquist Shell)和 Bash(Bou…...
Golang 并发机制-3:通道(channels)机制详解
并发编程是一种创建性能优化且响应迅速的软件的强大方法。Golang(也称为 Go)通过通道(channels)这一特性,能够可靠且优雅地实现并发通信。本文将揭示通道的概念,解释其在并发编程中的作用,并提供…...
Python处理数据库:MySQL与SQLite详解
Python处理数据库:MySQL与SQLite详解 在数据处理和存储方面,数据库扮演着至关重要的角色。Python提供了多种与数据库交互的方式,其中pymysql库用于连接和操作MySQL数据库,而SQLite则是一种轻量级的嵌入式数据库,Pytho…...
可视化大屏在石油方面的应用。
可视化大屏通过整合石油工业全链条数据,构建数字孪生驱动的运营监控体系,显著提升油气勘探、开采、储运及炼化的管理效能。其技术架构依托工业物联网(IIoT)实时采集钻井参数、管道压力、储罐液位等数据,通过OPC UA协议…...
【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】从计算机基础到HTML开发:Web开发的第一步
会议官网:www.acvra.org 简介 2025年计算机视觉研究进展与应用(ACVRA 2025)将于2025年2月28-3月2日在中国广州召开,将汇聚世界各地的顶尖学者、研究人员和行业专家,聚焦计算机视觉领域的最新研究动态与应用成就。本次…...
【 AI agents】letta:2024年代理堆栈演进(中英文翻译)
The AI agents stack AI 代理堆栈 November 14, 2024 11月 14, 2024原文: The AI agents stack官方教程教程学习笔记: 【memgpt】letta 课程1/2:从头实现一个自我编辑、记忆和多步骤推理的代理Understanding the AI agents landscape 了解 AI 代理环境 Although we see a …...
Axure PR 9 旋转效果 设计交互
大家好,我是大明同学。 这期内容,我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件…...
Docker 部署教程jenkins
Docker 部署 jenkins 教程 Jenkins 官方网站 Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI)和持续交付(CD)过程。它帮助开发人员自动化构建、测试和部署应用程序,显著提高软件开发的效率和质量…...
二、CSS笔记
(一)css概述 1、定义 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离。 2、要点 怎么找到标签怎么操作标签对象(element) 3、css的四种引入方式 3.1 行内式 在标签的style属性中设定CSS样式。这种方…...
计算图 Compute Graph 和自动求导 Autograd | PyTorch 深度学习实战
前一篇文章,Tensor 基本操作5 device 管理,使用 GPU 设备 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started PyTorch 计算图和 Autograd 微积分之于机器学习Computational Graphs 计算图Autograd…...
基于 Java 开发的 MongoDB 企业级应用全解析
基于Java的MongoDB企业级应用开发实战 目录 背景与历史MongoDB的核心功能与特性企业级业务场景分析MongoDB的优缺点剖析开发环境搭建 5.1 JDK安装与配置5.2 MongoDB安装与集群配置5.3 开发工具选型 Java与MongoDB集成实战 6.1 项目依赖与驱动选择6.2 连接池与客户端配置6.3…...
构建一个测试助手Agent:提升测试效率的实践
在上一篇文章中,我们讨论了如何构建一个运维助手Agent。今天,我想分享另一个实际项目:如何构建一个测试助手Agent。这个项目源于我们一个大型互联网公司的真实需求 - 提升测试效率,保障产品质量。 从测试痛点说起 记得和测试团队讨论时的场景: 小张:每…...
ESXI虚拟机中部署docker会降低服务器性能
在 8 核 16GB 的 ESXi 虚拟机中部署 Docker 的性能影响分析 在 ESXi 虚拟机中运行 Docker 容器时,性能影响主要来自以下几个方面: 虚拟化开销:ESXi 虚拟化层和 Docker 容器化层的叠加。资源竞争:虚拟机与容器之间对 CPU、内存、…...
基于“蘑菇书”的强化学习知识点(五):条件期望
条件期望 摘要一、条件期望的定义二、条件期望的关键性质三、条件期望的直观理解四、条件期望的应用场景五、简单例子离散情况连续情况 摘要 本系列知识点讲解基于蘑菇书EasyRL中的内容进行详细的疑难点分析!具体内容请阅读蘑菇书EasyRL! 对应蘑菇书Eas…...
Linux抢占式内核:技术演进与源码解析
一、引言 Linux内核作为全球广泛使用的开源操作系统核心,其设计和实现一直是计算机科学领域的研究热点。从早期的非抢占式内核到2.6版本引入的抢占式内核,Linux在实时性和响应能力上取得了显著进步。本文将深入探讨Linux抢占式内核的引入背景、技术实现以及与非抢占式内核的…...
接入DeepSeek大模型
接入DeepSeek 下载并安装Ollamachatbox 软件配置大模型 下载并安装Ollama 下载并安装Ollama, 使用参数ollama -v查看是否安装成功。 输入命令ollama list, 可以看到已经存在4个目录了。 输入命令ollama pull deepseek-r1:1.5b, 下载deepse…...
