kubernetes-容器网络接口CNI

一、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模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes CNI(Container Networking Interface)模型是Kubernetes中用于管理容器网络的一种标准化插件接口。它定义了容器运行时和网络插件之间的通信协议和规范,使得不同的网络插件能够与Kubernetes集群进行无缝集成。 在CNI模型中,每个容器被分配一个独立的IP地址,并且可以通过网络插件进行跨节点的通信。以下是CNI模型的主要组成部分: 1. 容器运行时(Container Runtime):负责创建和管理容器的运行环境,比如Docker、containerd等。 2. CNI插件(CNI Plugin):负责配置和管理容器网络的插件,根据CNI规范进行网络设置。它可以是第三方开发的插件,也可以是Kubernetes自带的插件,比如Flannel、Calico等。 3. CNI插件配置文件(CNI Configuration File):定义了容器网络的配置信息,包括网络类型、IP地址分配方式、网关等。 4. CNI二进制文件(CNI Binary):包含了执行网络设置的二进制文件,负责调用对应的CNI插件来完成容器网络的配置。 在Kubernetes中,当一个Pod被创建时,CNI插件被调用来为Pod中的每个容器分配独立的IP地址,并配置网络规则,使得Pod内的容器可以相互通信。此外,CNI插件还可以与网络插件结合使用,实现跨节点的网络通信。 总的来说,Kubernetes CNI模型定义了容器网络的配置和管理规范,通过插件接口的标准化,实现了多种网络插件与Kubernetes集群的无缝集成。这使得用户可以根据自己的需求选择合适的网络插件,并灵活地管理容器网络

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值