Kubernetes CNI 网络模型

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【7月更文挑战第5天】CNI定义了容器运行时与插件间的简单交互,允许容器加入多个网络,通过JSON配置。

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


目前主流的容器网络模型是CoreOS 公司推出的 Container Network Interface(CNI)模型。

1、CNI模型

CNI 是由 CoreOS 公司推出的一个容器网络规范。已采纳该规范的项目包括 Apache Mesos、Cloud Foundry、Kubernetes、Kurma 和 rkt。另外 Contiv Networking、Project Calico 和 Weave 这些项目也为 CNI 提供插件。


CNI 的规范比较小巧,它规定了一个容器 runtime 和网络插件之间的简单契约。这个契约通过 JSON 的语法定义了 CNI 插件所需要提供的输入和输出。


一个容器可以被加入到被不同插件所驱动的多个网络之中。一个网络有自己对应的插件和唯一的名称。CNI 插件需要提供两个命令:一个用来将网络接口加入到指定网络,另一个用来将其移除。这两个接口分别在容器被创建和销毁时被调用。

2、CNI Flow

容器 runtime 首先需要分配一个网络命名空间及一个容器 ID,然后连同一些 CNI 配置参数传给网络驱动。接着网络驱动会将该容器连接到网络,并将分配的 IP 地址以 JSON 的格式返回给容器 runtime。


目前,CNI 的功能涵盖了 IPAM、L2 和 L3。端口映射(L4)则由容器 runtime 自己负责。CNI 也没有规定端口映射的规则。


Network Policy 的主要功能是对 Pod 间的网络通信进行限制和准入控制,设置方式为将 Pod 的 Label 作为查询条件,设置允许访问或禁止访问的客户端 Pod 列表。目前查询条件可以作用于 Pod 和 Namespace 级别。


为了使用 Network Policy,Kubernetes 引入了一个新的资源对象 NetworkPolicy,供用户设置 Pod 间网络访问的策略。但仅定义一个网络策略是无法完成实际的网络隔离的,还需要一个策略控制器(Policy Controller)进行策略的实现。策略控制器由第三方网络组件提供,目前,Calico、Cilium、Kube-router、Romana、Weave Net 等开源项目均支持网络策略的实现。

3、主流开源组件

目前,已经有多个开源组件支持容器网络模型。常见的网络组件,包括 Flannel、Open vSwitch、直接路由和 Calico。


Flannel

Flannel 之所以可以搭建 k8s 依赖的底层网络,是因为它能实现以下两个功能。

(1)它能协助 k8s,给每一个 Node 上的 Docker 容器分配互相不冲突的 IP 地址。

(2)它能在这些 IP 地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动地传递到目标容器内。


Open vSwitch

Open vSwitch 是一个开源的虚拟交换软件,类似于 Linux 中的 Bridge,但是功能要复杂得多。Open vSwitch 的网桥可以直接建立多种通信通道(隧道),如 Open vSwitch with GRE/VxLAN。这些通道的建立可以很容易地通过 OVS 的配置命令实现。在 k8s、Docker 场景下,通常主要建立 L3 到 L3 的隧道。


直接路由

通过直接手动写路由的方式,以实现 Node 之间的网络通信功能。该直接路由配置方法的问题是,在集群节点发生变化时,需要手动维护每个 Node 上的路由表信息,效率很低。为了有效管理这些动态变化的网络路由信息,动态地让其他 Node 都感知到,需要使用动态路由发现协议来同步这些变化。


在实现这些动态路由发现协议的开源软件中,常用的有 Quagga、Zebra 等。


Calico

Calico 是容器网络的又一种解决方案,与其他虚拟网络最大的不同是,它没有采用 overlay 网络做报文的转发,提供了纯 3 层的网络模型。三层通信模型表示每个容器都通过 IP 直接通信,中间通过路由转发找到对方。


在这个过程中,容器所在的节点类似于传统的路由器,提供了路由查找的功能。要想路由能够正常工作,每个虚拟路由器(容器所在的主机节点)必须有某种方法知道整个集群的路由信息,Calico 采用的是 BGP 路由协议,其全称是 Border Gateway Protocol。


除了能用于容器集群平台 Kubernetes、共有云平台 AWS、GCE 等,也能很容易地集成到 openstack 等 IaaS 平台。


Calico 在每个计算节点利用 Linux Kernel 实现了一个高效的 vRouter 来负责数据转发。每个 vRouter 通过 BGP 协议把在本节点上运行的容器的路由信息向整个 Calico 网络广播,并自动设置到达其他节点的路由转发规则。


Calico 保证所有容器之间的数据流量都是通过 IP 路由的方式完成互联互通的。Calico 节点组网可以直接利用数据中心的网络结构(L2 或者 L3),不需要额外的 NAT、隧道或者 Overlay Network,没有额外的封包解包,能够节约 CPU 运算,提高网络通信效率。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
28天前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
网络协议与IO模型
|
27天前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
63 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
8天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
13天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
52 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
22天前
|
机器学习/深度学习 算法 数据挖掘
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
25 2
|
22天前
|
机器学习/深度学习 编解码 算法
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
30 0
|
23天前
|
存储 分布式计算 负载均衡
|
15天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
16天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
110 17