---
title: 相关概念
description: "容器网络模型（CNM）是由Docker官方提出的规范建议，被Libnetwork项目所采纳为网络模型规范，一些常见的开源网络组件（例如Kuryr，Open Virtual Networking，Calico和Weave等）均以Libnetwork方式集成采用容器网络模型规范提供容器网络互连。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/Docker/kunpengcontainer_06_0003.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/Docker/kunpengcontainer_06_0003.html
indexId: 4ca68d69c246af7d596d548155b20377e51e4bd34188fd2f798155c03d6e495375
---
# 相关概念

#### 容器网络模型（CNM）

容器网络模型（CNM）是由Docker官方提出的规范建议，被Libnetwork项目所采纳为网络模型规范，一些常见的开源网络组件（例如Kuryr，Open Virtual Networking，Calico和Weave等）均以Libnetwork方式集成采用容器网络模型规范提供容器网络互连。

如图1所示，容器网络模型的规范实现Libnetwork提供了Docker守护进程和网络驱动程序之间的接口。网络控制器负责将驱动程序与网络进行配对，每个驱动程序负责管理其拥有的网络，包括提供给该网络的各种服务，例如IP地址管理（IPAM）。容器网络模型的驱动程序可以为本地驱动（内置的Libnetwork或者Docker支持的网络类型），也可以是第三方插件驱动。本地驱动包含了None、Bridge、Overlay和MACvlan，第三方驱动可以带来更多功能。此外，容器网络模型驱动程序的作用域既可定义为本地作用域（单机模式），也可定义为全局作用域（多主机模式）。

图1 容器网络模型驱动图

如图2所示，容器在互联时通过一系列的网络端点进行连接。网络接口典型形式是以veth pair端口对的方式存在，端口对一端放置在容器的网络沙箱中，另一端放置在指定的网络中。一个网络端点只加入一个网络平面，多个网络端点可以在一个容器的网络沙箱中存在。

图2 容器网络模型接口图


#### 容器网络接口（CNI）

容器网络接口（CNI）是由CoreOS提出的规范建议，被Apache Mesos，Cloud Foundry，Kubernetes，Kurma和rkt采纳为网络模型规范，一些常见的开源网络组件（例如Contiv Networking，Calico和Weave等）均采用容器网络接口规范提供容器网络互连。

如图3所示，容器网络接口以一种最简化标准实现，使得网络开发工程师能以简单的方式达成容器运行时和网络插件之间的协议通信。

多个网络插件可以同时运行在一个容器内，使得容器连接不同插件驱动的不同平面网络，网络以JSON格式在配置文件中描述，并在调用CNI插件的时候实例化为新的命名空间。

图3 容器网络接口驱动图


#### Kubernetes

Kubernetes是Google开源的容器编排引擎，支持自动化部署、大规模可伸缩、应用容器化管理。Kubernetes将网络场景划分为四种类型的通信：同一Pod内的容器间通信、各Pod彼此之间的通信、Pod与Service间的通信以及集群外部流量与Service间的通信。

Pod和Service资源对象分别使用了各自的专有网络，Pod网络由Kubernetes的网络插件配置实现（即CNI模型实现），Service网络由Kubernetes集群予以指定。整体的网络模型借助于外部插件实现，因此在部署Kubernetes集群时需要事先规划所采取的网络模型及网络部署规划。


#### Open vSwitch

Open vSwitch（下文简称 OVS ）是一个Apache 2.0开源协议的多层软件交换机软件，目标是实现一个生产环境质量的交换平台，支持标准管理接口和前向函数接口支持可编程插件和管理控制。Open Virtual Network（下文简称OVN）是与OVS紧密集成的网络虚拟化方案，利用OVS的现有功能，构建了面向大规模集群管理的高性能网络架构。


#### Calico

Calico是Tigera公司以Apache 2.0开源协议开源的网络和网络解决方案组件，可以应用于容器、虚拟机、宿主机侧负载。该组件对于众多平台均有支持，包含Kubernetes、OpenShift、Docker EE、OpenStack和裸金属服务等。目标是将灵活的网络功能和安全性策略相结合，以提供具有Linux内核性能和云原生可扩展性的解决方案。
