启用容器以使用 Azure 虚拟网络功能

若要将丰富的 Azure 网络功能集引入容器,可以使用增强虚拟机的相同软件定义的网络堆栈。 Azure 虚拟网络容器网络接口 (CNI) 插件安装在 Azure 虚拟机中。 该插件将虚拟网络中的 IP 地址分配给虚拟机中启动的容器。 它将它们附加到虚拟网络,并将其直接连接到其他容器和虚拟网络资源。

该插件不依赖于覆盖网络或多个路由即可实现连接,并提供与虚拟机相同的性能。 在高级别,该插件提供以下功能,以便:

  • 将虚拟网络 IP 地址分配给每个可以包含一个或多个容器的 Pod。
  • 通过 Azure ExpressRoute 或站点到站点虚拟专用网将这些 Pod 连接到对等虚拟网络和本地网络。 也可从对等网络和本地网络访问这些 Pod。
  • 使用 Pod 访问服务。 例如,Azure 存储和 Azure SQL 数据库等受到虚拟网络服务终结点保护。
  • 将网络安全组和路由直接应用到 Pod。
  • 正如虚拟机一样,直接将 Pod 放置在 Azure 内部或公共负载均衡器后面。
  • 为 Pod 分配一个公共 IP 地址,以便通过 Internet 直接访问。 Pod 还可访问 Internet 本身。
  • 使用 Pod 与 Kubernetes 资源(如服务、入口控制器和 Kube DNS)无缝结合使用。 通过 Azure 负载均衡器还可在外部或内部公开 Kubernetes 服务。

下图显示了该插件向 Pod 提供 Azure 虚拟网络功能的工作原理。

显示容器网络概述的图。

该插件同时支持 Linux 和 Windows 平台。

将 Pod 连接到虚拟网络

Pod 将显示在属于虚拟网络一部分的虚拟机中。 Pod 的 IP 地址池配置为虚拟机网络接口上的辅助地址。 Azure CNI 为 Pod 设置基本的网络连接并管理池中 IP 地址的使用率。 当 Pod 显示在虚拟机中后,Azure CNI 从池中分配可用的 IP 地址,并将 Pod 连接到虚拟机中的软件桥。 Pod 终止时,IP 地址会被添加回池。 下图显示了 Pod 连接到虚拟网络的工作原理。

显示容器网络详细信息的图。

Internet 访问

为了使 Pod 能够访问 Internet,该插件将 iptables 规则配置为网络地址转换 (NAT),以转换来自 Pod 的 Internet 绑定流量。 包的源 IP 地址被转换为虚拟机的网络接口上的主 IP 地址。 Windows 虚拟机自动为流往虚拟机所在的子网范围之外的 IP 地址的流量进行源 NAT (SNAT)。 通常会转换流往虚拟机 IP 范围之外的 IP 地址的所有流量。

限制

该插件支持每台虚拟机最多 250 个 Pod,支持虚拟网络中最多 16,000 个 Pod。 这些限制因 Azure Kubernetes 服务 (AKS) 会有所不同。

使用插件

可采用以下方式来使用该插件,以提供 Pod 或 Docker 容器的基本虚拟网络连接:

  • Azure Kubernetes 服务:选择“高级网络”选项,使用插件集成到 AKS 中。 使用高级网络,可在现有或新的虚拟网络中部署 Kubernetes 群集。 如需深入了解高级网络及其设置步骤,请参阅 AKS 中的网络配置
  • AKS 引擎:使用 AKS 引擎生成 Azure 资源管理器模板,以便在 Azure 中部署 Kubernetes 群集。 如需详细说明,请参阅为 AKS 引擎 Kubernetes 群集部署插件
  • 在 Azure 中创建自己的 Kubernetes 群集:使用该插件为自行部署的 Kubernetes 群集中的 Pod 提供基本网络,无需依赖于 AKS 或 AKS-Engine 之类的工具。 在这种情况下,群集中的每个虚拟机上都已安装并启用该插件。 如需详细说明,请参阅为自行部署的 Kubernetes 群集部署插件
  • Azure 中 Docker 容器的虚拟网络附加:不希望创建 Kubernetes 群集,而希望创建在虚拟机中附加虚拟网络的 Docker 容器时,可使用该插件。 如需详细说明,请参阅为容器部署插件