容器网络概念

适用于:在 Windows Server 上运行的 AKS

应用程序组件必须协同工作才能在基于容器的微服务方法中处理其任务。 Kubernetes 提供支持应用程序通信的资源,使你可在内部或外部连接到应用程序并将其公开。 你可以对应用程序进行负载均衡,从而生成高可用性应用程序。

更复杂的应用程序可能需要配置 SSL/TLS 终止的入口流量或多个组件的路由。 出于安全考虑,你可能还需要限制进入 Pod 和节点或介于它们之间的网络流量。

本文介绍在 Windows Server 上的 AKS 中向应用程序提供网络的核心概念:

  • Kubernetes 服务
  • 入口控制器
  • 网络策略

Kubernetes 服务

为简化应用程序工作负载的网络配置,Kubernetes 使用服务以逻辑方式对一组 Pod 进行分组并提供网络连接。 可用的服务类型如下:

群集 IP:创建在 Kubernetes 群集中使用的内部 IP 地址。 使用适用于支持群集中其他工作负载的仅限内部使用的群集 IP。

此图显示 AKS 群集中的 Cluster IP 通信流。

NodePort:在基础节点上创建端口映射,该映射允许使用节点 IP 地址和端口直接访问应用程序。

显示 AKS 群集中 NodePort 流量的示意图。

LoadBalancer:创建 Azure 负载均衡器资源、配置外部 IP 地址并将请求的 Pod 连接到负载均衡器后端池。 为允许客户流量发送到应用程序,要在所需端口上创建负载均衡规则。

显示 AKS 群集中负载均衡器流量的示意图。

针对入站流量的其他控制和路由,你可以使用入口控制器。

注意

在你部署与另一个目标群集共享网络的目标群集时,可能会发生负载均衡器 IP 地址冲突。 如果你在共享同一 AksHciClusterNetwork 对象的目标集群中部署使用不同端口的两个工作负载,则会发生这种情况。 由于在 HA 代理内部分配 IP 地址和端口映射的方式,这可能会导致重复分配 IP 地址。 如果发生这种情况,则在重新部署工作负荷之前,一个或两个工作负荷可能会遇到随机的网络连接问题。 重新部署工作负荷时,你可以使用导致每个工作负荷接收单独的服务 IP 地址的相同端口,也可以在使用不同 AksHciClusterNetwork 对象的目标群集上重新部署工作负荷。

ExternalName:创建特定的 DNS 条目,便于访问应用程序。 负载均衡器和服务的 IP 地址可以是内部地址或外部地址,具体取决于整个网络设置,并且可以动态分配。 或者,你可以指定要使用的现有静态 IP 地址。 现有静态 IP 地址通常与 DNS 条目绑定。 内部负载均衡器仅分配有一个专用 IP 地址,因此无法从 Internet 对其进行访问。

Kubernetes 网络基础知识

为允许访问应用程序或让应用程序组件相互通信,Kubernetes 为虚拟网络提供了抽象层。 Kubernetes 节点连接到虚拟网络,可为 Pod 提供入站和出站连接。 kube-proxy 组件在每个节点上运行,以提供这些网络功能。

在 Kubernetes 中,服务以逻辑方式对 Pod 进行分组以允许:

  • 通过单个 IP 地址或 DNS 名称和特定端口直接访问。
  • 使用负载均衡器在托管同一服务或应用程序的多个 Pod 之间分配流量。

创建 AKS 群集时,我们还会创建和配置基础 HAProxy 负载均衡器资源。 在 Kubernetes 群集中部署应用程序时,会为 Pod 和 Kubernetes 服务配置 IP 地址作为此负载均衡器中的终结点。

IP 地址资源

为了简化应用程序工作负荷的网络配置,AKS Arc 会将 IP 地址分配给部署中的以下对象:

  • Kubernetes 群集 API 服务器:API 服务器是公开 Kubernetes API 的 Kubernetes 控制平面的组件。 API 服务器是 Kubernetes 控制平面的前端。 静态 IP 地址始终分配给 API 服务器,而不考虑基础网络模型。
  • Kubernetes 节点(虚拟机):Kubernetes 群集由一组辅助角色计算机(称为节点)和节点托管容器化应用程序组成。 除了控制平面节点,每个群集至少还有一个工作器节点。 对于 AKS 群集,Kubernetes 节点被配置为虚拟机。 这些虚拟机被创建为具备高可用性的虚拟机。 有关详细信息,请参阅 节点网络概念
  • Kubernetes 服务:在 Kubernetes 中,服务以逻辑方式对 Pod IP 地址进行分组,以便通过特定端口上的单个 IP 地址或 DNS 名称直接访问。 此外,服务还可以使用负载均衡器分配流量。 静态 IP 地址始终分配给 Kubernetes 服务,而不考虑基础网络模型。
  • HAProxy 负载均衡器HAProxy 是一个可将传入请求分散到多个终结点的 TCP/HTTP 负载均衡器和代理服务器。 在 Windows Server 部署中的 AKS,每个工作负荷群集都使用 HAProxy 负载均衡器来进行部署和配置,作为一个专用的虚拟机。
  • Microsoft本地云服务:这是一个云提供商,用于创建和管理在本地 Windows Server 群集上托管 Kubernetes 的虚拟化环境。 您的 Windows Server 群集所依据的网络模型决定了 Microsoft 的本地云服务使用的 IP 地址分配方法。 若要详细了解 Microsoft 本地云服务实现的网络概念,请参阅节点网络概念

Kubernetes 网络

在 Windows Server 上的 AKS 中,可以部署使用以下网络模型之一的群集:

  • Flannel 覆盖网络 - 通常在部署群集时创建和配置网络资源。
  • 项目 Calico 网络 - 此模型提供其他网络功能,例如网络策略和流控制。

这两种网络实现都使用覆盖网络配置模型,该模型提供与数据中心网络的其余部分断开连接的 IP 地址分配。

若要了解有关覆盖网络的详细信息,请参阅简介:适用于 Windows 的 Kubernetes 覆盖网络

有关 Calico 网络插件和策略的详细信息,请查看 Calico 网络策略入门

比较网络模型

Flannel

注意

Flannel CNI 已于 2023 年 12 月停用。

Flannel 是专为容器设计的虚拟网络层。 Flannel 会创建一个覆盖主机网络的平面网络。 在该覆盖网络中,会为所有容器/Pod 分配一个 IP 地址,并且所有容器/Pod 都通过连接到彼此的 IP 地址来直接通信。

Calico

Calico 是开源网络和网络安全解决方案,适用于容器、虚拟机和基于本机主机的工作负载。 Calico 支持多个数据平面,包括:Linux eBPF 数据平面、Linux 网络数据平面和 Windows HNS 数据平面。

功能

功能 Flannel Calico
网络策略
IPv6
使用的层 L2 (VxLAN) L2 (VxLAN)
在现有或新的虚拟网络中部署群集
Windows 支持
Pod-Pod 连接
Pod-VM 连接,位于同一网络中的 VM
Pod-VM 连接,位于不同网络中的 VM
Kubernetes 服务
通过负载均衡器公开
网络 具有多守护程序的同一群集上的许多网络 同一群集上的许多网络
部署 Linux:DaemonSet Linux:DaemonSet
Windows:服务 Windows:服务
命令行 calicoctl

重要

目前,默认选择是在覆盖网络模式下使用 Calico。 若要启用 Flannel,请使用 New-AksHciCluster PowerShell 命令的 -primaryNetworkPlugin 参数,并将 flannel 指定为值。 部署群集后,此值不能更改,它适用于 Windows 和 Linux 群集节点。

例如:

New-AksHciCluster -name MyCluster -primaryNetworkPlugin 'flannel'

后续步骤

本文介绍 Windows Server 上 AKS 节点中容器的网络概念。 有关 Windows Server 上的 AKS 概念的详细信息,请参阅以下文章: