参考资料:

https://cizixs.com/2017/05/23/container-network-cni/
https://thenewstack.io/container-networking-landscape-cni-coreos-cnm-docker/
https://murat1985.github.io/kubernetes/cni/2016/05/14/netns-and-cni.html

1.什么是CNI
CNI是Container Network Interface的简称
容器网络接口(CNI)是coreos提出的一种容器网络规范,并被ApacheMeos、CloudFoundry、Kubernetes、Kurma和Rkt等项目所采用。还有由Contiv Networking、Project Calico和Weave等项目创建的插件。

2.CNI模型

3.CNI干的工作
CNI连接了两个组件:容器管理系统和网络插件。它们之间通过 JSON 格式的文件进行通信,实现容器的网络功能。具体的事情都是插件来实现的,包括:创建容器网络空间(network namespace)、把网络接口(interface)放到对应的网络空间、给网络接口分配 IP 等等。

4.CNI设计文档
https://github.com/containernetworking/cni/blob/master/SPEC.md

5.CNI与CNM的关系
docker 也提出了 CNM 标准,它要解决的问题和 CNI 是重合的,也就是说目前两者是竞争关系。目前 CNM 只能使用在 docker 中,而 CNI 可以使用在任何容器运行时。CNM 主要用来实现 docker 自身的网络问题,也就是 docker network 子命令提供的功能
CNM模型图

6.CNI的实现

具体参考: https://github.com/containernetworking/cni

容器运行时:

  • rkt - container engine
  • Kubernetes - a system to simplify container operations
  • OpenShift - Kubernetes with additional enterprise features
  • Cloud Foundry - a platform for cloud applications
  • Apache Mesos - a distributed systems kernel
  • Amazon ECS - a highly scalable, high performance container management service
  • Singularity - container platform optimized for HPC, EPC, and AI
  • OpenSVC - orchestrator for legacy and containerized application stacks

三方插件:

  • Project Calico - a layer 3 virtual network
  • Weave - a multi-host Docker network
  • Contiv Networking - policy networking for various use cases
  • SR-IOV
  • Cilium - BPF & XDP for containers
  • Infoblox - enterprise IP address management for containers
  • Multus - a Multi plugin
  • Romana - Layer 3 CNI plugin supporting network policy for Kubernetes
  • CNI-Genie - generic CNI network plugin
  • Nuage CNI - Nuage Networks SDN plugin for network policy kubernetes support
  • Silk - a CNI plugin designed for Cloud Foundry
  • Linen - a CNI plugin designed for overlay networks with Open vSwitch and fit in —SDN/OpenFlow network environment
  • Vhostuser - a Dataplane network plugin - Supports OVS-DPDK & VPP
  • Amazon ECS CNI Plugins - a collection of CNI Plugins to configure containers with —Amazon EC2 elastic network interfaces (ENIs)
  • Bonding CNI - a Link aggregating plugin to address failover and high availability network
  • ovn-kubernetes - an container network plugin built on Open vSwitch (OVS) and Open - Virtual Networking (OVN) with support for both Linux and Windows
  • Juniper Contrail / TungstenFabric - Provides overlay SDN solution, delivering -multicloud networking, hybrid cloud networking, simultaneous overlay-underlay support, - network policy enforcement, network isolation, service chaining and flexible load balancing
  • Knitter - a CNI plugin supporting multiple networking for Kubernetes
  • DANM - a CNI-compliant networking solution for TelCo workloads running on – Kubernetes
  • VMware NSX – a CNI plugin that enables automated NSX L2/L3 networking and L4/L7 -Load Balancing; network isolation at the pod, node, and cluster level; and zero-trust -security policy for your Kubernetes cluster.
  • cni-route-override - a meta CNI plugin that override route information
  • Terway - a collection of CNI Plugins based on alibaba cloud VPC/ECS network product

官方网络插件:
官方提供的插件目前分成三类:main、meta 和 ipam。main 是主要的实现了某种特定网络功能的插件;meta 本身并不会提供具体的网络功能,它会调用其他插件,或者单纯是为了测试;ipam 是分配 IP 地址的插件。

ipam 并不提供某种网络功能,只是为了灵活性把它单独抽象出来,这样不同的网络插件可以根据需求选择 ipam,或者实现自己的 ipam。

这些插件的功能说明如下:

main
loopback:这个插件很简单,负责生成 lo 网卡,并配置上 127.0.0.1/8 地址
bridge:和 docker 默认的网络模型很像,把所有的容器连接到虚拟交换机上
macvlan:使用 macvlan 技术,从某个物理网卡虚拟出多个虚拟网卡,它们有独立的 ip 和 mac 地址
ipvlan:和 macvlan 类似,区别是虚拟网卡有着相同的 mac 地址
ptp:通过 veth pair 在容器和主机之间建立通道
meta
flannel:结合 bridge 插件使用,根据 flannel 分配的网段信息,调用 bridge 插件,保证多主机情况下容器
ipam
host-local:基于本地文件的 ip 分配和管理,把分配的 IP 地址保存在文件中
dhcp:从已经运行的 DHCP 服务器中获取 ip 地址

7.在 kubernetes 中的使用

kubernetes 使用了 CNI 网络插件之后,工作过程是这样的:

  • kubernetes 先创建 pause 容器生成对应的 network namespace
  • 调用网络 driver(因为配置的是 CNI,所以会调用 CNI 相关代码)
  • CNI driver 根据配置调用具体的 cni 插件
  • cni 插件给 pause 容器配置正确的网络
  • pod 中其他的容器都是用 pause 的网络

kubernetes: CNI解读相关推荐

  1. Kubernetes — CNI 网络插件规范

    目录 文章目录 目录 CNI CNI 规范 CNI Plugin Main 插件 Bridge 插件 HOST-DEVICE MACVLAN 第三方网络插件 CNI 使用的 I/O 接口虚拟化 CNI ...

  2. 不好,WireGuard 与 Kubernetes CNI 摩擦生火了。。

    写了这么多篇 WireGuard 相关的保姆教程,今天终于牵扯到 Kubernetes 了,不然怎么对得起"云原生"这三个字.如果看到这篇文章的你仍然是个 WireGuard 新手 ...

  3. Kubernetes — CNI 规范

    目录 文章目录 目录 容器网络的发展趋势 CNI Flannel Callico Weave Macvlan ServiceMesh + CNI CNI 的使用示例 容器网络的发展趋势 容器常见的网络 ...

  4. Kubernetes CNI Calico:BGP 模式 / Route Reflector 模式(RR)

    Ipip模式是通过宿主机的网络去传输的,这个模式和flannel的vxlan工作模式差不多是一样的,都是一种复杂的网络方案,IPIP和vxlan模式的性能基本上接近,所以在性能方面要相对于路由方面损失 ...

  5. Kubernetes新近kubectl及CNI漏洞修复,Rancher 2.2.1发布

    今天,Kubernetes发布了一系列补丁版本,修复新近发现的两个安全漏洞CVE-2019-1002101(kubectl cp命令安全漏洞)和CVE-2019-9946(CNI端口映射插件漏洞).R ...

  6. kubelet配置cni插件_kubernetes网络插件对比分析(flannel、calico、weave)

    本文将在介绍技术原理和相应术语的基础上,再集中探索与详细对比目前最流行的CNI插件: Flannel Calico Weave 介绍 网络架构是Kubernetes中较为复杂.让很多用户头疼的方面之一 ...

  7. 回顾 | Kubernetes SIG-Cloud-Provider-Alibaba 首次网研会(含 PPT 下载)

    作者 | 汤志敏.谢瑶瑶 会议完整视频回顾:https://www.bilibili.com/video/av88668762 2 月 12 日,阿里云和 CNCF 联合举办了线上研讨会,首次完整介绍 ...

  8. 大规模微服务利器:eBPF + Kubernetes

    hi, 大家好,微服务,云原生近来大热,在企业积极进行数字化转型,全面提升效率的今天,几乎无人否认云原生代表着云计算的"下一个时代",IT大厂们都不约而同的将其视为未来云应用的发展 ...

  9. 当CNI遇上Kata-KataNative的CNI扩展

    Kata Native 的 CNI 扩展 背景 CNI 是 kubernetes 上为容器配置网络的通用接口.kubernetes 社区有很多 CNI 网络插件的实现.kube-ovn 就是一个把基于 ...

  10. Kubernetes v1.10.x HA 全手动安装教程(TL;DR)

    转自 https://www.kubernetes.org.cn/3814.html 本篇延续过往手动安装方式来部署 Kubernetes v1.10.x 版本的 High Availability ...

最新文章

  1. 常用Linux路由命令(route、ip、ifconfig等等)
  2. 超越EfficientNet!MutualNet:一种自适应相互学习网络宽度和分辨率的网络
  3. oracle审计的激活与取消
  4. 46. Ext中namespace的作用(转)
  5. eclipse中提交git总是要求输入用户名、密码
  6. Selenium+python --获取百度联想词
  7. 【nginx】return 301 302 重定向URL
  8. 常见软件架构方式的区别
  9. 荣耀赵明评苹果发布会掉队5G:意料之中 情理之外
  10. php查询对象是否有某个属性可用,JavaScript 判断对象中是否有某属性的常用方法...
  11. komodo-edit
  12. 多次导入excel实现及excel导入逻辑插件清空数据
  13. Druid手动创建连接的坑
  14. shopex服务器信息,最新版ShopEx 安装和默认后台地址及修改方法
  15. 什么是脏读、不可重复读、幻读? (数据库相关)
  16. python:24点游戏
  17. python怎么建立项目经理部的基本原则_一个关于项目经理的故事
  18. 关于相对熵(KL距离)的理解
  19. kafka 四:(设计模式)Kafka数据上传至Hbase
  20. 【前端】制作个人博客第三天

热门文章

  1. elasticsearch简介 搜索引擎全文搜索引擎
  2. 啥是各向同性、各向异性GNN:
  3. 中国 vs 卡塔尔 一场幸运的比赛
  4. 树莓派怎么切换输入法_为树莓派安装Fcitx和谷歌拼音中文输入法
  5. PCIe总线的参考时钟与同步时钟的差异
  6. 博客-需求说明答辩总结
  7. 计网 ---第10章 网络安全
  8. TX2打开can0外设自启动
  9. 用户使用手机号快速登录注册功能实现
  10. OCR识别技术之—车牌识别