K8s的网络——underLay和overLay网络

0. 基础知识

1)网络7层基础知识

在网络7层协议基础里,

  • 第一层物理链路;
  • 第二层是数据链路层,在第一层的基础上引入MAC地址做数据转发。MAC地址在局域网内具有唯一性,主机A发送数据时,会向局域网内进行广播,每个主机根据mac地址自动匹配。网桥、交换机都是工作在数据链路层。由MAC地址构建的网络可以叫以太网。在网络中接入设备数据剧增后,要维护一张MAC地址表变得非常巨大,无法得以实施,引出了网络层。
  • 第三层是网络层,IP地址模型。消息传递的时候,先通过IP确定两台主机是不是在同一个子网,如果在同一个子网,就直接交给交换机通过MAC地址通信;如果不是同一个子网,则将报文发送网关地址。发送给网关前,会通过ARP协议获取网关的MAC地址,主机根据MAC封装以太帧发送。
  • IP数据包经过路由器后,一般是不会修改IP的(除非NAT转换),但是MAC地址会发生变化。 每经过一个路由器,MAC发生一次变化。

2)多台主机公用一个公网IP是怎么定位的

一台主机发送信息时,网关有一套路由规则将目标IP解析到一个端口中,当源IP要出局域网时,要通过NAT协议转换为公网IP,到达目的网关时,目的网关通过NAT将目标IP变成当前局域网IP。

3)LAN,VLAN和VXLAN

  • LAN 表示 Local Area Network,本地局域网。一个 LAN 中的所有成员都会收到任意一个成员发出的广播包。LAN变大后,同步广播信息会造成链路冲突堵塞,所以交换机将大的LAN切分成多个小的逻辑LAN。
  • VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间可以直接通信,而VLAN间则不能直接互通。交换机用于实现VLAN;每个交换机端口都分配有一个VLAN。
  • VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。
  • 为什么要VXLAN:
    • 突破VLAN ID数量限制。

    • 突破TOR交换机MAC地址表限制:之前TOR(Top Of Rack)交换机的一个端口连接一个物理主机对应一个MAC地址,但现在交换机的一个端口虽然还是连接一个物理主机但是可能进而连接几十个甚至上百个虚拟机和相应数量的MAC地址。

    • 突破单条网络链路。VxLAN通过UDP封装,在三层网络上传输,可以利用一些基于三层的协议来实现多条线路共同工作(active-active),以实现负载均衡,例如ECMP,LACP。

4)网桥

网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,它能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器。

当使用网桥连接两段LAN时,网桥对来自网段1的MAC 帧,首先要检查其终点地址。如果该帧是发往网段1 上某一站的,网桥则不将帧转发到网段2 ,而将其滤除;如果该帧是发往网段2 上某一站的,网桥则将它转发到网段2。

网桥的缺点:

  • 网桥对接收的帧要先存储和查找站表,然后转发,这就增加了时延。
  • 网络上负荷很重时,可能因网桥缓冲区的存储空间不够而发生溢出,以致产生帧丢失的现象。
  • 具有不同MAC子层的网段桥接在一起时,网桥在转发一个帧之前,必须修改帧的某些字段的内容,以适合另一个MAC子层的要求,增加时延
  • 网桥只适合于用户数不太多(不超过几百个)和信息量不太大的局域网,否则有时会产生较大的广播风暴。

1.Underlay网络

underlay网络是底层物理网络,负责网络之间的数据包传递。

在underlay网络中,各个设备之间必须通过路由协议来保证IP之间的连接性。underlay网络可以是2层,也可以是三层网络。2层网络通常应用于以太网,通过VLAN进行划分。三层网络在同一个自治域使用OSPF、IS-IS等协议进行路由控制,各个域之间采用BGP等协议做路由传递和互联。

underlay在一个较好的可用环境网络场景下适用,也有一些问题:

  • 由于硬件根据目的IP进行转发,传输路径依赖是非严重;
  • 新增或变更网络,重新配置十分耗时;
  • 网络切片和分段实现负载,无法做到网络资源按需分配;
  • 多路径转发依赖路由,无法融合多个底层网络来实现负载;

2.Overlay网络

为了摆脱underlay网络的限制,采用网络虚拟化技术,在underlay网络上构建虚拟的overlay网络。

互相连接的overlay网络设备之间建立隧道,数据包传输出去时,设备为数据包添加新的IP头好隧道头部,并且屏蔽掉内层IP头部,数据包根据新的IP头部进行转发。当数据包到达目的设备后,外部的IP都和隧道头被丢弃,恢复出原始的数据包。

overlay网络协议标准包括:VXLAN,NVGRE,SST,NVO3,EVPN等。

对比项

Underlay网络

Overlay网络

数据传输

通过网络设备例如路由器、交换机进行传输

沿着节点间的虚拟链路进行传输

包封装和开销

发生在网络的二层和三层

需要跨源和目的封装数据包,产生额外的开销

报文控制

面向硬件

面向软件

部署时间

上线新服务涉及大量配置,耗时多

只需更改虚拟网络中的拓扑结构,可快速部署

多路径转发

因为可扩展性低,所以需要使用多路径转发,而这会产生更多的开销和网络复杂度

支持虚拟网络内的多路径转发

扩展性

底层网络一旦搭建好,新增设备较为困难,可扩展性差

扩展性强,例如VLAN最多可支持4096个标识符,而VXLAN则提供多达1600万个标识符

协议

以太网交换、VLAN、路由协议(OSPF、IS-IS、BGP等)

VXLAN、NVGRE、SST、GRE、NVO3、EVPN

多租户管理

需要使用基于NAT或者VRF的隔离,这在大型网络中是个巨大的挑战

能够管理多个租户之间的重叠IP地址

overlay网络的缺点:

  • 性能问题:Overlay网络使用VXLAN协议实现跨主机通信,会增加数据包的传输延迟,对网络性能有一定影响。
  • 配置复杂:Overlay网络的配置比较复杂,需要进行多个配置步骤。
  • 容易出错:由于Overlay网络的配置比较复杂。

3. docker 构建overlay网络

  1. TCP 端口 2377,用来集群管理相关的通信;
  2. TCP 和 UDP 端口 7946,用来进行节点之间的通信;
  3. UDP 端口 4789,用来进行进行 overlay 网络上的数据传输。

-- 在主节点初始化docker swarm

docker swarm init

-- 在从节点加入swarm集群

    docker swarm join --token SWMTKN-1-3e3cne19my7mcmtv8u3v74j0pvyqbyk0yt2rzp48rozftoobh3-0h0pbf3bxxkqeqk9axfqetfux 172.30.171.123:2377

-- 在任意节点查看swarm

docker info

-- 在主节点创建一个overlay网络

docker network create overlaynet1 --driver overlay --subnet 172.45.0.0/16 --gateway 172.45.0.1

-- 查看swarm群节点

docker node ls

如果创建swarm集群服务,没有指定网络,将会默认连接到ingress网络。建议可以为每个系统的工作应用单独创建overlay网络。

-- 创建docker容器服务测试

docker service create -t --replicas 2 --network overlaynet1 --name alpine-overlay2 alpine:latest

-- 在主节点可以查看

-- 在从节点,可以看到有容器启动起来

-- 删除服务和删除网络

docker service rm my-nginx

docker network rm nginx-net

4. K8s的网络通信模式

1)overlay 网络&underlay 网络

  • overlay网络
    • flannel vxlan, calico bgp, calico vxlan
    • 将pod地址信息封装在宿主机地址信息内,可以实现跨node子网通信。
  • underlay网络
    • calico 
    • 为pod启动单独的虚拟机网络,透传给宿主机的物理网络。

2)K8s网络组件

  • flannel 组件
    • flannel的基本原理是:借助etcd维护网络IP地址分配,为每一个pod分配一个不同的IP,容器之间网络通过隧道进行通信。
    • Cni0网桥设备,每创建一个pod都会创建一对veth pair,其中一端是pod的eth0,另一端是网桥中的网卡端口。

  • Calico
    • Calico 是一个用于容器、虚拟机和主机的纯三层开源网络组建,使用BGP协议。
    •  IPIP模式:是一种隧道协议,也是一种overlay网络;
    • BGP模式:是一种路由协议,通过在每个节点运行BGP代理来实现容器间的通信。

5. K8s的网络抓包

 

深入理解lan、vlan、vxlan《OpenStack 网络》-阿里云开发者社区

百度百科-验证

什么是Overlay网络? Overlay网络 vs Underlay网络 - 华为

k8s 小记 - 网络_莫测之境的技术博客_51CTO博客

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

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

相关文章

QT生成ICO文件

生成ICO文件 #include <QApplication> #include <QImage> #include <QIcon> #include <QFile> #include <QDebug> #include <QPixmap>int main(int argc, char* argv[]) {QApplication app(argc, argv);// 读取图片文件QImage image(&quo…

IDEA编写Java编程代码提示插件

网址&#xff1a; aiXcoder idea软件中使用代码提示&#xff1a; aixcoder

uniapp使用@microsoft/signalr(报错“ReferenceError: require is not defined“)

后台老哥要用微软的signalr&#xff0c;总结了一些经验和问题 引入方法 1、npm npm i microsoft/signalr 2、下载他的js或者cdn <script src"https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/6.0.1/signalr.js"></script>在uniapp中&…

Python vs C#:首先学习哪种编程语言最好?

进入编码可能很困难。 最艰难的部分? 决定先学什么语言。 当谈到 Python 与 C# 时,可能很难知道在您的决定中要考虑哪些因素。 我们为您提供了有关这些全明星编程语言的所有信息。 什么是 C#? 自 2000 年作为 Microsoft Visual Studio 的一部分开发 C# 以来,它一直是开发人…

Postman使用_Tests Script(断言测试)

断言测试可以在Collection、Folder和Request的 pre-request script 和 test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#xff0c;只有测试符合自定义的要求后才能通过。 pm对象提供了测试相关功能…

常用的8位单片机+2.4g遥控芯片的“化学”反应

8位单片机通常是微控制器&#xff0c;它们具有相对简单的处理能力&#xff0c;但对于许多嵌入式系统和低复杂度应用而言&#xff0c;它们足够使用。这些芯片通常具有较低的功耗&#xff0c;价格相对实惠。 2.4GHz无线通信芯片&#xff0c;则具备强大的无线通信能力。它们可以实…

windows 下docker安装宝塔镜像 宝塔docker获取镜像

1. docker 安装宝塔 打开链接&#xff1a;https://www.docker.com/get-started&#xff0c;找对应的版本下载docker&#xff0c;安装docker打开百度云盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1DGIjpKkNDAmy4roaKGLA_w 提取码&#xff1a;u8bi 2. 设置镜像 点…

java设计模式之观察者模式

. 基本概念 观察者&#xff08;Observer&#xff09;模式中包含两种对象&#xff0c;分别是目标对象和观察者对象。在目标对象和观察者对象间存在着一种一对多的对应关系&#xff0c;当这个目标对象的状态发生变化时&#xff0c;所有依赖于它的观察者对象都会得到通知并执行它…

1、MongoDb综述

1. MongoDb综述 1.1. 什么是Nosql NoSQL&#xff1a;Not Only SQL ,本质也是一种数据库的技术&#xff0c;相对于传统数据库技术&#xff0c;它不会遵循一些约束&#xff0c;比如&#xff1a;sql标准、ACID属性&#xff0c;表结构等。 Nosql优点 l 满足对数据库的高并发读写…

创建查询系统,提升工作效率

今天我要和大家分享一个非常实用的小技巧&#xff0c;能够让老师们在短短三分钟内创建一个非常方便的查询系统&#xff01;是的&#xff0c;通过使用易查分这个神奇的工具&#xff0c;你可以轻松满足各种查询需求&#xff01; 首先&#xff0c;老师们只需要注册一个易查分账号。…

使用两个队列模拟栈

整体思路如下图&#xff1a; 代码实现 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;/*** author: Arbicoral* Description: 使用2个队列模拟栈的 push() pop() top(), 自己实现打印 print()*/ public class QueueMoniStack2 {public stati…

uniapp 模糊搜索(小白必看)

实现模糊搜索很简单,按照下面的步骤: 1. 搜索栏 <view class"search-box"><uni-search-bar class"uni-mt-10" radius"100" placeholder"请输入移交信息" clearButton"auto" bgColor"#F8F8F8"cancelBut…

SpringMvc决战-【SpringMVC之自定义注解】

目录 一、前言 1.1.什么是注解 1.2.注解的用处 1.3.注解的原理 二.注解父类 1.注解包括那些 2.JDK基本注解 3. JDK元注解 4.自定义注解 5.如何使用自定义注解&#xff08;包括&#xff1a;注解标记【没有任何东西】&#xff0c;元数据注解&#xff09;&#xff1f; 三…

Linux下使用lookbusy加载cpu负载

Lookbusy 是一个用于在 Linux 系统上生成合成负载的简单应用程序。它可以在 CPU 上生成固定的、可预测的负载&#xff0c;保持选定数量的内存处于活动状态&#xff0c;并生成您需要的任意数量的磁盘流量。 官方地址&#xff1a;lookbusy -- a synthetic load generator 编译 …

Article Forge:AI写作文章内容生成器

【产品介绍】 名称 Article Forge 成立/上线时间 2022年 具体描述 Article Forge是一款基于人工智能和深度学习的AI写作文章内容生成器&#xff0c;可以自动写出1500字的文章无论是产品描述&#xff0c;还是整篇博客文章&#xff0c;Article Forge都能在一…

堆与栈的区别

OVERVIEW 栈与堆的区别一、程序内存分区中的堆与栈1.栈2.堆3.堆&栈 二、数据结构中的堆与栈1.栈2.堆 三、堆的深入1.堆插入2.堆删除&#xff1a;3.堆建立&#xff1a;4.堆排序&#xff1a;5.堆实现优先队列&#xff1a;6.堆与栈的相关练习 栈与堆的区别 自整理&#xff0c;…

竞赛 基于机器视觉的车道线检测

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…

video 视频编解码一些debug方法

文章目录 一、通过命令去获取一些数据1.2 确定我们xml配置文件: 二、查看我们芯片支持的编码能力三、通过log去获取信息 这个文章的主要内容是为了后期性能方面的debug, 设计到前期的bringup则没有 一、通过命令去获取一些数据 获取媒体相关的参数&#xff1a; # getprop |…

Thinkphp6 配置并使用redis图文详解 小皮面板

这篇文章主要介绍了Thinkphp6 配置并使用redis的方法,结合实例形式详细分析了Redis的安装、配置以及thinkphp6操作Redis的基本技巧,需要的朋友可以参考下 一、安装redis ThinkPHP内置支持的缓存类型包括file、memcache、wincache、sqlite。ThinkPHP默认使用自带的采用think\Ca…

SpringMVC之自定义注解

目录 一.什么是Java注解 1.简介 2.注解的分类 3.JDK元注解 二.自定义注解 1.自定义注解的分类 1.1.标记Annotation: 1.2.元数据Annotation: 2.如何使用自定义注解 3.案例演示 3.1 获取类、方法及属性上的注解值 3.2Inherited 的使用 3.3获取类属性上的注解属性值 3.…