Azure Arc 网络要求启用的 AKS

适用于:Azure Stack HCI 版本 23H2

本文介绍 Azure Arc 启用的 AKS 中 VM 和应用程序的核心网络概念。本文还介绍了创建 Kubernetes 群集所需的网络先决条件。 建议与网络管理员合作,提供和设置部署由 Arc 启用的 AKS 所需的网络参数。

在此概念性文章中,将介绍以下关键组件。 这些组件需要静态 IP 地址,以便 AKS Arc 群集和应用程序能够成功创建和运行:

  • AKS 群集 VM
  • AKS 控制平面 IP
  • 容器化应用程序的负载均衡器

AKS 群集 VM 的网络

Kubernetes 节点部署为 Arc 启用的 AKS 中的专用虚拟机。为这些 VM 分配 IP 地址,以启用 Kubernetes 节点之间的通信。 AKS Arc 使用 Azure Stack HCI 逻辑网络为 Kubernetes 群集的基础 VM 提供 IP 地址和网络。 有关逻辑网络的详细信息,请参阅 Azure Stack HCI 的逻辑网络。 必须计划在 Azure Stack HCI 环境中为每个 AKS 群集节点 VM 保留一个 IP 地址。

注意

静态 IP 是向 AKS Arc VM 分配 IP 地址的唯一受支持的模式。 这是因为 Kubernetes 要求分配给 Kubernetes 节点的 IP 地址在 Kubernetes 群集的整个生命周期中保持不变。

若要将逻辑网络用于 AKS Arc 群集创建操作,需要以下参数:

逻辑网络参数 说明 AKS Arc 群集的必需参数
--address-prefixes 网络的 AddressPrefix。 目前仅支持 1 个地址前缀。 用法:--address-prefixes "10.220.32.16/24" 支持
--dns-servers DNS 服务器 IP 地址的空格分隔列表。 用法:--dns-servers 10.220.32.16 10.220.32.17 支持
--gateway 网关。 网关 IP 地址必须在地址前缀的范围内。 用法:--gateway 10.220.32.16 支持
--ip-allocation-method IP 地址分配方法。 支持的值为“Static”。 用法:--ip-allocation-method "Static" 支持
--ip-pool-start IP 池的起始 IP 地址。 地址必须在地址前缀的范围内。 用法:--ip-pool-start "10.220.32.18" 支持
--ip-pool-end IP 池的结束 IP 地址。 地址必须在地址前缀的范围内。 用法:--ip-pool-end "10.220.32.38" 支持
--vm-switch-name VM 交换机的名称。 用法:--vm-switch-name "vm-switch-01" 支持

控制平面 IP

Kubernetes 使用控制平面来确保 Kubernetes 群集中的每个组件都保持所需状态。 控制平面还管理和维护保存容器化应用程序的工作器节点。 Arc 启用的 AKS 部署 KubeVIP 负载均衡器,以确保 Kubernetes 控制平面的 API 服务器 IP 地址随时可用。 此 KubeVIP 实例需要一个不可变的“控制平面 IP 地址”才能正常工作。

注意

控制平面 IP 是创建 Kubernetes 群集所需的参数。 必须确保 Kubernetes 群集的控制平面 IP 地址不会与任何其他内容重叠,包括 Arc VM 逻辑网络、基础结构网络 IP、负载均衡器等。控制平面 IP 还必须在逻辑网络的地址前缀范围内,但位于 IP 池之外。 这是因为 IP 池仅用于 VM,如果从控制平面的 IP 池中选择 IP 地址,可能会导致 IP 地址冲突。 重叠的 IP 地址可能会导致 AKS 群集和使用 IP 地址的任何其他位置出现意外故障。 必须计划在环境中为每个 Kubernetes 群集保留一个 IP 地址。

容器化应用程序的负载均衡器 IP

负载均衡器main用途是跨 Kubernetes 群集中的多个节点分配流量。 此负载均衡有助于防止停机并提高应用程序的整体性能。 AKS 支持以下选项来为 Kubernetes 群集部署负载均衡器:

无论是选择 MetalLB Arc 扩展,还是自带负载均衡器,都必须为负载均衡器服务提供一组 IP 地址。 你有以下选择:

  • 为 AKS Arc VM 所在的子网中的服务提供 IP 地址。
  • 如果应用程序需要外部负载均衡,请使用其他网络和 IP 地址列表。

无论选择哪种选项,都必须确保分配给负载均衡器的 IP 地址不会与 Kubernetes 群集的逻辑网络或控制平面 IP 中的 IP 地址冲突。 IP 地址冲突可能会导致 AKS 部署和应用程序中出现不可预见的故障。

Kubernetes 群集和应用程序的简单 IP 地址规划

在以下方案演练中,为 Kubernetes 群集和服务保留来自单个网络的 IP 地址。 这是 IP 地址分配的最简单直接方案。

IP 地址要求 最小 IP 地址数 进行此预留的方式和位置
AKS Arc VM IP 为 Kubernetes 群集中的每个工作器节点保留一个 IP 地址。 例如,如果要创建 3 个节点池,每个节点池中有 3 个节点,则 IP 池中需要有 9 个 IP 地址。 通过 Arc VM 逻辑网络中的 IP 池保留 AKS Arc VM 的 IP 地址。
AKS Arc K8s 版本升级 IP 由于 AKS Arc 执行滚动升级,因此请为每个 AKS Arc 群集保留一个 IP 地址,以便执行 Kubernetes 版本升级操作。 通过 Arc VM 逻辑网络中的 IP 池保留 K8s 版本升级操作的 IP 地址。
控制平面 IP 为环境中的每个 Kubernetes 群集保留一个 IP 地址。 例如,如果要总共创建 5 个群集,请保留 5 个 IP 地址,每个 Kubernetes 群集一个。 为 Arc VM 逻辑网络所在的子网中但位于指定 IP 池外部的控制平面 IP 保留 IP 地址。
负载均衡器 IP 保留的 IP 地址数取决于应用程序部署模型。 首先,可以为每个 Kubernetes 服务保留一个 IP 地址。 为 Arc VM 逻辑网络所在的子网中但位于指定 IP 池外部的控制平面 IP 保留 IP 地址。

Kubernetes 群集和应用程序的 IP 地址预留示例演练

Jane 是一名 IT 管理员,刚从 Azure Arc 启用的 AKS 开始。她希望在 Azure Stack HCI 群集上部署两个 Kubernetes 群集:Kubernetes 群集 A 和 Kubernetes 群集 B。 她还希望在群集 A 上运行投票应用程序。此应用程序具有跨两个群集运行的前端 UI 的三个实例和一个后端数据库实例。 她的所有 AKS 群集和服务都在具有单个子网的单个网络中运行。

  • Kubernetes 群集 A 有 3 个控制平面节点和 5 个工作器节点。
  • Kubernetes 群集 B 有 1 个控制平面节点和 3 个工作器节点。
  • 前端 UI 的 3 个实例 (端口 443) 。
  • 后端数据库的 1 个实例 (端口 80) 。

根据上表,她必须在子网中总共保留 19 个 IP 地址:

  • 群集 A 中 AKS Arc 节点 VM 的 8 个 IP 地址 (每个 K8s 节点 VM) 一个 IP。
  • 群集 B 中 AKS Arc 节点 VM 的 4 个 IP 地址 (每个 K8s 节点 VM) 一个 IP。
  • 2 个 IP 地址用于运行 AKS Arc 升级操作, (每个 AKS Arc 群集) 一个 IP 地址。
  • AKS Arc 控制平面的 2 个 IP 地址 (每个 AKS Arc 群集 1 个 IP 地址)
  • Kubernetes 服务的 3 个 IP 地址 (每个前端 UI 实例的一个 IP 地址,因为它们都使用相同的端口。后端数据库可以使用三个 IP 地址中的任何一个,只要它使用不同的端口) 。

继续此示例,并将其添加到下表中,你将得到:

参数 IP 地址数 进行此预留的方式和位置
AKS Arc VM 和 K8s 版本升级 保留 14 个 IP 地址 通过 Azure Stack HCI 逻辑网络中的 IP 池进行此预留。
控制平面 IP 保留 2 个 IP 地址,一个用于 AKS Arc 群集 controlPlaneIP使用 参数传递控制平面 IP 的 IP 地址。 确保此 IP 与 Arc 逻辑网络位于同一子网中,但在 Arc 逻辑网络中定义的 IP 池之外。
负载均衡器 IP 3 个用于 Kubernetes 服务的 IP 地址,用于 Jane 的投票应用程序。 在群集 A 上安装负载均衡器时,会使用这些 IP 地址。可以使用 MetalLB Arc 扩展,也可以自带第三方负载均衡器。 确保此 IP 与 Arc 逻辑网络位于同一子网中,但位于 Arc VM 逻辑网络中定义的 IP 池之外。

代理设置

AKS 中的代理设置继承自底层基础结构系统。 尚不支持为 Kubernetes 群集设置各个代理设置和更改代理设置的功能。

跨 VLAN & 网络端口要求

部署 Azure Stack HCI 时,会在 管理网络的子网上分配至少六个静态 IP 地址的连续块,省略物理服务器已使用的地址。 这些 IP 由 Azure Stack HCI 和内部基础结构 (Arc 资源网桥) 用于 Arc VM 管理和 AKS Arc。如果向 Arc 资源网桥相关 Azure Stack HCI 服务提供 IP 地址的管理网络与用于创建 AKS 群集的逻辑网络位于不同的 VLAN 上,则需要确保打开以下端口才能成功创建和操作 AKS 群集。

Destination Port 目标 说明 跨 VLAN 网络说明
22 用于 AKS Arc VM 的逻辑网络 管理网络中的 IP 地址 收集日志以便进行故障排除时是必需的。 如果使用单独的 VLAN,则用于 Azure Stack HCI 和 Arc 资源网桥的管理网络中的 IP 地址需要访问此端口上的 AKS Arc 群集 VM。
6443 用于 AKS Arc VM 的逻辑网络 管理网络中的 IP 地址 与 Kubernetes API 通信所必需的。 如果使用单独的 VLAN,则用于 Azure Stack HCI 和 Arc 资源网桥的管理网络中的 IP 地址需要访问此端口上的 AKS Arc 群集 VM。
55000 管理网络中的 IP 地址 用于 AKS Arc VM 的逻辑网络 云代理 gRPC 服务器 如果使用单独的 VLAN,AKS Arc VM 需要访问管理网络中用于此端口上的云代理 IP 和群集 IP 的 IP 地址。
65000 管理网络中的 IP 地址 用于 AKS Arc VM 的逻辑网络 云代理 gRPC 身份验证 如果使用单独的 VLAN,AKS Arc VM 需要访问管理网络中用于此端口上的云代理 IP 和群集 IP 的 IP 地址。

防火墙 URL 异常

有关 Azure Arc 防火墙/代理 URL 允许列表的信息,请参阅 Azure Arc 资源网桥网络要求Azure Stack HCI 23H2 网络要求

对于 Kubernetes 群集的部署和操作,必须可从部署中的所有物理节点和 AKS Arc VM 访问以下 URL。 确保防火墙配置中允许这些 URL:

URL 端口 服务 注释
https://mcr.microsoft.com 443 Microsoft 容器注册表 用于官方的 Microsoft 项目,例如容器映像。
https://*.his.arc.azure.com 443 Azure Arc 标识服务 用于标识和访问控制。
https://*.dp.kubernetesconfiguration.azure.com 443 Kubernetes 用于 Azure Arc 配置。
https://*.servicebus.windows.net 443 群集连接 用于安全地连接到已启用 Azure Arc 的 Kubernetes 群集,而无需在防火墙上启用任何入站端口。
https://guestnotificationservice.azure.com 443 通知服务 用于来宾通知操作。
https://*.dp.prod.appliances.azure.com 443 数据平面服务 用于资源网桥 (设备) 的数据平面操作。
*.data.mcr.microsoft.com
azurearcfork8s.azurecr.io
linuxgeneva-microsoft.azurecr.io
pipelineagent.azurecr.io
ecpacr.azurecr.io
443 下载代理 用于下载映像和代理。
*.prod.microsoftmetrics.com
*.prod.hot.ingestion.msftcloudes.com
dc.services.visualstudio.com
*.prod.warm.ingest.monitor.core.windows.net
gcs.prod.monitoring.core.windows.net
443 指标和运行状况监视 用于指标和监视遥测流量。
*.blob.core.windows.net
*.dl.delivery.mp.microsoft.com
*.do.dsp.mp.microsoft.com
443 TCP 用于下载资源网桥 (设备) 映像。
https://azurearcfork8sdev.azurecr.io 443 Kubernetes 用于下载 Azure Arc for Kubernetes 容器映像。
https://adhs.events.data.microsoft.com 443 遥测 ADHS 是一种在设备/mariner OS 中运行的遥测服务。 定期用于从控制平面节点向 Microsoft 发送所需的诊断数据。 当遥测从 mariner 传出时使用,这意味着任何 Kubernetes 控制平面。
https://v20.events.data.microsoft.com 443 遥测 用于定期从 Windows Server 主机向 Microsoft 发送所需的诊断数据。
gcr.io 443 Google 容器注册表 用于 Kubernetes 官方项目,例如容器基础映像。
pypi.org 443 Python 包 验证 Kubernetes 和 Python 版本。
*.pypi.org 443 Python 包 验证 Kubernetes 和 Python 版本。
https://hybridaks.azurecr.io 443 容器映像 访问 HybridAKS 操作员映像所必需的。
aka.ms 443 az extensions 下载 Azure CLI 扩展(如 aksarcconnectedk8s)所必需的
*.login.microsoft.com 443 Azure 提取和更新 Azure 资源管理器令牌所需的终结点。
sts.windows.net 443 Azure Arc 对于群集连接和基于自定义位置的方案。
hybridaksstorage.z13.web.core.windows.net 443 Azure Stack HCI Azure 存储中托管的 AKSHCI 静态网站。
raw.githubusercontent.com 443 GitHub 用于 GitHub。
www.microsoft.com 80 Microsoft 官方网站。 Microsoft 官方网站。
*.prod.do.dsp.mp.microsoft.com 443 Microsoft Update 资源网桥 (设备) 映像下载。
files.pythonhosted.org 443 Python 包 Python 包。

后续步骤

为 Azure Stack HCI 23H2 上的 Kubernetes 群集创建逻辑网络