专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Kubernetes进阶:理解CNI和CNI插件

理解典型网络插件工作原理,掌握CNI插件的使用。

什么是 CNI

  • Container Network Interface,容器网络的 API 接口
  • Kubelet 通过这个标准的 API 调用不同的网络插件配实现置网络
  • CNI 插件:一系列实现了 CNI API 接口的网络插件

Kubernetes 中如何使用

1、 配置 CNI 配置文件(/etc/cni/net.d/xxnet.conf)
2、 安装 CNI 二进制插件(/opt/cni/bin/xxnet)
3、 在这个节点上创建 Pod
4、 Kubelet 会根据 CNI 配置文件执行 CNI 插件
5、 Pod 的网络就配置完成了
97_1.png

如果只是使用 CNI 插件,大部分 CNI 插件的提供者都可以一键安装,非常容易。例如 Flannel 安装,只需要一个命令,配置和二进制自动安装配置:

For Kubernetes v1.7+                      
# kubectl apply -f http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Flannel 会通过 Daemonset 自动把配置和二进制拷贝到 Node 的配置文件夹中

如何选择 CNI 插件

CNI 插件通常有三种模式

97_2.png

社区那么多插件,需要如何选择?

1、 环境限制:
不同环境支持的底层能力不同

 *  **虚拟化** 网络限制多,需要选择支持 Overlay 的插件:Flannel-vxlan,Calico-ipip,Weave 等。
 *  **物理机** 选择 Underlay 或路由的插件。例如:calico-bgp,flannel-hostgw,sriov等。
 *  **公有云** 如果有则选云厂商支持的。例如:Aliyun 的 Terway。

2、 功能需求: 不同实现支持的功能不同

 *  **安全** NetworkPolicy 支持 Pod 网络间的访问策略,Calico,Weave。
 *  **集群外资源互联互通** 选择 Underlay 的网络,例如 sriov,calico-bgp。
 *  **服务发现与负载均衡** 很多 Underlay 的插件不支持 K8s service 服务发现。

3、 性能需求: 不同实现的性能损失不同

 *  **Pod 创建速度** Overlay 或者路由模式的网络插件创建快,Underlay 模式网络插件创建慢。
 *  **Pod 网络性能** Overlay 性能相对较差,Underlay 模式和路由模式网络插件性能好。

如何开发自己的 CNI 插件

CNI 插件实现通常需要两个部分:

  • 一个二进制的 CNI 插件去配置 Pod 的网卡和 IP 等 ——> 给 Pod 插上网线
  • 一个 Daemon 进程去管理 Pod 之间的网络打通 ——> 给 Pod 连上网络

给 Pod 插上网线

1、 给 Pod 准备虚拟网卡

 *  创建"veth"虚拟网卡对
 *  将一端的网卡挪到 Pod 中

2、 给 Pod 分配 IP 地址

 *  给 Pod 分配集群中唯一的 IP 地址
 *  一般会把 Pod 网段按 Node 分段
 *  每个 Pod 再从 Node 段中分配 IP

3、 配置 Pod 的 IP 和路由

 *  给 Pod 的虚拟网卡配置分配到的 IP
 *  给 Pod 的网卡上配置集群网段的路由
 *  在宿主机上配置到 Pod 的 IP 地址的路由到对端虚拟网卡上  
    ![97\_3.png][97_3.png]

给 Pod 连上网线:让每一个 Pod 的 IP 在集群中都能被访问到

1、 CNI Daemon 进程学习到集群所有 Pod 的 IP 和其所在节点

 *  通常通过请求 K8S APIServer 拿到现有 Pod 的 IP 地址和节点。
 *  监听 K8S APIServer 新的 Node 和 Pod 的创建自动配置。

2、 CNI Daemon 配置网络来打通 Pod 的 IP 的访问

 *  创建到所有 Node 的通道:Overlay 隧道,VPC 路由表,BGP 路由等。
 *  将所有 Pod 的 IP 地址跟其所在 Node 的通道关联起来:Linux 路由,Fdb 转发表,OVS流表等。

如果对你有帮助,记得互相鼓励,帮忙点赞收藏或转发~

文章永久链接:https://tech.souyunku.com/28597

未经允许不得转载:搜云库技术团队 » Kubernetes进阶:理解CNI和CNI插件

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们