Создание шаблона Resource Manager для кластера Service Fabric

Кластер Azure Service Fabric — это подключенный к сети набор виртуальных машин, в котором вы развертываете микрослужбы и управляете ими. Кластер Service Fabric, работающий в Azure, — это ресурс Azure, который развертывается, управляется и отслеживается с помощью Resource Manager. В этой статье описывается создание шаблона Resource Manager для кластера Service Fabric, запущенного в Azure. После создания шаблона можно развернуть кластер в Azure.

Безопасность кластера настраивается при его начальной настройке. Позже ее невозможно будет изменить. Перед настройкой кластера ознакомьтесь со статьей Сценарии защиты кластера Service Fabric. В Azure для защиты кластера и его конечных точек, проверки подлинности клиентов и шифрования данных Service Fabric требует использования сертификата x509. Идентификатор Microsoft Entra также рекомендуется защитить доступ к конечным точкам управления. Перед созданием кластера необходимо создать клиенты и пользователи Microsoft Entra. Дополнительные сведения см. в статье "Настройка идентификатора Microsoft Entra для проверки подлинности клиентов".

Прежде чем развертывать производственный кластер для запуска рабочих нагрузок, обязательно ознакомьтесь со статьей Контрольный список готовности рабочей среды.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Создание шаблона Resource Manager

Примеры шаблонов Resource Manager доступны в образцах Azure на сайте GitHub. Их можно использовать в качестве отправной точки для создания шаблона кластера.

В этой статье используется пример шаблона защищенного кластера с пятью узлами и его параметры. Загрузите файлы azuredeploy.json и azuredeploy.parameters.json на компьютер и откройте их в текстовом редакторе.

Примечание.

Для национальных облаков (Azure для государственных организаций, Microsoft Azure, управляемых 21Vianet, Azure в Германии), также следует добавить следующие fabricSettings сведения в шаблон: AADLoginEndpointAADTokenEndpointFormat и AADCertEndpointFormat.

Добавление сертификатов

Сертификаты добавляются в шаблон Resource Manager кластера с помощью ссылок на хранилище ключей, которое содержит ключи сертификата. Добавьте эти параметры и значения хранилища ключей в файл параметров шаблона Resource Manager (azuredeploy.parameters.json).

Добавление всех сертификатов в osProfile набора масштабирования виртуальных машин

Каждый сертификат, который устанавливается в кластере, должен быть настроен в разделе osProfile ресурса масштабируемого набора (Microsoft.Compute/virtualMachineScaleSets). Это указывает, что поставщик ресурсов должен установить сертификат на виртуальных машинах. Эта установка содержит сертификат кластера, а также все сертификаты безопасности приложений, которые планируется использовать для приложений.

{
  "apiVersion": "[variables('vmssApiVersion')]",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  ...
  "properties": {
    ...
    "osProfile": {
      ...
      "secrets": [
        {
          "sourceVault": {
            "id": "[parameters('sourceVaultValue')]"
          },
          "vaultCertificates": [
            {
              "certificateStore": "[parameters('clusterCertificateStorevalue')]",
              "certificateUrl": "[parameters('clusterCertificateUrlValue')]"
            },
            {
              "certificateStore": "[parameters('applicationCertificateStorevalue')",
              "certificateUrl": "[parameters('applicationCertificateUrlValue')]"
            },
            ...
          ]
        }
      ]
    }
  }
}

Настройка сертификата кластера Service Fabric

Сертификат аутентификации кластера должен быть настроен в ресурсе кластера Service Fabric (Microsoft.ServiceFabric/clusters) и расширении Service Fabric для масштабируемых наборов виртуальных машин в ресурсе масштабируемого набора виртуальных машин. Это позволяет поставщику ресурсов Service Fabric настроить его, чтобы использовать для аутентификации кластера и сервера на конечных точках управления.

Добавьте информацию о сертификате для ресурса масштабируемого набора виртуальных машин

{
  "apiVersion": "[variables('vmssApiVersion')]",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  ...
  "properties": {
    ...
    "virtualMachineProfile": {
      "extensionProfile": {
        "extensions": [
          {
            "name": "[concat('ServiceFabricNodeVmExt_',variables('vmNodeType0Name'))]",
            "properties": {
              ...
              "settings": {
                ...
                "certificate": {
                  "commonNames": ["[parameters('certificateCommonName')]"],
                  "x509StoreName": "[parameters('clusterCertificateStoreValue')]"
                },
                ...
              }
            }
          }
        ]
      }
    }
  }
}

Добавьте информацию о сертификате в кластерный ресурс Service Fabric

{
  "apiVersion": "2018-02-01",
  "type": "Microsoft.ServiceFabric/clusters",
  "name": "[parameters('clusterName')]",
  "location": "[parameters('clusterLocation')]",
  "dependsOn": [
    "[concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName'))]"
  ],
  "properties": {
    "certificateCommonNames": {
        "commonNames": [
        {
            "certificateCommonName": "[parameters('certificateCommonName')]",
            "certificateIssuerThumbprint": ""
        }
        ],
        "x509StoreName": "[parameters('certificateStoreValue')]"
    },
    ...
  }
}

Добавление конфигурации Microsoft Entra для использования идентификатора Microsoft Entra для доступа к клиенту

Вы добавляете конфигурацию Microsoft Entra в шаблон Resource Manager кластера, ссылаясь на хранилище ключей, содержащее ключи сертификата. Добавьте эти параметры и значения Microsoft Entra в файл параметров шаблона Resource Manager (azuredeploy.parameters.json).

Примечание.

В Linux перед созданием кластера необходимо создать клиенты и пользователи Microsoft Entra. Дополнительные сведения см. в статье "Настройка идентификатора Microsoft Entra для проверки подлинности клиентов".

{
  "apiVersion": "2018-02-01",
  "type": "Microsoft.ServiceFabric/clusters",
  "name": "[parameters('clusterName')]",
  ...
  "properties": {
    "certificateCommonNames": {
        "commonNames": [
        {
            "certificateCommonName": "[parameters('certificateCommonName')]",
            "certificateIssuerThumbprint": ""
        }
        ],
        "x509StoreName": "[parameters('certificateStoreValue')]"
    },
    ...
    "azureActiveDirectory": {
      "tenantId": "[parameters('aadTenantId')]",
      "clusterApplication": "[parameters('aadClusterApplicationId')]",
      "clientApplication": "[parameters('aadClientApplicationId')]"
    },
    ...
  }
}

Указание значений в файле параметров

Наконец, используйте полученные значения в результате выполнения команд PowerShell для хранилища ключей и Azure AD, чтобы заполнить файл параметров.

Если вы планируете использовать модули Azure Service Fabric RM для PowerShell, вам не нужно вводить информацию о сертификате кластера. Если же вы хотите, чтобы система сгенерировала самозаверяющий сертификат для обеспечения безопасности кластера, просто задайте нулевые значения.

Примечание.

Для сбора и заполнения этих пустых значений параметров модулями RM названия параметров должны совпадать с названиями ниже.

"clusterCertificateThumbprint": {
    "value": ""
},
"certificateCommonName": {
    "value": ""
},
"clusterCertificateUrlValue": {
    "value": ""
},
"sourceVaultvalue": {
    "value": ""
},

Если вы используете сертификаты приложения или существующий кластер, отправленный в хранилище ключей, необходимо получить и указать эти сведения.

Модули RM не имеют возможности создавать конфигурацию Microsoft Entra для вас, поэтому если вы планируете использовать идентификатор Microsoft Entra для клиентского доступа, его необходимо заполнить.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        ...
        "clusterCertificateStoreValue": {
            "value": "My"
        },
        "clusterCertificateThumbprint": {
            "value": "<thumbprint>"
        },
        "clusterCertificateUrlValue": {
            "value": "https://myvault.vault.azure.net:443/secrets/myclustercert/4d087088df974e869f1c0978cb100e47"
        },
        "applicationCertificateStorevalue": {
            "value": "My"
        },
        "applicationCertificateUrlValue": {
            "value": "https://myvault.vault.azure.net:443/secrets/myapplicationcert/2e035058ae274f869c4d0348ca100f08"
        },
        "sourceVaultvalue": {
            "value": "/subscriptions/<guid>/resourceGroups/mycluster-keyvault/providers/Microsoft.KeyVault/vaults/myvault"
        },
        "aadTenantId": {
            "value": "<guid>"
        },
        "aadClusterApplicationId": {
            "value": "<guid>"
        },
        "aadClientApplicationId": {
            "value": "<guid>"
        },
        ...
    }
}

Тестирование шаблона

Используйте следующую команду PowerShell для тестирования шаблона Resource Manager с помощью файла параметров.

Test-AzResourceGroupDeployment -ResourceGroupName "myresourcegroup" -TemplateFile .\azuredeploy.json -TemplateParameterFile .\azuredeploy.parameters.json

Если возникают проблемы и приходят зашифрованные сообщения, в качестве решения попробуйте использовать параметр -Debug (отладка).

Test-AzResourceGroupDeployment -ResourceGroupName "myresourcegroup" -TemplateFile .\azuredeploy.json -TemplateParameterFile .\azuredeploy.parameters.json -Debug

На следующей схеме показано, где хранилище ключей и конфигурация Microsoft Entra соответствуют шаблону Resource Manager.

Resource Manager dependency map

Следующие шаги

Теперь, когда кластер обладает шаблоном, можно развернуть его в Azure. Перед развертыванием рабочего кластера необходимо ознакомиться со статьей Контрольный список готовности рабочей среды.

Дополнительные сведения о синтаксисе и свойствах JSON для ресурсов, развертываемых в этой статье: