博客

新的 OSI 网络堆栈: 容器和半层

Lori MacVittie 缩略图
洛里·麦克维蒂
2017 年 10 月 30 日发布

早在 1983 年,当我还在学习如何查看和研究 Apple ][e 上的硬件时,计算机和电信行业中的一群志同道合的人聚在一起创建了一个详细的规范,他们称之为开放系统互连 (OSI)。 最初是为了研究实际的接口,最终演变成一个通用的参考模型,其他人(如 IETF)可以使用它来开发接口。 这些接口最终可以成为标准,而且确实如此: IP、TCP、HTTP 等…… 

新的 OSI 堆栈

我们大多数在大学里学习过计算机科学课程的人都学过这个参考模型。 我们了解了“OSI 的七层”,却发现在现实世界中,实际实现很少能清楚地映射到 OSI 网络模型。

尽管如此,它的映射效果足够好,我们可以继续使用它作为预期的参考模型。 我们大多数人都知道第 4 层指的是 TCP,第 7 层指的是 HTTP,第 2/3 层指的是 IP 和以太网。 它们几乎可以互换。

几年前,我们甚至开始争论与 SDN 和虚拟网络相关的覆盖协议到底属于哪里。 它们实际上不是第 2 层,但也不完全是第 3 层。 他们处于中间状态。

在大多数情况下,我们可以忽略这一点,只是模糊地提及这两层,并将其仅称为“覆盖网络”。 每个人都明白我们的意思,而且我们还有其他事情需要争论——例如云的定义以及 DevOps 是否适合企业。

输入容器——或者更准确地说,容器网络。 容器编排环境 (COE) 的高度不稳定和自动化的世界导致了网络堆栈中需要更多层的必要性。

与覆盖网络一样,我们不愿意在 OSI 模型中创建新的层,因为目前它只是一个标准参考,而改变标准可能需要很长时间。 沿着。 长的。 时间。 但与覆盖网络一样,这些层仍然作为网络堆栈中的存在接口存在。 和覆盖网络一样,我倾向于赋予它们“半”层,因为它们对于 COE 中网络的未来非常重要。

第 4.5 层: 服务网格

第一个“半步”位于第 4 层和第 5 层之间。 这就是服务网格执行和自动化发挥作用的地方。 简而言之,服务网格是由拦截每个请求的侧车部署代理构建的。 这使得他们能够为容器环境的服务执行特定域的路由。 它假设存在低阶协议,并有效地扩展它们。 这是必要的,因为其下方的所有网络层都假定连接和路由仅基于 IP 地址。 虽然这最终是数据包在容器环境中移动的方式,但将给定请求发送到哪个IP 地址和端口的决定并不基于这些信息。 它基于与服务和应用状态和位置相关的各种变量。 本质上,我们正在查看有关请求的元信息并使用它来确定如何路由它。 这些元信息对于建立“网格”至关重要,而“网格”又可以确保每个服务的可用性和规模。 

第 7.5 层: 服务标签

第二个“半步”位于顶部附近,第七层之上。 抛开所有关于“人层(第 8 层)”的笑话,COE 实际上确实在应用之上放置了一层元数据,提供了使容器化环境中的规模发挥作用的“粘合剂”。 这些是应用或服务“标签”,用于识别 COE 提供自动扩展的离散服务。 如果没有标签,几乎不可能区分一个应用程序与另一个应用程序。 这是因为 OSI 堆栈的所有层都可以通过 IP 地址和端口等特定结构来识别。 虽然我们早就了解依赖于共享环境外部构造(虚拟服务器和基于主机的网络)的架构实现,但容器在环境内部产生了同样的问题。 端口和 IP 地址的共享使得区分所需速度的服务变得困难。

在容器化环境中的第 7.5 层添加“标签”使得这些网络服务(如负载平衡和路由)能够唯一地标识资源并同时确保规模和可用性。

新的“容器层”允许环境将其自身与网络结构分离,并且在此过程中确保比仍然与网络堆栈中的其他层紧密相关的以前的技术更高的可移植性。 通过在“半层”上运行并假设传统层的存在,容器化环境可以独立于任何特定的网络方案或架构,并且可以在开发和测试、测试和生产、本地和云端之间轻松移动。