3.CNI网络

文章目录

  • CNI网络
    • Flannel
      • UDP模式
      • VXLAN模式
      • 部署flannel
    • Calico
      • Calico模式
      • Calico部署
    • flannel 和 calico 区别

CNI网络

  • K8S 中 Pod 网络通信:

    • Pod 内容器与容器之间的通信
      • 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用 localhost 地址访问彼此的端口。
    • 同一个 Node 内 Pod 之间的通信
      • 每个 Pod 都有一个真实的全局 IP 地址,同一个 Node 内的不同 Pod 之间可以直接采用对方 Pod 的 IP 地址进行通信,Pod1 与 Pod2 都是通过 Veth 连接到同一个 docker0 网桥,网段相同,所以它们之间可以直接通信。
    • 不同 Node 上 Pod 之间的通信
      • Pod 地址与 docker0 在同一网段,docker0 网段与宿主机网卡是两个不同的网段,且不同 Node 之间的通信只能通过宿主机的物理网卡进行。
      • 要想实现不同 Node 上 Pod 之间的通信,就必须想办法通过主机的物理网卡 IP 地址进行寻址和通信。因此要满足两个条件:Pod 的 IP 不能冲突;将 Pod 的 IP 和所在的 Node 的 IP 关联起来,通过这个关联让不同 Node 上 Pod 之间直接通过内网 IP 地址通信。
  • Overlay Network:
    叠加网络,在二层或者三层基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路隧道连接起来(类似于VPN)。

  • kubernetes三种网络

在这里插入图片描述

  • K8S三种网络
    • 节点网络:node节点网卡的IP,nodeIP
    • Pod网络:podIP
    • service网络:clusterIP
  • k8s三种接口
    • CRI:容器运行时接口,docker、containerd,podman,cri-0
    • CNI:容器网络接口,flannel,calico,cilium
    • CSI:容器存储接口,ceph,nfs,gfs

Flannel

  • Flannel 的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址。
  • Flannel 是 Overlay 网络的一种,也是将 TCP 源数据包封装在另一种网络包里面进行路由转发和通信,目前支持 udp、vxlan、 host-GW 3种数据转发方式。
  • flannel三种模式
    • UDP:出现最早,性能较差,基于flanneld应用程序实现数据包的封装和解封装
    • VXLAN:默认模式,推荐使用的模式,性能比UDP模式更好,基于内核实现数据包的封装和解封装
    • Host-gw:性能最好,但是配置复杂,不能跨网段

UDP模式

在这里插入图片描述

  • flannel UDP模式工作原理
    1. 应用数据包从源主机的POd容器发出到cni0网桥接口,再由cni0转发到flannel0虚拟接口
    2. flanneld服务会监听flannel0接口接收到的数据,flanneld服务会将内部数据封装到UDP报文里
    3. flanneld会根据再etcd中维护的路由表查到目标pod所在的node节点IP,在UDP报文外在封装node节点的IP报文、MAC报文后,通过物理网卡发送到目标node节点
    4. UDP报文通过8285号端口送到目标主机的flanneld进程进行解封装,再通过flannel0接口转发到cni0网桥,然后通过cni0网桥转发到目标pod容器

VXLAN模式

在这里插入图片描述

  • vxlan 是一种overlay(虚拟隧道通信)技术,通过三层网络搭建虚拟的二层网络,跟 udp 模式具体实现不太一样:
  1. udp模式是在用户态实现的,数据会先经过tun网卡,到应用程序,应用程序再做隧道封装,再进一次内核协议栈,而vxlan是在内核当中实现的,只经过一次协议栈,在协议栈内就把vxlan包组装好
  2. udp模式的tun网卡是三层转发,使用tun是在物理网络之上构建三层网络,属于ip in udp,vxlan模式是二层实现, overlay是二层帧,属于mac in udp
  3. vxlan由于采用mac in udp的方式,所以实现起来会涉及mac地址学习,arp广播等二层知识,udp模式主要关注路由
  • flannel VXLAN模式工作原理
  1. 原始数据帧从源主机的POd容器发出到cni0网桥接口,再由cni0转发到flannel.1虚拟接口
  2. flannel.1接口接收到数据帧后添加VXLAN头部,再内核封装成UDP报文
  3. falnneld会根据再etcd维护的路由表通过物理网卡发送到目标node节点
  4. UDP报文通过8472号端口送到目标主机的flannel.1接口,在内核进行解封装,然后将原始报文通过cni0网桥转发到目标pod容器

部署flannel

###在node01节点上
##上传压缩包到  /opt/k8sflannel-v0.21.5.zipunzip flannel-v0.21.5.zip##创建 cni 工作目录
mkdir -p /opt/cni/bincni-plugins-linux-amd64-v1.3.0.tgz
flannel-cni-plugin.tar
flannel.tar
kube-flannel.yml###解压  cni  配置文件
tar xf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin
##加载镜像文件
docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar

在这里插入图片描述

###node02节点,采用相同的操作
###发送 kube-flannel.yml  到master01 的/opt/k8s目录中
cd /opt/k8s
scp kube-flannel.yml 192.168.242.66:/opt/k8s
##在  mater01 节点操作
##安装网络插件
cd /opt/k8s
kubectl apply -f kube-flannel.yml

在这里插入图片描述

##卸载安装的网络插件
##一个 k8s 集群中只能安装一个网络插件
kubectl delete -f 插件配置文件 
##查看网络查看的运行状态
kubectl get pods -A
##查看nodes节点状态
kubectl get nodes

在这里插入图片描述

##如果要修改flanneld的模式
vim kube-flannel.yml"Network": "10.244.0.0/16",    ###修改网段,必须与controller-manager的cluster-cidr一致"Backend": {"Type": "vxlan"               ##修改模式
###创建 pod
###在  mater01kubectl create deployment ggl --image=nginx:latest --port=80
##查看创建的容器
kubectl get pods -A
###创建 pod
###在  mater01kubectl create deployment ggl --image=nginx:latest --port=80
##查看创建的容器
kubectl get pods -A

在这里插入图片描述

Calico

  • k8s 组网方案对比:
    • flannel方案
      需要在每个节点上把发向容器的数据包进行封装后,再用隧道将封装后的数据包发送到运行着目标Pod的node节点上。目标node节点再负责去掉封装,将去除封装的数据包发送到目标Pod上。数据通信性能则大受影响。
    • calico方案
      Calico不使用隧道或NAT来实现转发,而是把Host当作Internet中的路由器,使用BGP同步路由,并使用iptables来做安全访问策略,完成跨Host转发来。

Calico模式

  • Calico 主要由三个部分组成:

    • Calico CNI插件:主要负责与kubernetes对接,供kubelet调用使用。
    • Felix:负责维护宿主机上的路由规则、FIB转发信息库等。
    • BIRD:负责分发路由规则,类似路由器。
    • Confd:配置管理组件
  • Calico IPIP模式工作原理

    1. 源Pod容器发出的原始数据IP包通过内核的IPIP驱动直接封装在宿主机网络的IP包中
    2. 根据tunnel接口的路由通过物理网卡发送到目标Node节点
    3. 数据包到达目标节点后再通过IPIP驱动解包得到原始数据IP包
    4. 然后通过路由规则发送给 veth pair 设备到达目标Pod容器
  • Calico BGP模式工作原理(本质就是通过路由表来维护每个 Pod 的通信)

    1. 源Pod容器发出的原始数据IP包会通过 veth pair 设备到达宿主机网络空间
    2. 然后根据原始数据IP包的目标IP和宿主机的路由规则,找到目标Node节点的IP,再通过物理网卡发送到目标Node节点
    3. 根据目标Node节点的路由规则,直接通过目标Pod容器的 veth pair 设备发送到目标Pod容器

Calico部署

###下载  calico配置文件curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
###在master01 节点
##先卸载之前安装的  flanneld插件
kubectl delete -f kube-flannel.yml

在这里插入图片描述

###上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络
cd /opt/k8s
vim calico.yaml#修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kube-controller-manager配置文件指定的cluster-cidr网段一样---3879行---- name: CALICO_IPV4POOL_CIDRvalue: "192.168.0.0/16"
##修改 calico的模式---3851行---
Enable IPIP- name: CALICO_IPV4POOL_IPIPvalue: "Always"##如果使用BGP模式
将  value: "Always"    改为     Never还要添加- name: IP AUTODETECTION_METHODvalue: "interface=ens.*"
#添加使用的物理网卡
##安装网络插件
kubectl apply -f calico.yaml

在这里插入图片描述

##查看插件状态
kubectl get pods -A

在这里插入图片描述

flannel 和 calico 区别

  • flannel: UDP VXLAN Host-gw
    • 默认网段:10.244.0.0/16
    • 通常使用VXLAN模式,采用的是叠加网络、IP隧道方式传输数据,对性能有一定的影响
    • 功能简单配置方便利于管理,但是不具备复杂的网络策略规则配置能力
  • calico: IPIP BGP 混合模式(CrossSubnet)
    • 默认网段:192.168.0.0/16
    • 使用IPIP模式可以实现跨子网传输,但是传输过程中需要封包和解包,对性能有一定的影响
    • 使用BPG模式,把Node节点看作成路由器,根据Felix、BIRD分发和维护的路由规则,可直接实现BGP路由转发,传输过程中不需要封包和解包,因此性能较好,但只能在同一个网段内使用,无法跨子网传输
    • 具有更丰富的网络策略配置管理能力、性能更好、功能更全面,但是维护起来较为复杂
  • 所以对于较小规模且网络要求简单的K8S集群,可以采用flannel。对于集群规模较大且要求更多的网络策略配置时,可以采用性能更好、功能全全面的calico

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

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

相关文章

Redis内网主从节点搭建

Redis内网主从节点搭建 1、文件上传2、服务安装3、服务启动4、配置主从复制 1、文件上传 内网环境手动上传gcc-c、redis.tar文件 2、服务安装 # 解压 unzip gcc-c.zip unzip gcc_rpm.zip tar -zxvf redis-6.2.13.tar.gz# 安装 cd gcc_rpm/ rpm -ivh *.rpm --nodeps --force…

【HDFS】每天一个RPC系列----complete(二):客户端侧

上图给出了最终会调用到complete RPC的客户端侧方法链路(除去Router那条线了)。 org.apache.hadoop.hdfs.DFSOutputStream#completeFile(org.apache.hadoop.hdfs.protocol.ExtendedBlock): 下面这个方法在complete rpc返回true之前,会进行重试,直到超过最大重试次数抛异…

ChatGPT下架官方检测工具,承认无法鉴别AI内容

去年底,OpenAI 推出的 ChatGPT ,带来了生成式人工智能涌现的热潮。它不仅能够协助完成撰写邮件、视频脚本、文案、翻译、代码等任务,还能通过学习和理解人类的语言来进行对话,并根据聊天的上下文进行互动。 但随之而来的争议也让人…

整理一些Postgresql工作中常用面试中会问的问题---Postgresql面试题001

1.什么是Postgresql TOAST? TOAST (The Oversized-Attribute Storage Technique,超大尺寸字段存储技术)主要用于存储大字段的值。 PostgreSQL 页面(page)大小是固定的(通常为8KB),且不允许tuples跨多个页面存储。因此不能存储非常大的字段值。为了克服这个限制,大字段…

IOS开发:指定路径创建新文件夹

指定路径创建新文件夹 典型错误示范: let documentDirectoryURL FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let directoryURL documentDirectoryURL.appendingPathComponent("FolderName", isDirectory: true)if F…

Service not registered 异常导致手机重启分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Service not registered 异常导致手机重启二、Service not registered 解决方案 一、Service not registered 异常导致手机重启 1.重启 的部分Log如…

ruby调试

如果下载 ruby-debug-ide gem install ruby-debug-ide vscode 下载 ruby扩展 1, ruby 2,修改launch.json

Zebec 创始人 Sam 对话社区,“Zebec 生态发展”主题 AMA 回顾总结

近日,Zebec Protocol 创始人 Sam 作为嘉宾,与社区进行了以“Zebec 生态发展”为主题的 AMA 对话。Sam 在线上访谈上对 Zebec 路线图、Zebec 质押、NautChain通证进行了解读,并对 Zebec 的进展、生态建设的愿景进行了展望。本文将对本次 AMA 进…

C语言第十四课-------结构体的认识和使用-------重要一笔

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂…

P1195 口袋的天空

口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。 题目描述 给你云朵的个数 N N N,再给你 M M M 个关系&…

mac m1使用docker安装kafka

1.拉取镜像 docker pull zookeeper docker pull wurstmeister/kafka 2.启动zookeeper docker run -d --name zookeeper -p 2181:2181 zookeeper 3.设置zookeeper容器对外服务的ip Zookeeper_Server_IP$(docker inspect zookeeper --format{{ .NetworkSettings.IPAddress }}…

Rocky(centos) jar 注册成服务,能开机自启动

概述 涉及:1)sh 无法直接运行java命令,可以软连,此处是直接路径 2)sh脚本报一堆空格换行错误:需将转成unix标准格式; #切换到上传的脚本路径 dos2unix 脚本文件名.sh 2)SELINUX …

【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)

prometheus 出现NaN场景以及如何去除干扰(Not a Number) 1、在prometheus中使用NaN来表示无效数值或者结果 场景: 一些监控系统使用 NaN 作为空值或缺失值,但在 Prometheus 中 NaN 只是另一个浮点值。Prometheus 表示缺失数据的方式是让数据缺失。Prom…

哪些年,我们编程四处找的环境依赖

基于Maven&#xff0c;快速构建SSM项目 <properties><!-- 将spring和有关的升级版本&#xff0c;设置为5.0.5--><spring.version>5.0.5.RELEASE</spring.version><!-- 将mybatis和有关的升级版本&#xff0c;设置为3.1.1--><my…

深度Q学习的收敛性分析:通过渐近分析方法

深度Q学习收敛性分析:通过渐近分析方法 1. 概述1.1. 理论的相关研究1.2. 主要贡献1.2.1. 目标网络1.2.2. 经验回放2. 神经网络2.1. 前馈网络2.2. 激活函数σ2.3. 深度Q网络3. 深度Q学习:算法和假设4. 收敛性分析4.1. DQN的连续化深度Q学习是一种重要的强化学习算法,它涉及到…

W6100-EVB-PICO做DNS Client进行域名解析(四)

前言 在上一章节中我们用W6100-EVB-PICO通过dhcp获取ip地址&#xff08;网关&#xff0c;子网掩码&#xff0c;dns服务器&#xff09;等信息&#xff0c;给我们的开发板配置网络信息&#xff0c;成功的接入网络中&#xff0c;那么本章将教大家如何让我们的开发板进行DNS域名解…

【C# 基础精讲】C# 数据类型概述

在C#中&#xff0c;数据类型可以分为以下三大类&#xff1a;值类型、引用类型和指针类型。每种类型都具有不同的特点和适用场景&#xff0c;了解这些类型对于编写高效和稳健的C#程序至关重要。下面将依次介绍这三大类数据类型&#xff0c;并列出C#中常见的每种类型。 值类型 值…

【Linux命令详解 | cd命令】Linux系统中用于更改当前工作目录的命令

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 使用cd命令切换到特定目录2. 使用cd命令与路径相关的特殊字符3. 使用cd命令切换到包含空格的目录4. 使用cd命令切换到前一个和后一个目录5. 使用cd命令切换到用户的主目录6. 使用cd命令与绝对路径和相对路径 总结…

宁波银行最新内推码 MK4913

宁波银行最新内推码 MK4913 内推码&#xff1a; MK4913 内推二维码 &#xff1a; 网申路径&#xff1a; 网页端&#xff1a;登录宁波银行招聘官网&#xff1a; https://zhaopin.nbcb.com.cn 选择【校园招聘】-【招聘岗位】手机端&#xff1a;关注【宁波银行招聘】公众号&a…

【物理】带电粒子在磁场和电场中移动的 3D 轨迹研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…