容器的网络概念
容器是在共享操作系统 (OS) 内核上运行的独立软件单元。 容器将应用程序与其依赖项一起打包,并将应用程序从运行它的主机 OS 中提取出来。 这样就能产生一个轻量级运行时环境,应用程序可在其中运行并在开发过程中轻松共享。
一个容器独立于主机 OS 和其他容器。 附加到虚拟交换机的虚拟网络适配器允许容器相互通信,并与外部网络通信。
容器运行时:Docker
在本模块中,研究 Windows 上 Docker 容器的网络选项。 Docker 是开源工具、解决方案和基于云的服务的集合,它们提供了一种通用模型,用于将应用代码打包(又称容器化)为标准化单元(称为 Docker 容器)中。 Docker 容器提供了安全功能,可在同一主机上同时运行多个容器,而不会相互影响。
使用虚拟交换机的容器隔离
不同类型的虚拟交换机为容器提供不同级别的隔离和性能。 内部虚拟交换机不直接连接到容器主机上的物理 NIC,只有外部虚拟交换机直接连接。
最常见的三种虚拟交换机类型包括 NAT、透明和覆盖。
- 使用 NAT 虚拟交换机的容器使用网络地址转换 (NAT) 来访问外部网络。 NAT 虚拟交换机易于设置,但它限制了容器的可移植性和可伸缩性。
- 透明虚拟交换机允许容器直接连接到物理网络。 此虚拟交换机提供高性能和灵活性,但你需要手动配置 IP 地址和传递规则。
- 覆盖虚拟交换机在物理网络之上创建虚拟网络层。 可获得容器的跨主机通信和网络分段,但开销和复杂性会增加。
容器管理
通常,容器被视为 VM,但需要记住它们不是。 容器具有确切的生命周期。 其部署、启动、停止和销毁均按要求进行。 此生命周期使容器具有一次性的特点,并且可影响开发人员和 IT 运营人员计划管理大型容器部署的方式。
容器网络接口 (CNI) 插件
若要管理容器的 IP 地址和虚拟网络适配器的分配和配置,需要使用容器网络接口 (CNI) 插件。 CNI 插件是实现 CNI 规范的软件组件,该规范定义了业务流程协调程序(如 Kubernetes)与 Azure 等网络提供程序交互的标准方式。
Windows 容器可使用不同的 CNI 插件,例如:
- WinNAT CNI 插件使用 NAT 虚拟交换机建立容器网络。 WinNAT 是 Windows 上的 Docker 的默认 CNI 插件。
- WinCNI 插件使用透明虚拟交换机建立容器网络。 WinCNI 与 Kubernetes 兼容,但它需要手动 IP 地址管理。
- Azure CNI 插件使用覆盖虚拟交换机建立容器网络。 Azure CNI 与 Azure 虚拟网络集成,并提供网络策略、服务发现和负载均衡等高级功能。
容器和微服务
微服务应用程序是一种云原生体系结构方法,其中单个应用由许多松散耦合且可独立部署的组件或服务组成。 每个组件或服务可由一个容器表示。
容器不一定会实现微服务体系结构。 它们可托管整体式应用程序,但它们不是出于此目的而设计的。 默认情况下,容器运行时(如 Docker)和容器业务流程协调程序假定一个容器始终可安全删除或移除,并且另一个容器可在需要时取代它。
容器、Kubernetes 和网络
部署、更新、监视和删除容器的过程带来了许多难题。 在本模块中,研究使用 Kubernetes 和 Azure Kubernetes 服务 (AKS) 建立 Windows 容器网络的容器管理解决方案。 这些选项支持使用 CNI 插件建立容器网络。