kubenetes-容器网络接口CNI

news/2024/7/4 7:49:00 标签: kubernetes, 云原生, 网络

一、CNI

Kubernetes 网络模型设计的基础原则是:

  1. 所有的Pod能够不通过NAT(网络地址转换)就能相互访问。
  2. 所有的节点能够不通过NAT就能相互访问。
  3. 容器内看见的IP地址和外部组件看到的容器IP是一样的。

Kubernetes的集群里,IP地址是以Pod为单位进行分配的,每个Pod都拥有一个独立的IP地址。一个Pod内部的所有容器共享一个网络栈,即宿主机上的一个网络命名空间,包括它们的IP地址、网络设备、配置等都是共享的。
也就是说,Pod里面的所有容器能通过localhost:port 来连接对方。在Kubernetes中,提供了一个轻量的通用容器网络接口CNI(Container Network Interface),专门用于设置和删除容器的网络连通。容器运行时通过CNI调用网络插件来完成容器的网络设置。

二、CNI运行机制

不同于CRI是通过gRPC服务进行调用,CNI是容器运行时直接调用可执行文件的方式进行的。
容器运行时在启动时会从CNI的配置目录中读取配置文件,文件后缀为".conf” “.conflist”“json”。如果配置目录中包含多个文件,一般情况下,会以名字排序选用第一个配置文件作为默认的网络配置,并加载获取其中指定的CNI插件名称和配置参数。所以,容器运行时一般需要配置两个参数–cni-bin-dir和–cni-conf-dir
kubelet 内置了Docker 作为容器运行时,且是由 kubelet 来查找CNI插件,并且运行插件来为容器设置网络,所以这两个参数应该配置在kubelet 处:

  • cni-bin-dir:网络插件的可执行文件所在目录。默认是/opt/cni/bin。

  • cni-conf-dir:网络插件的配置文件所在目录。默认是/etc/cni/net.d。

在这里插入图片描述

在这里插入图片描述
配置文件中定义了网络插件type,其实对应的就是/opt/cni/bin下面的可执行文件,由可执行文件来设置网络

那么主机上的这些可执行文件和配置文件又是怎么生成的呢?其实是由calico的daemonSet推到各个主机节点上的。
在这里插入图片描述
由calico-node这个DaemonSet的initContainer完成的,具体可以看这个DaemonSet的yaml文件。

三、pod网络路由

1、启动一个nginx pod
在这里插入图片描述
2、查看pod网络路由
在这里插入图片描述
可以看到网络路由是从容器设备eth0发到168.254.1.1上。通过ping命令查看168.254.1.1的MAC地址:

在这里插入图片描述
这个设备的mac地址是ee:ee:ee:ee:ee:ee,在主机上通过ip a命令查看网卡设备:
在这里插入图片描述
所有cali开头的网卡设备都是ee:ee:ee:ee:ee:ee,每创建一个pod在宿主机上都会产生一个以cali开头的虚拟接口。

下面是VXLAN模式的calico插件网络路由:
在这里插入图片描述

calico还支持IPIP、BGP模式。


http://www.niftyadmin.cn/n/5192964.html

相关文章

Spark 之 format

spark sql 默认写的文件格式 如果是hive 表,走的是这里 def getDefaultStorage(conf: SQLConf): CatalogStorageFormat {// To respect hive-site.xml, it peeks Hadoop configuration from existing Spark session,// as an easy workaround. See SPARK-27555.va…

《卡拉马佐夫兄弟》人物表

《卡拉马佐夫兄弟》人物表 重要人物表 费奥多尔巴甫洛维奇卡拉马佐夫——地主。费多尔巴甫洛维奇 德米特里(米特里、米嘉、米剑卡)费奥多罗维奇卡拉马佐夫——长子。 伊万费奥多罗维奇卡拉马佐夫——次子。伊凡费多罗维奇,。 阿列克塞&#…

Web前端—移动Web第二天(空间转换、动画、综合案例:全名出游)

版本说明 当前版本号[20231118]。 版本修改说明20231118初版 目录 文章目录 版本说明目录移动 Web 第二天01-空间转换空间转换简介平移视距旋转左手法则rotate3d-了解立体呈现案例-3d导航缩放 02-动画动画实现步骤animation复合属性animation拆分写法案例-走马灯精灵动画多组…

Reflect的作用,target,property,value,receiver代表啥

1.真的proxy let target {name:张三} let handler {get(target,property,receiver){console.log(1,target,2,property,3,receiver)return Reflect.get(target,property,receiver)},set(target,property,value,receiver){console.log(a,target,b,property,c,value,d,receiver)…

基于 gin + websocket 即时通讯项目 (一、项目初始化)

基于 gin websocket 即时通讯项目 1、安装环境与初始化 搜索各种包官网 https://pkg.go.dev/ 1.1 安装 grom go get -u gorm.io/grom 1.2 安装 MySQL 驱动 go get -u gorm.io/driver/sqlite go get -u gorm.io/driver/mysql 1.3 安装 gin go get -u github.com/gin-gonic/gi…

【数据分享】2023年我国省市县三级的科技型中小企业数量(Excel/Shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平!比如一个城市的金融企业较多,那这个城市的金融产业肯定比较发达;一个城市的制造业企业较多,那这个城市的制造业肯定比较发达。 之前我们给大家分享了…

如何解决swagger-editor在线接口调试时的跨域问题

文章目录 一,序言二,问题重现1. 运行swagger-editor2. 运行接口服务3. 问题重现步骤 三,解决问题思路1. 去除浏览器安全限制2. 服务器接口统一处理3. 委托nginx转发 四,完整接口代码传送 一,序言 在 Docker 运行swagg…

人工智能发展前景

随着人工智能的快速发展,这个行业对人才的需求也在不断增长。越来越多的有志之士开始关注人工智能,希望通过自学获得相关技能,进而在人工智能领域找到心仪的职业。本文将探讨人工智能职业发展的前景,并为大家提供自学人工智能的途…