在 Service Fabric 托管群集中使用 Azure 应用程序网关

Azure 应用程序网关是一种 Web 流量负载均衡器,可用于管理 Web 应用程序的流量。 使用应用程序网关有几个好处。 Service Fabric 托管群集支持 Azure 应用程序网关,并允许将节点类型连接到应用程序网关。 可以创建 Azure 应用程序网关并将资源 ID 传递给 Service Fabric 托管群集 ARM 模板。

如何在 Service Fabric 托管群集中使用应用程序网关

要求

使用 Service Fabric API 版本 2022-08-01-Preview(或更高版本)。

步骤

以下部分介绍在 Service Fabric 托管群集中使用 Azure 应用程序网关时应执行的步骤:

  1. 按照“快速入门:使用门户引导 Web 流量 - Azure 应用程序网关”中的步骤操作。 记下在后面的步骤中使用的资源 ID。

  2. 将应用程序网关链接到 Service Fabric 托管群集的节点类型。 为此,必须授予 SFMC 加入应用程序网关的权限。 通过向应用程序网关资源分配 SFMC“网络参与者”角色来授予此权限,如以下步骤中所述:

    A. 从 Service Fabric 资源提供程序应用程序的订阅中获取服务 Id

    Connect-AzAccount -Environment AzureChinaCloud
    Select-AzSubscription -SubscriptionId <SubId>
    Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider"
    

    注意

    确保你位于正确的订阅中,如果订阅位于其他租户中,则主体 ID 将更改。

    ServicePrincipalNames : {74cb6831-0dbb-4be1-8206-fd4df301cdc2}
    ApplicationId         : 74cb6831-0dbb-4be1-8206-fd4df301cdc2
    ObjectType            : ServicePrincipal
    DisplayName           : Azure Service Fabric Resource Provider
    Id                    : 00000000-0000-0000-0000-000000000000
    

    请记下上面的输出中的 Id,它将在后面的步骤中用作 principalId

    角色定义名称 角色定义 ID
    网络参与者 4d97b98b-1d4f-4787-a291-c67834d212e7

    请记下 Role definition nameRole definition ID 属性值,以便在后面的步骤中使用

    B. 示例 ARM 部署模板向具有参与者访问权限的应用程序网关添加角色分配。 有关 Azure 角色的详细信息,请参阅 Azure 内置角色 - Azure RBAC。 此角色分配在模板的资源部分中定义,其中包含 PrincipalId 和从第一步确定的角色定义 ID。

    "variables": {
      "sfApiVersion": "2022-08-01-preview",
      "networkApiVersion": "2020-08-01",
      "clusterResourceId": "[resourceId('Microsoft.ServiceFabric/managedclusters', parameters('clusterName'))]",
      "rgRoleAssignmentId": "[guid(resourceGroup().id, 'SFRP-NetworkContributor')]",
      "auxSubnetName": "AppGateway",
      "auxSubnetNsgName": "AppGatewayNsg",
      "auxSubnetNsgID": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('auxSubnetNsgName'))]",
      "frontendIPName": "[concat(parameters('clusterName'), '-AppGW-IP')]",
      "appGatewayName": "[concat(parameters('clusterName'), '-AppGW')]",
      "appGatewayDnsName": "[concat(parameters('clusterName'), '-appgw')]",
      "appGatewayResourceId": "[resourceId('Microsoft.Network/applicationGateways', variables('appGatewayName'))]",
      "appGatewayFrontendPort": 80,
      "appGatewayBackendPort": 8000,
      "appGatewayBackendPool": "AppGatewayBackendPool",
      "frontendConfigAppGateway": [
        {
          "applicationGatewayBackendAddressPoolId": "[resourceId('Microsoft.Network/applicationGateways/backendAddressPools', variables('appGatewayName'), variables('appGatewayBackendPool'))]"
        }
      ],
      "primaryNTFrontendConfig": "[if(parameters('enableAppGateway'), variables('frontendConfigAppGateway'), createArray())]",
      "secondaryNTFrontendConfig": "[if(parameters('enableAppGateway'), variables('frontendConfigAppGateway'), createArray())]"
    },
    "resources": [
      {
        "type": "Microsoft.Authorization/roleAssignments",
        "apiVersion": "2020-04-01-preview",
        "name": "[variables('rgRoleAssignmentId')]",
        "properties": {
          "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7')]",
          "principalId": "[parameters('sfrpPrincipalId')]"
        }
      },
    

    或者,也可以使用从第一步确定的 PrincipalId 和角色定义名称“参与者”(如果适用),通过 PowerShell 添加角色分配。

    New-AzRoleAssignment -PrincipalId "sfrpPrincipalId" `
    -RoleDefinitionId "4d97b98b-1d4f-4787-a291-c67834d212e7" `
    -ResourceName <resourceName> `
    -ResourceType <resourceType> `
    -ResourceGroupName <resourceGroupName>
    
  3. 使用分配角色并在创建 Service Fabric 托管群集的过程中添加应用程序网关配置的示例 ARM 部署模板。 使用上方获取的 principalIdappGatewayNameappGatewayBackendPoolId 更新模板。

  4. 还可以修改现有的 ARM 模板,并在 Microsoft.ServiceFabric/managedClusters 资源下添加新属性 appGatewayBackendPoolId,该资源采用应用程序网关的资源 ID。

ARM 模板:

"frontendConfigurations": [ 
  { 
     "applicationGatewayBackendAddressPoolId": "<appGatewayBackendPoolId>" 
  } 
]