容器网络是一种新兴的应用沙盒机制,用于家庭桌面和网络规模的 企业网络 解决方案,其概念类似于虚拟机。与主机和所有其他容器隔离的容器内部是一个功能齐全的 Linux 环境,具有自己的用户、文件系统、进程和网络堆栈。容器内的所有应用程序只能访问或修改容器内可用的文件或资源。
可以同时运行多个容器,每个容器都有自己的安装和依赖项。这在应用程序的较新版本可能需要升级可能导致与服务器上运行的其他应用程序依赖项发生冲突的依赖项的情况下特别有用。与虚拟机不同,容器共享主机资源,而不是完全模拟计算机上的所有硬件,使容器比虚拟机更小更快,并减少开销。特别是在 Web 规模应用程序的上下文中,容器被设计为虚拟机的替代品,作为微服务架构的部署平台。
容器还具有可移植性的特点,比如Docker,一个容器引擎,允许开发者将一个容器和它的所有依赖打包在一起。然后可以使该容器包可供下载。下载后,容器可以立即在主机上运行。
容器网络如何工作?
容器网络是一种虚拟化形式,在概念上类似于虚拟机 (VM),但有明显区别。首先,容器方法是操作系统虚拟化的一种形式,而虚拟机是硬件虚拟化的一种形式。
在管理程序上运行的每个虚拟机都有自己的操作系统、应用程序和库,并且能够封装持久数据、安装新操作系统、使用与主机不同的文件系统或使用不同的内核版本。
相反,容器是映像的“运行实例”,是短暂的操作系统虚拟化,它会启动以执行某些任务,然后被删除和遗忘。由于容器的短暂性,与需要更大地址空间的虚拟机相比,系统用户运行的容器实例要多得多。
为了创建隔离,容器依赖于两个 Linux 内核特性:命名空间和 cgroup。为了给容器自己的系统视图,将其与其他资源隔离开来,为每个资源创建一个命名空间,并与其余系统不共享。然后使用控制组(Cgroups)来监控和限制系统资源,如 CPU、内存、磁盘 I/O、网络等。
容器网络的好处
容器正在迅速被采用,取代虚拟机作为微服务平台。
容器有几个关键的好处:
- 与现有工作负载一起运行容器化应用程序: 机器可以在同一基础架构上与传统 VM 一起运行容器化应用程序,从而提供灵活性和速度。
- 将可移植性与安全性、可见性和管理相结合: 由于容器的固有设计,它通过沙盒、主机的资源透明性、任务管理和执行环境的可移植性实现了更高的安全性。
- 利用现有基础架构并轻松扩展: 使用现有 SDDC 避免成本高昂且耗时的基础架构重新架构导致孤岛 - 当不同部门在同一组织内维护自己的 IT 基础架构时,就会出现孤岛。由于每个部门的技术配置存在差异,这种“孤岛效应”在推出组织范围的 IT 策略和升级时会产生问题。重新集成孤岛是一个昂贵且耗时的过程,可以通过容器网络来避免。
- 为开发者提供与 Docker 兼容的接口: 已经熟悉 Docker 的开发者可以通过与 Docker 兼容的接口在容器中开发应用程序,然后通过自助管理门户或 UI 进行配置。
在 Web 级应用程序部署中使用容器网络
容器被部署为企业环境中微服务架构的一部分,以帮助封装大型 Web 应用程序常见的单个任务。每个任务可能有自己的容器,面向外部的容器(如 API 和 GUI)对公共互联网开放,其他容器将驻留在专用网络上。
微服务模型带来的优势:
- 易于部署: 主机配置可以嵌入到容器中,使其在部署后即可使用。
- 一次性: 容器专为快速启动和处置而设计。如果主机出现故障,使应用程序重新联机就像引入备用服务器一样简单。
- 容错: 容器为数据库和 Web 服务器创建简单的冗余。在多个节点上复制同一个容器提供了高可用性和 容错性。
容器网络的类型
目前使用的容器网络有五种类型;它们的特点围绕着 IP-per-container 与 IP-per-pod 模型以及网络地址转换 (NAT) 的要求与不需要转换。
- None: 容器接收到一个网络栈;但是,它缺少外部连接。此模式对于测试容器、为以后的网络连接暂存容器以及分配给不需要外部通信的容器很有用。
- 桥接: 在内部主机网络上桥接并允许与同一主机上的其他容器通信的容器。无法从主机外部访问容器。桥接网络是 Docker 容器的默认网络。
- 主机: 此配置允许创建的容器共享主机的网络命名空间,授予容器访问主机的所有网络接口的权限。最不复杂的外部网络配置,由于网络接口的共享使用,这种类型很容易发生端口冲突。
- Underlay: Underlays 直接打开主机接口到在主机上运行的容器,并消除对端口映射的需要,使其比桥接器更有效。
- Overlay: Overlays 使用网络隧道在主机之间进行通信,当容器托管在不同的主机上时,它们可以像在同一台机器上一样运行。