网络

在创建和管理 Azure Service Fabric 群集时,可以为节点和应用程序提供网络连接。 网络资源包括 IP 地址范围、虚拟网络、负载均衡器和网络安全组。 在本文中,你会了解针对这些资源的最佳做法。

查看 Azure Service Fabric 网络模式,了解如何创建使用以下功能的群集:现有的虚拟网络或子网、静态公共 IP 地址、仅限内部的负载均衡器,或者内部和外部负载均衡器。

基础结构网络

使用加速网络使虚拟机的性能最大化,方法是:在资源管理器模板中声明 enableAcceleratedNetworking 属性。以下代码片段是关于虚拟机规模集 NetworkInterfaceConfigurations 的,后者可以启用加速网络:

"networkInterfaceConfigurations": [
  {
    "name": "[concat(variables('nicName'), '-0')]",
    "properties": {
      "enableAcceleratedNetworking": true,
      "ipConfigurations": [
        {
        <snip>
        }
      ],
      "primary": true
    }
  }
]

可以在使用加速网络的 Linux 上以及使用加速网络的 Windows 上预配 Service Fabric 群集。

以下 Azure 虚拟机系列 SKU 支持加速网络:D/DSv2、D/DSv3、E/ESv3、F/FS、FSv2 以及 Ms/Mms。 加速网络已使用 Standard_DS8_v3 SKU 在 2019 年 1 月 23 日针对 Service Fabric Windows 群集成功进行测试,以及使用 Standard_DS12_v2 在 2019 年 1 月 29 日针对 Service Fabric Linux 群集成功进行测试。 请注意,加速网络至少需要 4 个 vCPU。

若要在现有的 Service Fabric 群集上启用加速网络,需要首先通过添加虚拟机规模集来横向扩展 Service Fabric 群集,以便执行以下步骤:

  1. 预配已启用加速网络的 NodeType
  2. 将服务及其状态迁移到已预配并已启用加速网络的 NodeType

若要在现有的群集上启用加速网络,必须横向扩展基础结构,因为就地启用加速网络会导致停机,原因它需要可用性集中的所有虚拟机处于停止和解除分配状态,然后才能在现有 NIC 上启用加速网络

群集网络

  • Service Fabric 群集可以部署到现有的虚拟网络中,只需执行 Service Fabric 网络模式中介绍的步骤即可。

  • 对于限制群集的入站和出站流量的节点类型,建议使用网络安全组 (NSG)。 确保在 NSG 中打开所需的端口。

  • Service Fabric 系统服务所在的主节点类型不需通过外部负载均衡器公开,可以通过内部负载均衡器公开

  • 静态公共 IP 地址用于群集。

网络安全规则

下述规则是建议的典型配置需要符合的最低要求。 还包括在不需要可选规则的情况下,哪些规则是操作群集必须遵守的。 它支持使用网络对等互连和 Jumpbox 概念(例如 Azure Bastion)实现完整的安全锁定。 如果未能打开强制端口或未能批准 IP/URL,群集的正常操作会被阻止,并且可能不受支持。

入站

优先级 名称 端口 协议 目标 操作 必需
3900 Azure 门户 19080 TCP ServiceFabric 任意 Allow
3910 客户端 API 19000 TCP Internet 任意 Allow
3920 SFX + 客户端 API 19080 TCP Internet 任意 Allow
3930 群集 1025-1027 TCP VirtualNetwork 任意 Allow
3940 临时 49152-65534 TCP VirtualNetwork 任意 Allow
3950 应用程序 20000-30000 TCP VirtualNetwork 任意 Allow
3960 RDP 3389 TCP Internet 任意 拒绝
3970 SSH 22 TCP Internet 任意 拒绝
3980 自定义终结点 443 TCP Internet 任意 拒绝

有关入站安全规则的更多信息:

  • Azure 门户。 Service Fabric 资源提供程序使用此端口来查询群集相关信息,以便在 Azure 管理门户中显示。 如果无法从 Service Fabric 资源提供程序访问此端口,你会在 Azure 门户中看到“找不到节点”或“UpgradeServiceNotReachable”等消息,并且节点和应用程序列表会显示为空。 这意味着,如果想通过 Azure 管理门户查看群集,负载均衡器必须公开一个公共 IP 地址,而且 NSG 必须允许传入 19080 流量。 建议将此端口用于来自 Service Fabric 资源提供程序的扩展管理操作,以保证更高的可靠性。

  • 客户端 API。 PowerShell 使用的 API 的客户端连接终结点。

  • SFX + 客户端 API。 Service Fabric Explorer 使用此端口来浏览和管理群集。 它与大多数常见 API(如 REST/PowerShell (Microsoft.ServiceFabric.PowerShell.Http)/CLI/.NET)的使用方式一样。

  • 群集。 用于节点间通信。

  • 临时。 Service Fabric 使用其中的一部分端口作为应用程序端口,剩余的端口供 OS 使用。 它还会将此范围映射到 OS 中的现有范围,因此,无论出于何种目的,你都可以使用此处示例中指定的范围。 确保起始端口与结束端口至少相差 255。 如果此差过小,可能会遇到冲突,因为此范围与 OS 共享。 要查看配置的动态端口范围,请运行netsh int ipv4 show dynamic port tcp。 Linux 群集不需要这些端口。

  • 应用程序。 应用程序端口范围的大小应足以满足应用程序的终结点要求。 此范围在计算机上的动态端口范围中应是独占的,即按配置中设置的 ephemeralPorts 范围。 每当需要新端口时,Service Fabric 将使用这些端口,并负责为节点上的这些端口打开防火墙。

  • RDP。 可选(如果对于 jumpbox 场景,Internet 或 VirtualNetwork 需要 RDP)。

  • SSH。 可选(如果对于 jumpbox 场景,Internet 或 VirtualNetwork 需要 SSH)。

  • 自定义终结点。 应用程序启用可访问 Internet 的终结点的示例。

注意

对于大多数使用 Internet 作为源的规则,请考虑限制为你的已知网络,最好是由 CIDR 块定义的。

出站

优先级 名称 端口 协议 目标 操作 必需
4010 资源提供程序 443 TCP 任意 ServiceFabric Allow
4020 下载二进制文件 443 TCP 任意 AzureFrontDoor.FirstParty 允许

有关出站安全规则的更多信息:

  • 资源提供程序。 UpgradeService 与 Service Fabric 资源提供程序之间的连接,用于接收 ARM 部署等管理操作或种子节点选择或主节点类型升级等必需操作。

  • 下载二进制文件。 该升级服务使用地址 download.microsoft.com 来获取库,此关系对于设置、重建映像和运行时升级是必需的。 在“仅内部”负载均衡器的场景中,必须添加具有允许端口 443 出站流量的规则的附加外部负载均衡器。 或者,可以在成功设置后阻止此端口,但在这种情况下,必须将升级包分发到节点,或者该端口必须在短时间内处于打开状态,然后需要手动升级。

将 Azure 防火墙与 NSG 流日志流量分析配合使用,以跟踪连接性问题。 ARM 模板具有 NSG 的 Service Fabric 是一个良好的着手示例。

注意

不应覆盖默认网络安全规则,因为它们可确保节点之间的通信。 网络安全组 - 工作原理。 另一个示例是,需要有端口 80 的出站连接才能执行证书吊销列表检查。

需要其他规则的常见方案

借助 Azure 服务标记可以涵盖所有其他方案。

Azure DevOps

Azure DevOps(服务标记:AzureCloud)中的经典 PowerShell 任务需要客户端对群集 API 的访问权限,例如应用程序部署或操作任务。 这不适用于仅 ARM 模板方法,包括ARM 应用程序资源

优先级 名称 端口 协议 目标 操作 方向
3915 Azure DevOps 19000 TCP AzureCloud 任意 Allow 入站

更新 Windows

修补 Windows 操作系统的最佳做法是通过自动 OS 映像升级来替换 OS 磁盘,而无需任何其他规则。 修补业务流程应用程序将管理 VM 内升级,在此过程中 Windows 更新会应用操作系统补丁,这需要访问“下载中心”(服务标记:AzureUpdateDeliver)来下载更新二进制文件。

优先级 名称 端口 协议 目标 操作 方向
4015 Windows 更新 443 TCP 任意 AzureUpdateDelivery 允许 出站

API 管理

Azure API 管理(服务标记:ApiManagement)的集成需要客户端 API 访问权限才能从群集查询终结点信息。

优先级 名称 端口 协议 目标 操作 方向
3920 API 管理 19080 TCP ApiManagement 任意 Allow 入站

应用程序网络

  • 若要运行 Windows 容器工作负荷,请使用开放网络模式,使服务到服务的通信更方便。

  • 使用反向代理(例如 TraefikService Fabric 反向代理)公开常用的应用程序端口,例如 80 或 443。

  • 对于托管在无法从 Azure 云存储中拉取基本层的气隙计算机上的 Windows 容器,可通过在 Docker 守护程序中使用 --allow-nondistributable-artifacts 标志来重写外部层行为。

后续步骤