Kubernetes CNI 网络模型

简介: 【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搭建和管理企业级网站应用
相关文章
|
9天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
3天前
|
监控 安全 BI
什么是零信任模型?如何实施以保证网络安全?
随着数字化转型,网络边界不断变化,组织需采用新的安全方法。零信任基于“永不信任,永远验证”原则,强调无论内外部,任何用户、设备或网络都不可信任。该模型包括微分段、多因素身份验证、单点登录、最小特权原则、持续监控和审核用户活动、监控设备等核心准则,以实现强大的网络安全态势。
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
83 2
|
1月前
|
运维 网络协议 算法
7 层 OSI 参考模型:详解网络通信的层次结构
7 层 OSI 参考模型:详解网络通信的层次结构
116 1
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
85 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 编解码 算法
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
50 0
|
10天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
1月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
71 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
下一篇
DataWorks