云原生时代 Overlay 网络的应用
Posted 矢量SRE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生时代 Overlay 网络的应用相关的知识,希望对你有一定的参考价值。
在当下的技术圈,对 Kubernetes 网络模式稍有了解的朋友都应该听说过 Overylay网络,Overlay 网络其实并不是一门新技术,Overlay 网络其实是将已有的物理网络(Underlay网络)作为基础,在其上建立叠加的虚拟网络,实现网络资源的虚拟化。
近年来云计算,虚拟化,容器化技术的演进促进了网络虚拟化技术的应用。由于Overlay网络是建立在已有物理网络上的虚拟网络,具有独立的控制和转发平面,所以我们介绍 Overlay 网络的同时也一并说一哈 Underlay 网络。
Underlay 网络是专门用来承载用户 IP 流量的基础架构层,它与 Overlay 网络之间的关系有点类似物理机和虚拟机。Underlay 网络和物理机都是真正存在的实体,它们分别对应着真实存在的网络设备和计算设备,而 Overlay 网络和虚拟机都是依托在下层实体使用软件虚拟出来的层级。如下图:
常见应用场景
虽然 Kubernetes 目前已经是容器编排领域的事实标准了,但是依然有很多传统行业仍然在使用物理机,虚拟机部署服务。而日常的更新维护中,集群中的大规模虚拟机迁移是比较常见的事情。比如我 2014 年为之前的公司建立的一个基于OpenStack的虚拟化平台,我们一般会利用虚拟机的迁移,来提高资源的利用率。
而 Overylay 在 Kubernetes 中容器跨主机网络通信中一样扮演者很重要的作用,其中比较主流的方案是基于 Flannel 的 VXLAN 后端实现,而 VXLAN 是 Overylay 网络的一种技术实现,那么下面我们一起来看一下他的具体实现。
Kubernetes中的Overlay实现
首先我们来简单了解一下 VXLAN(Virtual eXtensible LAN)技术的原理,由于VXLAN 可以完全在内核态实现封装和解封装数据包的工作,他是在现有的三层网络之上,覆盖一层虚拟的、由内核 VXLAN 模块负责维护的二层网络,使得连接在这个 VXLAN 二层网络上的虚拟机或者容器都可以像在同一个局域网(LAN)里那样自由通信。
当然现实情况是,可能虚拟机或者容器可能分布在不同机器上,或者不同区域的物理机房里。而为了打通两边的二层网络, VXLAN 会在宿主机上设置一个特殊的网络设备作为「隧道」的两端。这个设备就叫做 VTEP。
而 VTEP 设备的作用就是进行封装和解封装二层数据帧(Ethernet frame);而且这个工作的执行流程,全部是在内核里完成的(因为 VXLAN 本身就是 Linux 内核中的一个模块)。
我们来看一下这幅图,它可以清晰表达出在 Kubernetes 中基于 Flannel 的 VXLAN 网络跨主机容器通信的过程:
上图中,Node1 的容器 1 访问 Node2 的容器 2 整个过程可以简单描述为以下几个步骤:
-
Node1 上的容器 1 从其 eth0 网卡将 IP 数据包通过 cni0,被路由到 flannel0。(其实就是 VETP ) -
而 flannel0 从收到的数据包中获取目的 MAC 地址; -
然后在本地的转发表中查找该 MAC 地址所在服务器的 IP 地址; -
然后将虚拟网络标识符(VxLAN Network Identifier 即 VNI)以及原始的 IP 数据包作为 Payload ,构建新的 UDP 数据包; -
将新的 UDP 数据包通过 Node1 的 eth0 网卡发送到 Node2; -
Node2 的 eth0 网卡将数据包发送给 Node2 的 flannel0; -
flannel0 收到数据包后,去掉 UDP 数据包中的协议头; -
查看数据包中 VNI; -
将 IP 数据包转发给 Node2 上的容器2;
以上就是 Overlay 在Kubernetes 中的实现和工作原理了。
Overlay解决了哪些问题?
首先解决了网络规模的限制
其次解决了网络架构的限制
Overlay 把二层报文封装在 IP 报文之上,因此,只要网络支持 IP 路由可达就可以部署 Overlay 网络,而 IP 路由网络本身已经非常成熟,且在网络结构上没有特殊要求。而且路由网络本身具备良好的扩展能力,很强的故障自愈能力和负载均衡能力。采用 Overlay 技术后,我们在不用改变现有 Underlay 网络架构即可轻松支撑新型网络架构的部署,比如 Kubernetes 中 Flannel 的 VXLAN 的网络架构。
最后解决了网络隔离的限制
公有云服务商一定会面临这样一个问题:一个物理集群可能会被拆分成多个小块分配给不同的租户(Tenant),因为二层网络的数据帧可能会进行广播,所以出于安全的考虑这些不同的租户之间需要进行网络隔离,避免租户之间的流量互相影响甚至恶意攻击。比如之前阿里云在使用的--经典网络,就是二层网络,并未进行网络隔离,而是通过其他手段隔离,导致用户质疑其并未彻底有效的做隔离。
而传统的网络隔离使用的技术 VLAN, 其虚拟网络的上限是 4096 个。4096 个虚拟网络对于大规模的数据中心来说远远不够,而VXLAN 会使用 24 比特的 VNI 表示虚拟网络个数,总共可以表示 16,777,216 个虚拟网络,这也就能满足数据中心多租户网络隔离的需求了。
总结
以上内容便是 Overlay 网络的基本介绍以及 Overylay 网络的具体实现之一 VXLAN在 Kubernetes 中的工作原理解读。
需要注意的是,Overlay 网络只是一种在物理网络上的虚拟网络,使用该技术并不能直接解决集群中的规模性等问题,而 VXLAN 也不是组建 Overlay 网络的唯一技术实现,在不同场景中我们可以考虑使用不同的技术,例如:NVGRE、GRE 等。
以上是关于云原生时代 Overlay 网络的应用的主要内容,如果未能解决你的问题,请参考以下文章