K8s中的CNI网络模型

1. 网络模型

1.1 CNM

容器中的网络模型早年有CNM(Container Network Model, 容器网络模型) ,是一个由Docker提出的规范。
CNM中有代表性的就是Libnetwork,在Docker daemon和网络驱动之间提供接口,网络控制器负责将驱动和网络进行连接。
CNM的问题:
● 容器运行时有不同的插件,运行复杂
● 需要使用分布式存储来保存网络配置模型

● Network Sandbox:容器内部的网络栈,包括网络接口、路由表、DNS 等配置的管理。Sandbox 可用 Linux 网络命名空间、FreeBSD Jail 等机制进行实现。一个 Sandbox 可以包含多个 Endpoint。
● Endpoint:用于将容器内的 Sandbox 与外部网络相连的网络接口。可以使用 vethpair、Open vSwitch 的内部 port 等技术进行实现。一个 Endpoint 仅能够加入一个 Network。
● Network:可以直接互连的 Endpoint 的集合。可以通过 Linux bridge、VLAN 等技术进行实现。一个 Network 包含多个 Endpoint。

1.2 CNI

相比起CNM,CNI不需要通过分布式存储系统来存放网络配置信息,而只需要使用json。

● Loopback:lo设备
● Bridge:网桥
● IPVlan:创建VLAN,共享MAC地址,但IP地址不同
● PTP:veth Pair设备
CNI中有两个命令ADD和DEL,分别是添加和一处网络接口。这两个接口在容器创建时使用
CNI中的三类插件

其中Main是用来创建具体网络的二进制文件;Meta不是独立的插件,需要调用其他插件;IPAM是IP Address Manage的缩写,是用来分配容器中IP地址的二进制文件。

2. CNI的使用

2.1 CNI的配置

CNI插件的配置通过在./etc/cni/net.d中放置配置文件配置。下图是通过这种方式配置的flannel和portmap插件。
需要注意的是,K8s不支持多个CNI插件混用。如果在文件夹下放置了多个CNI插件配置文件,只会显示第一个。

2.2 CNI插件加载原理

插件配置的实质是加载项目脚本,生成二进制文件。CNI插件的生效简而言之便是:Container Runtime在创建容器进程前,先创建一个NetWork Namespace,使用CNI插件对这个NS进行网络配置,配置完成后再启动容器进程。

/pkg/kubelet/kubelet.go中的PreInitRuntimeService(),先会读取CNI配置,然后启动一个gRPC监听client,当有容器时间发生时便会创建Pod

之后进行Pod的创建,然后通过CNI接口建立容器网络。cni.go中的SetUpPod被调用便可在容器创建时进行网络配置
需要注意的是。在v1.20以前的K8s中,容器运行时是通过docker_shim创建的。但是在v1.24中,docker_shim已经被废弃了。随之而来的就是K8s不再支持对CNI插件的管理。但可以通过使用Containered部署K8s集群。
K8s v1.24中已经没有了docker_shim

K8s中的CNI网络模型相关推荐

  1. K8S中的容器网络概述(编写中)

    目录 参考资料 一.什么是容器网络 1.1 网络命名空间 1.2 veth设备对 二.K8S中节点间通信 2.1 不同Node中的Pod之间通信 三.xx实现概述 参考资料 K8s网络模型 - 腾讯云 ...

  2. 带你玩转kubernetes-k8s(第46篇:深入分析k8s网络原理[CNM、CNI]网络模型)

    随着容器技术在企业生产系统中的逐步落地,用户对容器云的网络特性要求也越来越高.跨主机容器间的网络互通已经成为基本要求,更高的要求包括容器固定IP地址.一个容器多个IP地址.多个子网隔离.ACL控制策略 ...

  3. 实战:k8s中基于角色的权限访问控制-RBAC(成功测试-博客输出)-20211005

    目录 文章目录 目录 写在前面 基础知识介绍 实验环境 实验软件 老师原课件内容 1..用K8S CA签发客户端证书 2. 生成kubeconfig授权文件 3. 创建RBAC权限策略 4.指定kub ...

  4. K8s9(2-1) k8s中的通信机制, kube-proxy的ipvs模式 ,无头服务,LoadBalancer,ExternalName,外部公有 ip(externalIPs)

    1.K8s中的service和通信: Service可以看作是一组提供相同服务的Pod对外的访问接口.借助Service,应用可以方便地实现服务发现和负载均衡. service默认只支持4层负载均衡能 ...

  5. 【博客515】k8s中为什么需要br_netfilter与net.bridge.bridge-nf-call-iptables=1

    k8s中为什么需要br_netfilter与net.bridge.bridge-nf-call-iptables=1 br_netfilter模块的意义 br_netfiler作用:br_netfil ...

  6. AI在K8S中的实践:云智天枢AI中台架构揭秘

    导语 | 9月7日,云+社区(腾讯云官方开发者社区)主办的技术沙龙--AI技术原理与实践,在上海成功举行.现场的5位腾讯云技术专家,在现场与开发者们面对面交流,并深度讲解了腾讯云云智天枢人工智能服务平 ...

  7. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  8. k8s部署jar包_学习K8S之路.6--- 在K8S中部署Jenkins,并使用Jenkins打包jar包

    一:部署jenkins jenkins官网:https://jenkins.io/download/ jenkins镜像:https://hub.docker.com/r/jenkins/jenkin ...

  9. k8s中几种port介绍

    1.端口所应用位置的不同 port是service的的端口 targetport是pod也就是容器的端口 nodeport是容器所在宿主机的端口(实质上也是通过service暴露给了宿主机,而port ...

最新文章

  1. 广联达加密锁驱动_广联达(GGJ)安装教程
  2. 软件是计算机什么及相关文档的总称,1冯-诺依曼原理的基本思想是什么.doc
  3. 怎样实现强人工智能?
  4. 1、Reactive Extensions for .NET(译)
  5. 世上最详细的子网划分教程,看完保证会
  6. 如何获取 OSS AccessKeyId、AccessKeySecret
  7. php post调用api,PHP(CURL)POST数据调用API简单示例
  8. Win10的 IntelliJ idea中log4j2控制台中文乱码的几种处理方法
  9. 学习C/C++的经验谈
  10. 程序员(应届生)求职简历模板+LaTex(overleaf)简历制作+博士简历模板分享+简历赏析
  11. layer弹出层自适应高度,垂直水平居中
  12. google建立快讯推荐被引用文章
  13. 手把手逆向Playcanvas天空盒编码(一次乌龙的任务)
  14. 上传本地图片到数据库
  15. python解压zip文件_python怎样压缩和解压缩ZIP文件(转)
  16. 《老梁四大名著情商课》笔记- 智商与情商:哪个重,哪个轻
  17. 杭州高级职称申报通过率如何提升?
  18. 到底啥是分布式系统开发经验?
  19. 【基础】计算机网络相关的内容
  20. 通过计算机的启动过程了解BIOS和UEFI

热门文章

  1. 11【门面设计模式】
  2. python切换路径到当前目录
  3. 江苏计算机二级选择题知识点,江苏省计算机二级考试试题及答案
  4. SAP SD VL31N BBP_INB_DELIVERY_CREATE 根据采购订单创建内向交货单
  5. 软件性能测试论文草稿
  6. 微型计算机原理实验程序,微机原理实验(含程序).doc
  7. cadence iscape如何下载文件?
  8. 地鼠的困境(最大匹配)
  9. STM32最新是10个案例及操作
  10. Open Vas漏洞扫描工具安装及实战