kubernetes: CNI解读
参考资料:
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解读相关推荐
- Kubernetes — CNI 网络插件规范
目录 文章目录 目录 CNI CNI 规范 CNI Plugin Main 插件 Bridge 插件 HOST-DEVICE MACVLAN 第三方网络插件 CNI 使用的 I/O 接口虚拟化 CNI ...
- 不好,WireGuard 与 Kubernetes CNI 摩擦生火了。。
写了这么多篇 WireGuard 相关的保姆教程,今天终于牵扯到 Kubernetes 了,不然怎么对得起"云原生"这三个字.如果看到这篇文章的你仍然是个 WireGuard 新手 ...
- Kubernetes — CNI 规范
目录 文章目录 目录 容器网络的发展趋势 CNI Flannel Callico Weave Macvlan ServiceMesh + CNI CNI 的使用示例 容器网络的发展趋势 容器常见的网络 ...
- Kubernetes CNI Calico:BGP 模式 / Route Reflector 模式(RR)
Ipip模式是通过宿主机的网络去传输的,这个模式和flannel的vxlan工作模式差不多是一样的,都是一种复杂的网络方案,IPIP和vxlan模式的性能基本上接近,所以在性能方面要相对于路由方面损失 ...
- Kubernetes新近kubectl及CNI漏洞修复,Rancher 2.2.1发布
今天,Kubernetes发布了一系列补丁版本,修复新近发现的两个安全漏洞CVE-2019-1002101(kubectl cp命令安全漏洞)和CVE-2019-9946(CNI端口映射插件漏洞).R ...
- kubelet配置cni插件_kubernetes网络插件对比分析(flannel、calico、weave)
本文将在介绍技术原理和相应术语的基础上,再集中探索与详细对比目前最流行的CNI插件: Flannel Calico Weave 介绍 网络架构是Kubernetes中较为复杂.让很多用户头疼的方面之一 ...
- 回顾 | Kubernetes SIG-Cloud-Provider-Alibaba 首次网研会(含 PPT 下载)
作者 | 汤志敏.谢瑶瑶 会议完整视频回顾:https://www.bilibili.com/video/av88668762 2 月 12 日,阿里云和 CNCF 联合举办了线上研讨会,首次完整介绍 ...
- 大规模微服务利器:eBPF + Kubernetes
hi, 大家好,微服务,云原生近来大热,在企业积极进行数字化转型,全面提升效率的今天,几乎无人否认云原生代表着云计算的"下一个时代",IT大厂们都不约而同的将其视为未来云应用的发展 ...
- 当CNI遇上Kata-KataNative的CNI扩展
Kata Native 的 CNI 扩展 背景 CNI 是 kubernetes 上为容器配置网络的通用接口.kubernetes 社区有很多 CNI 网络插件的实现.kube-ovn 就是一个把基于 ...
- Kubernetes v1.10.x HA 全手动安装教程(TL;DR)
转自 https://www.kubernetes.org.cn/3814.html 本篇延续过往手动安装方式来部署 Kubernetes v1.10.x 版本的 High Availability ...
最新文章
- 常用Linux路由命令(route、ip、ifconfig等等)
- 超越EfficientNet!MutualNet:一种自适应相互学习网络宽度和分辨率的网络
- oracle审计的激活与取消
- 46. Ext中namespace的作用(转)
- eclipse中提交git总是要求输入用户名、密码
- Selenium+python --获取百度联想词
- 【nginx】return 301 302 重定向URL
- 常见软件架构方式的区别
- 荣耀赵明评苹果发布会掉队5G:意料之中 情理之外
- php查询对象是否有某个属性可用,JavaScript 判断对象中是否有某属性的常用方法...
- komodo-edit
- 多次导入excel实现及excel导入逻辑插件清空数据
- Druid手动创建连接的坑
- shopex服务器信息,最新版ShopEx 安装和默认后台地址及修改方法
- 什么是脏读、不可重复读、幻读? (数据库相关)
- python:24点游戏
- python怎么建立项目经理部的基本原则_一个关于项目经理的故事
- 关于相对熵(KL距离)的理解
- kafka 四:(设计模式)Kafka数据上传至Hbase
- 【前端】制作个人博客第三天