部署 AKS 节点的网络概念
适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
可以为 Arc 启用的 AKS 的网络体系结构选择两个 IP 地址分配模型。AKS 支持Azure Kubernetes 服务的多个部署选项(AKS):
- 静态 IP 网络:虚拟网络将静态 IP 地址分配给 Kubernetes 群集 API 服务器、Kubernetes 节点、基础 VM、负载均衡器以及在群集上运行的任何 Kubernetes 服务。
- DHCP 网络:虚拟网络使用 DHCP 服务器将动态 IP 地址分配给 Kubernetes 节点、基础 VM 和负载均衡器。 Kubernetes 群集 API 服务器和在群集上运行的任何 Kubernetes 服务仍分配静态 IP 地址。
注意
此处为 AKS Arc 定义的虚拟网络体系结构可能与数据中心中的基础物理网络体系结构不同。
虚拟 IP 池
虚拟 IP (VIP) 池是 AKS Arc 中任何部署必需的 IP 地址集。VIP 池是一系列保留 IP 地址,用于将 IP 地址分配给 Kubernetes 群集 API 服务器。 它保证始终能够访问 Kubernetes 服务上的应用程序。 请记住,无论选择哪种虚拟网络模型和地址分配模型,都必须为 AKS 主机部署提供 VIP 池。
VIP 池中的 IP 地址数取决于为部署规划的工作负荷群集和 Kubernetes 服务的数量。
根据网络模型,VIP 池定义在以下方面有所不同:
- 静态 IP:如果使用静态 IP,请确保虚拟 IP 地址来自提供的同一子网。
- DHCP:如果网络配置了 DHCP,请与网络管理员协作,从用于 Azure Stack HCI 上的 AKS 部署的 DHCP 范围中排除 VIP 池 IP 范围。
Kubernetes 节点 VM IP 池
Kubernetes 节点部署为 AKS Arc 中的专用虚拟机。AKS 将 IP 地址分配给这些虚拟机,以启用 Kubernetes 节点之间的通信。
- 静态 IP:必须指定 Kubernetes 节点 VM IP 池范围。 此范围中的 IP 地址数取决于你计划用于在 AKS 主机和工作负载 Kubernetes 群集中部署的 Kubernetes 节点总数。 请记住,更新在更新期间使用另外一到三个 IP 地址。
- DHCP:无需指定 Kubernetes 节点 VM 池,因为 Kubernetes 节点的 IP 地址由网络上的 DHCP 服务器动态分配。
采用静态 IP 网络的虚拟网络(推荐)
此网络模型创建一个虚拟网络,用于将 IP 地址从静态定义的地址池分配给部署中的所有对象。 使用静态 IP 网络的另一个好处是,可以保证长期部署和应用程序工作负荷始终可访问。
使用静态 IP 配置定义虚拟网络时,请指定以下参数:
重要
部署 AKS 主机或工作负荷群集后,此版本的 AKS 不允许进行任何网络配置更改。 若要更改网络设置,必须通过删除工作负荷群集并卸载 AKS 来重新开始。
名称:虚拟网络的名称。
地址前缀:要用于子网的 IP 地址前缀。
网关:子网的默认网关的 IP 地址。
DNS 服务器:指向要用于子网的 DNS 服务器的 IP 地址数组。 至少可以提供一个服务器和最多三个服务器。
Kubernetes 节点 VM 池:要用于 Kubernetes 节点 VM 的持续 IP 地址范围。
虚拟 IP 池:要用于 Kubernetes 群集 API 服务器和 Kubernetes 服务的连续 IP 地址范围。
注意
VIP 池必须与 Kubernetes 节点 VM 池属于同一子网。
vLAN ID:虚拟网络的 vLAN ID。 如果省略该虚拟网络,则不会标记虚拟网络。
使用 DHCP 网络的虚拟网络
此网络模型创建一个虚拟网络,该虚拟网络使用 DHCP 将 IP 地址分配给部署中的所有对象。
在使用静态 IP 配置定义虚拟网络时,必须指定以下参数:
名称:虚拟网络的名称。
虚拟 IP 池:要用于 Kubernetes 群集 API 服务器和 Kubernetes 服务的连续 IP 地址范围。
注意
VIP 池地址需要与 DHCP 范围位于同一子网中,并且为了避免地址冲突,必须从 DHCP 范围中排除这些地址。
vLAN ID:虚拟网络的 vLAN ID。 如果省略,则不会标记虚拟网络。
Microsoft本地云服务
Microsoft 本地云 (MOC) 是一种管理堆栈,支持在云中管理 Azure Stack HCI 和基于 Windows Server 的 SDDC 上的虚拟机。 MOC 包括:
- 部署在群集中的高可用性
cloud agent
服务的单个实例。 此代理在 Azure Stack HCI 或 Windows Server 群集内的任意一个节点上运行,并配置为故障转移到另一个节点。 node agent
在每个 Azure Stack HCI 物理节点上运行。
若要启用与 MOC 的通信,必须提供要用于服务的 IP 地址 CIDR。 这是 -cloudserviceCIDR
命令中的 Set-AksHciConfig
一个参数,用于将 IP 地址分配给云代理服务并启用云代理服务的高可用性。
MOC 服务的 IP 地址的选择取决于 Azure Stack HCI 或 Windows Server 上的群集部署使用的基础网络模型。
注意
MOC 服务的 IP 地址分配独立于 Kubernetes 虚拟网络模型。 IP 地址分配取决于基础物理网络,以及为数据中心中的 Azure Stack HCI 或 Windows Server 群集节点配置的 IP 地址。
具有基于 DHCP 的 IP 地址分配模式的 Azure Stack HCI 和 Windows Server 群集节点:如果 Azure Stack HCI 节点从物理网络上存在的 DHCP 服务器分配 IP 地址,则无需向 MOC 服务显式提供 IP 地址,因为 MOC 服务也会从 DHCP 服务器接收 IP 地址。
使用静态 IP 分配模型的 Azure Stack HCI 和 Windows Server 群集节点:如果为 Azure Stack HCI 群集节点分配了静态 IP 地址,则必须为 MOC 云服务显式提供 IP 地址。 MOC 服务的 IP 地址必须与 Azure Stack HCI 和 Windows Server 群集节点的 IP 地址位于同一子网中。 若要显式分配 MOC 服务的 IP 地址,请使用
-cloudserviceCIDR
命令中的Set-AksHciConfig
参数。 请确保输入 CIDR 格式的 IP 地址,例如:“10.11.23.45/16”。
网络模型的比较
DHCP 和静态 IP 都提供 Azure Stack HCI 上的 AKS 和 Windows Server 部署上的网络连接。 不过,这两个模型各有优缺点。 从较高层面讲,需要考虑以下因素:
DHCP - 不保证 AKS 部署中某些资源类型的长期 IP 地址。 - 如果部署超出最初的预期大小,则支持扩展保留的 DHCP IP 地址。
静态 IP - 保证 AKS 部署中所有资源的长期 IP 地址。 - 由于不支持自动扩展 Kubernetes 节点 IP 池,因此,在用尽 Kubernetes 节点 IP 池后,可能会无法创建新的群集。
下表比较了静态 IP 和 DHCP 网络模型之间资源的 IP 地址分配:
功能 | 静态 IP | DHCP |
---|---|---|
Kubernetes 群集 API 服务器 | 使用 VIP 池静态分配。 | 使用 VIP 池静态分配。 |
Kubernetes 节点(在虚拟机上) | 使用 Kubernetes 节点 IP 池分配。 | 动态分配。 |
Kubernetes 服务 | 使用 VIP 池静态分配。 | 使用 VIP 池静态分配。 |
HAProxy 负载均衡器 VM | 使用 Kubernetes 节点 IP 池分配。 | 动态分配。 |
Microsoft本地云服务 | 取决于 Azure Stack HCI 和 Windows Server 群集节点的物理网络配置。 | 取决于 Azure Stack HCI 和 Windows Server 群集节点的物理网络配置。 |
VIP 池 | 必需 | 必需 |
Kubernetes 节点 VM IP 池 | 必需 | 不支持 |
AKS 部署的最低 IP 地址预留
无论部署模型如何,保留 IP 地址数都仍然保持不变。 本部分介绍根据 AKS Arc 部署模型保留的 IP 地址数。
最小 IP 地址预留
至少应为部署保留以下 IP 地址数:
群集类型 | 控制平面节点 | 工作器节点 | 对于更新操作 | 负载均衡器 |
---|---|---|---|---|
AKS 主机 | 一个 IP | NA | 两个 IP | NA |
工作负荷群集 | 每个节点一个 IP | 每个节点一个 IP | 5 个 IP | 一个 IP |
此外,还应为 VIP 池保留以下 IP 地址数:
资源类型 | IP 地址数 |
---|---|
群集 API 服务器 | 每个群集 1 个 |
Kubernetes 服务 | 每个服务 1 个 |
应用程序服务 | 计划的每个服务 1 个 |
可以看到,所需的 IP 地址数根据 AKS 部署的体系结构以及 Kubernetes 群集上运行的服务数而变化。 建议为部署保留至少 256 个 IP 地址(/24 子网)。
分步演示示例部署
Jane 是 IT 管理员,刚从 Azure Arc 启用的 AKS 开始。她想要在 Azure Stack HCI 群集上部署两个 Kubernetes 群集:Kubernetes 群集 A 和 Kubernetes 群集 B。 她还希望在群集之上运行投票应用程序。 此应用程序包含跨两个群集和一个后端数据库的一个实例运行的前端 UI 的三个实例。
- Kubernetes 群集 A 有 3 个控制平面节点和 5 个工作器节点。
- Kubernetes 群集 B 有 1 个控制平面节点和 3 个工作器节点。
- 前端 UI 的 3 个实例(端口 443)。
- 后端数据库的 1 个实例(端口 80)。
根据上表,她必须保留:
- AKS 主机的 3 个 IP 地址(一个用于控制平面节点的 IP,两个 IP 用于运行更新操作)。
- 群集 A 中控制平面节点的 3 个 IP 地址(每个控制平面节点一个 IP)。
- 群集 A 中辅助角色节点的 5 个 IP 地址(每个工作器节点一个 IP)。
- 群集 A 的 6 个 IP 地址(用于运行更新操作的 5 个 IP)和 1 个用于负载均衡器的 IP。
- 群集 B 中控制平面节点的 1 个 IP 地址(每个控制平面节点一个 IP)。
- 群集 B 中辅助角色节点的 3 个 IP 地址(每个工作器节点有一个 IP)。
- 群集 B 的 6 个 IP 地址(用于运行更新操作的 5 个 IP)和 1 个用于负载均衡器的 IP。
- Kubernetes 群集 API 服务器的 2 个 IP 地址(每个 Kubernetes 群集一个 IP)。
- Kubernetes 服务的 3 个 IP 地址(每个前端 UI 实例有一个 IP 地址,因为它们都使用相同的端口。只要后端数据库使用不同的端口,后端数据库就可以使用这三个 IP 地址中的任何一个。
如前所述,Jane 总共需要 32 个 IP 地址来部署群集。 因此,Jane 应为虚拟网络保留 /26 子网。
基于静态 IP 网络模型拆分保留的 IP 地址
尽管保留 IP 地址的总数保持不变,但部署模型确定这些 IP 地址在 IP 组之间如何划分。 静态 IP 网络模型具有 2 个 IP 池:
- Kubernetes 节点 VM IP 池:适用于 Kubernetes 节点 VM 和负载均衡器 VM。 此 IP 池还包括运行更新操作所需的 IP 地址。
- 虚拟 IP 池:适用于 Kubernetes API 服务器和 Kubernetes 服务。
使用此示例时,Jane 必须进一步将这些 IP 地址划分为 VIP 池和 Kubernetes 节点 IP 池:
- 5(两个用于 Kubernetes 群集 API 服务器,3 个用于 Kubernetes 服务)的 VIP 池的 32 个 IP 地址中。
- 27(她的 Kubernetes 节点和基础 VM、负载均衡器 VM 和更新操作的所有 IP 地址)用于她的 Kubernetes 节点 IP 池。
基于 DHCP 网络模型拆分保留的 IP 地址
虽然保留 IP 地址的总数保持不变,但部署模型确定这些 IP 地址在 IP 组之间如何划分。 如前文所述,DHCP 网络模型具有 1 个 IP 范围:
- 虚拟 IP 池:适用于 Kubernetes API 服务器和 Kubernetes 服务
使用前面的示例:
- Jane 必须在 DHCP 服务器上保留总共 32 个 IP 地址或 /26 子网。
- 她必须从 VIP 池的 32 个 IP 地址的 DHCP 范围中排除 5(两个用于 Kubernetes 群集 API 服务器,3 个用于 Kubernetes 服务)。
入口控制器
在目标群集的部署过程中, HAProxy
会创建基于负载均衡器的资源。 负载均衡器配置为在给定端口上将流量分发到服务中的 Pod。 负载均衡器仅在第 4 层工作,这表示服务不知道实际应用程序;即,它不能进行任何其他路由注意事项。
入口控制器在第 7 层工作,可使用更智能的规则来分发应用程序流量。 入口控制器的常见用途是基于入站 URL 将 HTTP 流量路由到不同的应用程序。
后续步骤
本文介绍在 Azure Stack HCI 上部署 AKS 节点的一些网络概念。 有关详细信息,请参阅以下文章: