【K8S系列】深入解析k8s 网络插件—kube-router
序言
做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。
文章标记颜色说明:
- 黄色:重要标题
- 红色:用来标记结论
- 绿色:用来标记论点
- 蓝色:用来标记论点
在现代容器化应用程序的世界中,容器编排平台Kubernetes已经成为标准。Kubernetes是一个分布式系统,为了支持复杂的应用和微服务架构,网络是Kubernetes集群中不可或缺的一部分。
能够管理和编排容器化应用程序,其中,监控是一个非常重要的方面,可以帮助用户了解集群的健康状态、性能和可用性。
在本文中,将详细介绍Kubernetes网络插件中的【kube-router】插件。
希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流
专栏介绍
这是这篇文章所在的专栏,欢迎订阅:【深入解析k8s】专栏
简单介绍一下这个专栏要做的事:
- 主要是深入解析每个知识点,帮助大家完全掌握k8s,以下是已更新的章节
- 这是专栏介绍文章地址:【深入解析K8S专栏介绍】
1 基础介绍
在Kubernetes中,网络插件也称为容器网络接口(Container Network Interface,CNI)插件,用于实现容器之间的通信和网络连接。以下是一些常见的Kubernetes网络插件:
Flannel:Flannel是一个流行的CNI插件,它使用虚拟网络覆盖技术(overlay network)来连接不同节点上的容器。Flannel支持多种后端驱动,如VXLAN、UDP、Host-GW等。
Calico:Calico是一个开源的网络和安全解决方案,它使用BGP协议来实现容器之间的路由。Calico支持灵活的网络策略和安全规则,可用于大规模部署。
Weave Net:Weave Net是一个轻量级的CNI插件,通过创建虚拟网络设备和网络代理来连接不同节点上的容器。Weave Net支持overlay模式和直连模式,具有灵活性。
Cilium:Cilium是面向Kubernetes的高性能网络和安全解决方案,利用eBPF(Extended Berkeley Packet Filter)技术来提供快速的容器间通信和网络策略实施。
Canal:Canal是一个综合性的CNI插件,结合了Calico和Flannel的功能。它可以使用Flannel提供overlay网络,同时使用Calico的网络策略和安全性功能。
Antrea:Antrea是一个基于Open vSwitch的CNI插件,专为Kubernetes网络和安全性而设计。它提供了高性能的网络连接和网络策略功能。
kube-router:kube-router是一个开源的CNI插件,它结合了网络和服务代理功能。它支持BGP和IPIP协议,并具有负载均衡的特性。
这些是Kubernetes网络插件中的一些常见选项,每个插件都有其特定的优势和适用场景。选择合适的网络插件取决于你的需求、网络拓扑和性能要求等因素。
同时,Kubernetes社区也在不断发展和推出新的网络插件,以满足不断变化的需求。
2 kube-router 介绍
kube-router是一个开源的Kubernetes网络插件,旨在提供高性能、低延迟的网络服务。它采用了三层路由(Layer 3 Routing)的方式,以实现Kubernetes集群中的网络通信。
2.1 核心概念
kube-router的核心概念包括:
BGP路由器:kube-router使用BGP(Border Gateway Protocol)来实现路由,这意味着它能够动态地适应集群中的节点变化。每个节点都被配置为BGP路由器,它们共享网络信息,确保容器之间的通信能够高效、可靠地进行。
IPVS负载均衡:kube-router使用IPVS(IP Virtual Server)来实现负载均衡,以确保流量在容器之间均匀分配。这提供了高性能和可扩展性,特别适用于大规模Kubernetes集群。
网络策略:kube-router支持Kubernetes网络策略,允许管理员定义和控制哪些容器可以相互通信。这增强了集群的安全性。
2.2 三层路由
kube-router采用三层路由(Layer 3 Routing)的方式来实现Kubernetes集群中的网络通信。这种方式是与传统的二层(Layer 2)网络模型不同的,具有一些独特的优势和特征。下面详细介绍kube-router的三层路由方式:
IP层路由:kube-router的核心思想是在IP层面上进行路由。在Kubernetes中,每个容器都分配了一个唯一的IP地址,这使得在IP层进行路由变得更加直观和高效。kube-router利用这些IP地址来实现容器之间的通信和流量控制。
BGP(Border Gateway Protocol)路由协议:kube-router使用BGP作为其主要路由协议。BGP是一种广泛用于互联网路由的协议,它具有高度可扩展性和弹性。每个Kubernetes节点都配置为一个BGP路由器,它们通过BGP协议来交换路由信息。这意味着当新的节点加入集群或现有节点离开集群时,路由信息会自动更新,无需手动配置路由表。
动态路由:由于BGP的特性,kube-router实现了动态路由。这意味着当新的容器创建或删除时,路由表会相应地更新,以反映集群中的实际网络拓扑。这种自动化的路由管理使得Kubernetes集群的维护和扩展变得更加容易,无需手动干预。
高性能和负载均衡:kube-router利用Linux内核中的IPVS(IP Virtual Server)来实现负载均衡。IPVS是一种高性能的负载均衡技术,能够有效地将流量分发到多个容器之间,从而提供了高吞吐量和低延迟的网络性能。这对于处理大量的容器流量非常重要,特别是在大规模Kubernetes集群中。
网络策略支持:kube-router还支持Kubernetes网络策略。网络策略允许管理员定义哪些容器可以与哪些其他容器通信,以及如何允许或拒绝流量。这提供了额外的安全性和细粒度的流量控制,以满足不同应用程序的需求。
总之,kube-router的三层路由方式是一种灵活且高性能的方法,用于管理Kubernetes集群的网络通信。
它利用IP层路由、BGP协议、动态路由和负载均衡等技术,为容器提供了可靠的网络连接,并具有良好的扩展性和自动化特性,使得管理和维护Kubernetes网络变得更加容易和可靠。
2.3 优缺点
优点
高性能:kube-router采用了IPVS和BGP等高性能技术,因此具有出色的网络性能,适用于大规模Kubernetes集群。
可扩展性:由于使用了BGP路由协议,kube-router在节点的动态扩展和缩减方面表现出色,无需手动配置路由信息。
网络策略支持:kube-router支持Kubernetes网络策略,允许细粒度的流量控制,提高了安全性。
开源社区支持:kube-router是一个开源项目,拥有活跃的社区,可以获得及时的技术支持和更新。
缺点
复杂性:kube-router的配置和部署相对较复杂,需要一定的Kubernetes网络知识。
维护成本:由于其高度自动化的特性,kube-router需要专业的维护,以确保顺畅运行。
2.4 使用场景
kube-router适用于需要高性能和可扩展性的Kubernetes集群,特别是那些运行大量容器的生产环境。以下是一些适用场景:
大规模集群:对于大型Kubernetes集群,kube-router的性能和自动化特性非常有用,可以管理大量容器的网络通信。
多云跨数据中心部署:kube-router支持多云和跨数据中心部署,使得跨多个地理位置的Kubernetes集群之间的通信变得简单。
安全敏感环境:由于支持Kubernetes网络策略,kube-router适用于需要强化网络安全的环境,可通过网络策略精确控制流量。
3 安装步骤
安装kube-router需要一定的Kubernetes集群知识,以下是简要的安装步骤:
创建Kubernetes集群
安装kube-router
配置BGP路由器
启用网络策略
验证安装
步骤 1:创建Kubernetes集群
可以选择不同的方法来创建Kubernetes集群,下面是使用kubeadm的示例:
-
安装kubeadm、kubelet和kubectl工具,以及Docker(或其他容器运行时)。
-
初始化Kubernetes控制平面节点(Master节点):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
安装网络插件,这里将使用kube-router。但在这一步,只需安装kubeadm和kubelet,并不需要具体的网络插件。
步骤 2:安装kube-router
接下来,您需要将kube-router安装到Kubernetes集群中。通常,您可以使用Helm Chart或YAML清单文件来完成此操作。以下是使用YAML清单文件的示例:
1 从kube-router的GitHub仓库获取最新的清单文件:
git clone https://github.com/cloudnativelabs/kube-router.git
cd kube-router
2 部署kube-router到集群中:
kubectl apply -f kube-router-all-in-one.yaml
这将会创建kube-router的Pods和相关的Service。
步骤 3:配置BGP路由器
kube-router默认使用BGP路由协议来进行路由管理。需要配置BGP路由器的相关信息,包括AS号等。这些配置信息通常包含在YAML清单文件中,以供kube-router使用。
可以编辑kube-router的ConfigMap,将BGP路由器的配置信息添加到其中。例如,打开ConfigMap文件:
kubectl edit configmap kube-router-config -n kube-system
然后,添加或修改BGP配置信息,如下所示:
apiVersion: v1
data:kubeconfig: |<kubeconfig-data>bgpConfig: |<bgp-config-data>
步骤 4:启用网络策略(可选)
如果需要启用Kubernetes网络策略,可以创建网络策略对象。以下是一个简单的示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-internal-traffic
spec:podSelector:matchLabels:role: internalingress:- from:- podSelector:matchLabels:role: internal
使用kubectl apply将网络策略对象应用到集群中。
步骤 5:验证安装
最后,使用以下命令验证kube-router的安装是否成功,并确保它正常运行:
kubectl get pods -n kube-system
应该能够看到kube-router的Pods处于运行状态。如果一切正常,kube-router现在已经成功地集成到Kubernetes集群中,负责网络路由和通信。
4 拓展
什么是BGP
Border Gateway Protocol(BGP),中文译为边界网关协议,是互联网上广泛使用的一种路由协议。
BGP是一种路径矢量协议,主要用于在不同自治系统(AS,Autonomous System)之间交换路由信息,以决定数据包应该如何跨越互联网传输。以下是关于BGP路由协议的详细介绍:
1. 自治系统(AS):
- 一个自治系统是一组网络、路由器和IP地址的集合,它们被视为一个单一的管理单位。AS内的路由器使用内部协议来决定如何路由内部流量,而BGP主要用于AS之间的路由决策。
2. BGP路由器:
- BGP路由器是配置了BGP协议的网络设备,用于交换路由信息并决定最佳路径。通常,大型互联网服务提供商和大型企业网络会运行BGP路由器。
3. 路由信息交换:
- BGP路由器之间通过TCP连接进行路由信息的交换。BGP路由器会定期向相邻路由器发送路由更新信息,这包括可达的IP前缀及其相关属性。
4. BGP路径选择:
- BGP使用一种复杂的路径选择算法来确定数据包的最佳路径。它考虑了多种因素,包括AS路径长度、前缀属性(如前缀长度、AS-PATH、NEXT-HOP等),以及各种策略、筛选条件等。
5. BGP属性:
-
BGP路由表中的每个路由都附带一组属性,用于描述该路由的特性。常见的BGP属性包括:
- AS-PATH:描述了数据包从源AS到目标AS的路径。
- NEXT-HOP:指示数据包下一跳的IP地址。
- 前缀长度:指定了可达前缀的子网掩码长度。
- LOCAL-PREF:用于在AS内部选择最佳路径。
- MED(Multi-Exit Discriminator):用于在同一AS的不同出口路由之间选择路径。
6. BGP策略:
- BGP允许网络管理员定义各种策略来控制路由信息的传播和选择。这些策略可以用于路由筛选、路由聚合、路由重分发等操作,以满足网络的特定需求。
7. BGP的用途:
- BGP主要用于连接不同自治系统,因此在互联网中起到关键作用。它允许不同的网络提供商协同工作,确保全球互联网的可达性和稳定性。
8. BGP的安全性:
- 由于BGP协议的开放性,它容易受到不同类型的攻击,如路由劫持和路由欺骗。为了增强BGP的安全性,网络社区正在积极推动BGP的改进和增强安全机制,如BGPsec(BGP Security)。
总之,BGP是互联网中最重要的路由协议之一,用于实现不同自治系统之间的路由交换和路径选择。
它的复杂性和灵活性使其成为互联网的骨干,并且需要经验丰富的网络管理员来配置和维护。
BGP的稳定性和可靠性对于互联网的正常运行至关重要,因此其安全性也备受关注和改进。
5 结论
kube-router是一个高性能、可扩展的Kubernetes网络插件,适用于大规模和安全敏感的生产环境。
虽然它的配置和部署可能有一定的复杂性,但它提供了出色的性能和自动化特性,可以大大简化Kubernetes集群的网络管理。
在选择网络插件时,考虑集群规模和性能需求,kube-router可能是一个非常好的选择。
相关文章:
【K8S系列】深入解析k8s 网络插件—kube-router
序言 做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 在现代容器化应用程序的世界中…...
Flutter的Platform介绍-跨平台开发,如何根据不同平台创建不同UI和行为
文章目录 Flutter跨平台概念介绍跨平台开发平台相关性Platform ChannelPlatform-specific UIPlatform Widgets 如何判断当前是什么平台实例 Platform 类介绍获取当前平台的名称检查当前平台其他属性 利用flutter设计跨Android和IOS平台应用的技巧1. 遵循平台的设计准则2. 使用平…...
gitlab docker部署,备份,恢复
本次安装在CentOS7下进行 1、安装yum 检查是否已经安装yum yum --version如果未安装 sudo yum install -y yum-utils添加镜像源: 国外镜像源:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo阿里镜像源&am…...
腾讯云/阿里云国际站代理:阿里云、华为云和腾讯云“大展拳脚”,与国际巨头未来竞争焦点是AI计算?
国内云计算市场重新掀起的价格战,腾讯云国际站代理让竞争本就内卷的市场陷入白热化,中国云厂商深耕东南亚的意愿变强。2020年之后,上下游企业与中国云厂商抱团出海趋势明显。东软集团、用友网络等A股上市公司也在走向东南亚。 东南亚市场蛋糕…...
基于Java+SpringBoot+Vue企业OA管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
Java架构师系统架构设计性能评估
目录 1 导论2 架构评估基础系统性能衡量的基本指标2.1 系统性能的指标2.2 数据库指标2.3 并发用户数2.4 网络延迟2.4 系统吞吐量2.5 资源性能指标3 架构评估基础服务端性能测试3.1基准测试3.2 负载测试3.3 压力测试3.4 疲劳强度测试3.5 容量测试1 导论 本章的主要内容是掌握架构…...
Android可滑动的分时图以及常用动画
先看一下效果: 自定义View 其中顶部是模仿的股票数据分时图,以前也写过详细的文章传送门,只不过不支持左右滑动,这款是在那个基础上的修改 在说一下分时图的思路吧: 可以看作是一条条相连的直线首尾相接,…...
软考系统架构师常考知识点整理(含案例分析、论文历年题目总结)
系统架构师常考知识点总结 计算机组成原理 1、同步/异步区分 CPU访问内存通常是同步方式 CPU与I/O接口交换信息通常是同步方式 CPU与PCI总线交换信息通常是同步方式 I/O接口与打印机交换信息则通常采用基于缓存池的异步方式, 2、双工通信方式 对端到端通信总线的信号传…...
Netty通信在中间件组件中的广泛使用-Dubbo3举例
Netty是一个高性能异步IO通信框架,封装了NIO,对各种bug做了很好的优化解决。所以很多中间件底层的通信都会使用Netty,比如说:Dubbo3,rocketmq,ElasticSearch等。 比方说,我们使用dubbo作为rpc跨…...
基于Java的在线拍卖系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技…...
Maven Pom
目录 Pom 父(Super)POM POM 标签大全详解 POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖…...
【运维日常】mongodb 集群生产实践
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
【MATLAB源码-第45期】基于matlab的16APSK调制解调仿真,使用卷积编码软判决。
操作环境: MATLAB 2022a 1、算法描述 1. 16APSK调制解调 16APSK (16-ary Amplitude Phase Shift Keying) 是一种相位调制技术,其基本思想是在恒定幅度的条件下,改变信号的相位,从而传送信息。 - 调制:在16APSK中&am…...
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 八)
其他状态管理概述 除了前面章节提到的组件状态管理和应用状态管理,ArkTS还提供了Watch和$$来为开发者提供更多功能: Watch用于监听状态变量的变化。$$运算符:给内置组件提供TS变量的引用,使得TS变量和内置组件的内部状态保持同步…...
SQL按照id集合顺序返回
SQL按照id集合顺序返回 一、需求二、SQL三、MyBatis编写四、FIELD函数五、环境 一、需求 sql这样的 SELECT id, name FROM is_parent_viewshop WHERE id IN (2350, 2396, 3768, 3718, 3692) 按照id顺序返回,sql如何写 二、SQL SELECT id, name FROM is_parent_vi…...
04训练——基于YOLO V8的自定义数据集训练——在windows环境下使用pycharm做训练-1总体步骤
在上文中,笔者介绍了使用google公司提供的免费GPU资源colab来对大量的自定义数据集进行模型训练。该方法虽然简单好用,但是存在以下几方面的短板问题: 一是需要通过虚拟服务器做为跳板机来访问,总体操作起来非常繁杂。 二是需要将大量的数据上传缓慢,管理和使用非常不友…...
iview表格 异步修改列数据卡顿 滚动条失效
使用表格row-key属性 将row-key属性设置为true <Table ref"table" border :row-key"true" :columns"tableColumns" :loading"loading":data"tableData"></Table>...
【Linux】常驻内核和虚拟内存的区别
常驻内存和虚拟内存是计算机内存管理的两个概念。 常驻内存指的是应用程序在运行时,所占用的内存空间不会随着应用程序的启动和关闭而有所变化,这种内存是常驻在计算机的物理内存中的。即使我们关闭了电脑,这些程序也会保持在内存中…...
Qt 串口接收包含汉字的数据,汉字乱码
通过串口显示打印的调试信息时,接受的中文无法识别,全部乱码,解决办法: QByteArray array m_serial->readAll(); QString array QString::fromLocal8Bit(arr)...
设计模式 - 结构型模式考点篇:适配器模式(类适配器、对象适配器、接口适配器)
目录 一、适配器模式 一句话概括结构式模式 1.1、适配器模式概述 1.2、案例 1.2.1、类适配器模式实现案例 1.2.2、对象适配器 1.2.3、接口适配器 1.3、优缺点(对象适配器模式) 1.4、应用场景 一、适配器模式 一句话概括结构式模式 教你将类和对…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
