Kubernetes中的Calico网络

news2024/10/7 10:14:43

文章目录

  • 1 介绍
  • 2 环境部署
    • 3 IPIP模式
      • 3.1 测试环境
      • 3.2 ping包网络转发
    • 4 BGP模式
      • 4.1 测试环境
      • 4.2 ping网络转发
    • 5 两种模式对比

1 介绍

Calico网络的大概思路,即不走Overlay网络,不引入另外的网络性能损耗,而是将转发全部用三层网络的路由转发来实现。
下边实践一下Calico网络的两种模式:

  • IPIP:就是对IP的封装,通过tunnel的方式,进行路由转发
  • BGP:直接

2 环境部署

在Kuberntes环境里部署calico网络,下载calico.yaml
安装脚本如下:

#!/bin/bash
#
# wget https://projectcalico.docs.tigera.io/manifests/calico.yaml

# preload cni calico
docker pull calico/cni:v3.23.1
docker pull calico/node:v3.23.1
docker pull calico/kube-controllers:v3.23.1

kubectl apply -f calico.yaml

20230409142459

3 IPIP模式

3.1 测试环境

为了模拟两个POD跨node通信,我们创建两个pod,分别部署在master和node节点。下边以两个nginx的pod为例:
在master节点上部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-master-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        kubernetes.io/hostname: baihl-master
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
      tolerations: 
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
        operator: Exists

Pod中增加容忍master节点的node-role.kubernetes.io/master:NoSchedule 污点,否则Pod无法在master节点上运行。

node节点上也部署一下nginx,记得把tolerations删掉。

查看两个pod的执行情况:

20230409143036
两个pod分别运行在mster和node节点上,ip地址分别为10.10.40.129和10.10.194.134。

在master节点上的pod1中执行ping node节点的pod2:

20230409143451
网络互通性没有问题。

3.2 ping包网络转发

在master节点上的pod1怎么ping通的node节点上的pod2,分析整个网络转发过程,可以从头开始看,先看ping是怎么从pod1中出去的,在pod1中查看路由信息:

20230409143833
根据路由表信息,ping 10.10.194.134,应该匹配到第一条路由,去往任何网络都先到网关169.254.1.1,从eth0网卡出去。

然后我们看下master节点上的路由信息:

20230409144135
当数据包到达master节点时,会匹配到红色框住的路由,去往10.10.194.192/26网段的数据包,都走到tunl0上,并且网关是192.168.170.138(node节点IP)。所以数据包就通过tunl0到达了node节点。

数据包到达了node节点,看下node节点的路由信息:

20230409144703
数据包到达node节点后会匹配上上边红线框的路由,到达10.10.194.134的数据包都走calie1e27109044。
calie1e27109044是veth pair的一端,另一端就是10.10.194.134的pod2,可以验证下,在pod2中使用ethtool命令查看:
20230409150453
在pod2中执行ethtool命令报错,原因应该是pod中没有此命令,或者执行权限不够。下边使用nsenter命令实现在主机上调试容器。步骤如下:

  1. 首先获取pod所在容器的id

20230409150751

  1. 根据容器ID,查看容器进程

20230409150912
注意:因为容器是运行在node节点上的,要在node节点上执行以上命令,可以看到获取到的PID为535135。

  1. 使用nsenter命令进入进程的名字空间
root@baihl-node:/home/baihl# nsenter -t 535135 -n
root@baihl-node:/home/baihl# ethtool -S eth0
NIC statistics:
     peer_ifindex: 71

可以看到,pod2中eth0网卡的另一端设备号是71,在node节点上查看编号为71的网卡就是calie1e27109044:
20230409151347
到此为止,在node上的路由表明,发送到calie1e27109044的数据其实就是发送到pod2网卡中,ping包就到达了目的地。

下边是整个网络的结构图:

20230409153955

在master节点进行抓包分析,ping的数据包:
20230409153349
打开上边的一个ICMP包,可以看到数据包有5层,其中有两个IP层,分别是pod之间的网络和主机之间的网络封装。

4 BGP模式

4.1 测试环境

在安装calico网络时,默认安装是IPIP网络。calico.yaml文件中,将CALICO_IPV4POOL_IPIP的值修改成 “off”,就能够替换成BGP网络。

- name: CALICO_IPV4POOL_IPIP
  value: "off"

修改完成后重新部署。
使用BGP模式后,首先变化是节点上不再有tunl0设备:

20230409155716

同样重新在master和node节点部署两个pod。如下:

20230409155352
两个pod的ip地址分别为10.10.40.129和10.10.194.128。
同样的操作在pod1 10.10.40.129中ping pod2的10.10.194.128:
20230409155514

4.2 ping网络转发

pod1中ping pod2首先pod1中的路由表:

20230409155805

根据pod1中的路由信息,ping包通过eth0网卡到master节点。master节点上根据路由信息,到10.10.194.128的数据包匹配到下边红框中的路由,直接发送到了192.168.170.138(node节点),从ens33网卡出去。

20230409160033
node节点上的路由信息如下:

20230409160227
ping包到达node节点,匹配上红框中的路由信息,直接发送到了pod2的veth pair的一端,数据就直接到了pod2的网卡。
如果ping包回应pod1的 10.10.40.129,则在node节点上匹配到:

20230409160444
直接到达了master节点192.168.170.137,后边的流程不再赘述。

同样下表在master上抓包看一下:

20230409160906

通过上边的流程发现,BGP的模式不再基于IPIP进行封装,也没有了tunl0设备做转发,而是通过路由表,直接转到了节点的网卡上转发出去。

BGP模式下的整个网络的结构图:

20230409161220

5 两种模式对比

IPIP网络:需要tunl0设备封装数据,形成隧道,承载流量,需要tunl0设备封装效率略低。
BGP模式:使用路由引导流量转发,比IPIP效率更高。

本文参考:https://www.cnblogs.com/goldsunshine/p/10701242.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPSS【实践 01】Developing a Greenplum Streaming Server Client 自定义GPSS客户端开发实例

自定义GPSS客户端开发流程1.GPSS是什么2.架构3.组件下载安装4.自定义客户端4.1 GPSS Batch Data API Service Definition4.2 Setting up a Java Development Environment4.3 Generating the Batch Data API Client Classes4.4 Coding the GPSS Batch Data Client4.4.1 Connect …

【论文笔记】Attention Augmented Convolutional Networks(ICCV 2019 入选文章)

目录 一、摘要 二、介绍 三、相关工作 卷积网络Convolutional networks: 网络中注意力机制Attention mechanisms in networks: 四、方法 1. 图像的自注意力Self-attention over images: 二维位置嵌入Two-dimensional Positional Enco…

redis 第一章

开始学习redis 之旅吧 关于redis 的介绍 redis 是一个开源的软件,可以存储结构化的数据在内存中,像内存数据库,缓存、消息中间件、流处理引擎。 redis 提供的数据结构像strings, hashes, lists, sets, sorted sets 。Redis具有内置复制、Lua…

《花雕学AI》13:早出对策,积极应对ChatGPT带来的一系列风险和挑战

ChatGPT是一款能和人类聊天的机器人,它可以学习和理解人类语言,也可以帮人们做一些工作,比如翻译、写文章、写代码等。ChatGPT很强大,让很多人感兴趣,也让很多人担心。 使用ChatGPT有一些风险,比如数据的质…

Pytorch 张量操作 Python切片操作

目录一维张量定义一维实例操作二维张量操作张量拼接-注意需要拼接的维度一定要相同广播机制更高维的演示总结YOLOv5 Focus样例参考梳理一下Pytorch的张量切片操作一维张量定义 一维向量的操作其实很像numpy一维数组,基本定义如下: 1.默认步长为1 2.起始…

HotSpot经典垃圾收集器

虽然垃圾收集器的技术在不断进步,但直到现在还没最好的收集器出现,更加不存在“万能”的收集器,所以我们选择的只是对具体应用最合适的收集器。 图 HotSpot中的垃圾收集器,连线表示可搭配使用 1 Serial收集器 是最基础、历史最悠…

第08章_面向对象编程(高级)

第08章_面向对象编程(高级) 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 关键字:static 回顾类中的实例变量(即非static的成员变量) c…

linux文件类型和根目录结构

目录 一、Linux文件类型 二、Linux系统的目录结构 1. FHS 2. 路径以及工作目录 (1)路径 (2)工作目录 一、Linux文件类型 使用ls -l命令查看到的第一个字符文件类型说明-普通文件类似于Windows的记事本d目录文件类似于Windo…

【GPT4】GPT4 创作郭德纲姜昆相声作品的比较研究

欢迎关注【youcans的 AIGC 学习笔记】原创作品 说明:本文附录内容由 youcans 与 GPT-4 共同创作。 【GPT4】GPT4 创作郭德纲姜昆相声作品的比较研究研究总结0. 背景1. 对 GPT4 创作的第 1 段相声的分析2. 对GPT4 创作的第 2 段相声的分析3. 对GPT4 创作的第 3 段相…

Window常用命令

一、快捷键 1、自带快捷键 序号快捷键作用1windowsGXBOX录屏2cmd >osk屏幕键盘3cmd >calc计算器4cmd >mrt恶意软件删除工具 2、浏览器快捷键 序号快捷键作用1Alt P浏览器图片下载(来自油猴脚本) 二、其他功能 1、解决端口占用 第一步&…

Linux安装单细胞分析软件copykat

Linux安装单细胞分析软件copykat 测试环境 Linux centos 7R 4.1.2minconda3天意云24C192GB安装步骤 新建环境 conda activate copykatconda install r-base4.1.2 安装基础软件 checkPkg <- function(pkg){return(requireNamespace(pkg, quietly TRUE))}if(!checkPkg("…

类的加载过程-过程二:Linking阶段

链接过程之验证阶段(Verification) 当类加载到系统后&#xff0c;就开始链接操作&#xff0c;验证是链接操作的第一步。 它的目的是保证加载的字节码是合法、合理并符合规范的。 验证的步骤比较复杂&#xff0c;实际要验证的项目也很繁多&#xff0c;大体上Java虚拟机需要做…

基于stable diffusion的艺术操作

下面是作者基于stable diffusion的艺术操作 得益于人工智能的强大技术 以下所有的图 绝对是整体星球上唯一的图 现在人工智能越来越强大&#xff0c;感觉将来最有可能取代的就是摄影师、中低级的程序员、UI设计师、数据分析师等&#xff0c;人们未来更多从事的职业应该是快速…

机器学习 01

目录 一、机器学习 二、机器学习工作流程 2.1 获取数据 2.2 数据集 2.2.1 数据类型构成 2.2.2 数据分割 2.3 数据基本处理 2.4 特征工程 2.4.1什么是特征工程 2.4.2 为什么需要特征工程(Feature Engineering) 2.4.3 特征工程内容 2.5 机器学习 2.6 模型评估 2.7 …

【消息队列】细说Kafka消费者的分区分配和重平衡

消费方式 我们直到在性能设计中异步模式&#xff0c;一般要么是采用pull&#xff0c;要么采用push。而两种方式各有优缺点。 pull &#xff1a;说白了就是通过消费端进行主动拉去数据&#xff0c;会根据自身系统处理能力去获取消息&#xff0c;上有Broker系统无需关注消费端的…

Windows GPU版本的深度学习环境安装

本文记录了cuda、cuDNN的安装配置。 参考文章&#xff1a; cuda-installation-guide-microsoft-windows 12.1 documentation Installation Guide :: NVIDIA cuDNN Documentation 一、cuda安装 注意事项&#xff1a; 1、cuda安装最重要的是查看自己应该安装的版本。 表格…

Java数组打印的几种方式

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

独立看门狗(IWDG)实验

独立看门狗简介 单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环&#xff0c; 看门狗电路就是为了避免这种情况的发生 。IWDG&#xff08;Independent watchdog&#xff09;独立看门狗&#xff0c;可以用来检测并解决由于软件错误导致的故障&#xff0c;当计数器…

使用 ArcGIS Pro 进行土地利用分类的机器学习和深度学习

随着技术进步&#xff0c;尤其是地理信息系统 (GIS)工具的进步&#xff0c;可以更有效地对土地利用进行分类。分类的使用可用于识别植被覆盖变化、非法采矿区和植被抑制区域&#xff0c;这些只是土地利用分类的众多示例中的一部分。 分类的一大困难是确定要解决的问题的级别。…

MongoDB 聚合管道中使用数组表达式运算符断言数组($isArray)

数组表达式运算符主要用于文档中数组的操作&#xff0c;接上一篇&#xff1a; MongoDB 聚合管道中使用数组表达式运算符&#xff08;$concatArrays合并数组&#xff09;https://blog.csdn.net/m1729339749/article/details/130162048本篇我们主要介绍数组表达式运算符中用于断…