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

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

该插件不依赖于覆盖网络或路由即可实现连接,并提供与虚拟机相同的性能。 总体而言,该插件提供以下功能,以便您能够:

  • 将虚拟网络 IP 地址分配给每个可以包含一个或多个容器的 Pod。
  • 通过 Azure ExpressRoute 或站点到站点虚拟专用网将这些 Pod 连接到对等虚拟网络和本地网络。 也可从对等网络和本地部署网络访问这些 Pod。
  • 通过 Pod 访问服务。 例如,Azure 存储和 Azure SQL 数据库等受到虚拟网络服务终结点保护。
  • 将网络安全组和路由直接应用到 Pod。
  • 正如虚拟机一样,直接将 Pod 放置在 Azure 内部或公共负载均衡器后面。
  • 为 Pod 分配一个公共 IP 地址,使 Pod 可直接从互联网访问。 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 连接到虚拟网络的工作原理。

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

互联网访问

为了使 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 容器时,可使用该插件。 如需详细说明,请参阅为 Docker 部署插件。