Развертывание кластера Service Fabric на платформе Linux в виртуальной сети Azure

Из этой статьи вы узнаете как развернуть кластер Service Fabric на платформе Linux в виртуальную сеть Azure с помощью Azure CLI и шаблона. После окончания этого учебника у вас будет кластер в облаке, в который можно разворачивать приложения. Создание кластера Windows с помощью PowerShell описывается в разделе Развертывание безопасного кластера Service Fabric на платформе Windows в виртуальной сети Azure.

Необходимые компоненты

Подготовка к работе:

Ниже приведены процедуры для создания кластера Service Fabric с семью узлами. Чтобы рассчитать затраты, связанные с запуском кластера Service Fabric в Azure, используйте калькулятор цен Azure.

Скачивание и изучение шаблона

Скачайте следующие файлы шаблона Resource Manager:

Для Ubuntu 18.04 LTS:

  • AzureDeploy.json
    • для атрибута vmImageSku задано значение "18.04-LTS"
    • Ресурс Microsoft.ServiceFabric/clusters
      • для параметра apiVersion задано значение "2019-03-01"
      • Для свойства vmImage задано значение "Ubuntu18_04".
  • AzureDeploy.Parameters.json

Для Ubuntu 20.04 LTS:

  • AzureDeploy.json
    • для атрибута vmImageSku задано значение "20.04-LTS"
    • Ресурс Microsoft.ServiceFabric/clusters
      • для параметра apiVersion задано значение "2019-03-01"
      • для свойства vmImage задано значение "Ubuntu20_04"
  • AzureDeploy.Parameters.json

Эти шаблоны позволяют развернуть безопасный кластер семи виртуальных машин и трех типов узлов в виртуальную сеть. Другие примеры шаблонов можно найти на сайте GitHub. Файл Azuredeploy.json развертывает ряд ресурсов, в том числе следующие.

Кластер Service Fabric

В ресурсе Microsoft.ServiceFabric/clusters развернут кластер Linux со следующими характеристиками:

  • три типа узлов;
  • пять узлов на первичном типе узла (можно настроить в параметрах шаблона), по одном узлу на каждый тип узла;
  • ОС: (Ubuntu 18.04 LTS / Ubuntu 20.04) (настраивается в параметрах шаблона)
  • защищенный сертификат (можно настроить в параметрах шаблона);
  • служба DNS включена;
  • уровень устойчивости Bronze (можно настроить в параметрах шаблона);
  • уровень надежности Silver (можно настроить в параметрах шаблона);
  • конечная точка подключения клиента: 19000 (можно настроить в параметрах шаблона);
  • конечная точка HTTP-шлюза: 19080 (можно настроить в параметрах шаблона).

Azure Load Balancer

В ресурсе Microsoft.Network/loadBalancers настроена подсистема балансировки нагрузки, а также пробы и правила для следующих портов.

  • конечная точка подключения клиента: 19000;
  • конечная точка HTTP шлюза: 19080;
  • порт приложения: 80;
  • порт приложения: 443;

Виртуальная сеть и подсеть

В параметрах шаблона объявляются имена виртуальной сети и подсети. Адресные пространства виртуальной сети и подсети также объявляются в параметрах шаблона и настраиваются в ресурсе Microsoft.Network/virtualNetworks:

  • адресное пространство виртуальной сети: 10.0.0.0/16;
  • адресное пространство подсети Service Fabric: 10.0.2.0/24.

Если нужны другие порты приложений, нужно настроить ресурс Microsoft.Network/loadBalancers, чтобы разрешить входящий трафик.

Расширение Service Fabric

В ресурсе Microsoft.Compute/virtualMachineScaleSets настроено расширение Service Fabric Linux. Это расширение используется для загрузки Service Fabric в Azure Виртуальные машины и настройки безопасности узлов.

Ниже приведен фрагмент шаблона для расширения Service Fabric Linux:

"extensions": [
  {
    "name": "[concat('ServiceFabricNodeVmExt','_vmNodeType0Name')]",
    "properties": {
      "type": "ServiceFabricLinuxNode",
      "autoUpgradeMinorVersion": true,
      "enableAutomaticUpgrade": true,
      "protectedSettings": {
        "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
       },
       "publisher": "Microsoft.Azure.ServiceFabric",
       "settings": {
         "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
         "nodeTypeRef": "[variables('vmNodeType0Name')]",
         "durabilityLevel": "Silver",
         "enableParallelJobs": true,
         "nicPrefixOverride": "[variables('subnet0Prefix')]",
         "certificate": {
           "commonNames": [
             "[parameters('certificateCommonName')]"
           ],
           "x509StoreName": "[parameters('certificateStoreValue')]"
         }
       },
       "typeHandlerVersion": "2.0"
     }
   },

Установка параметров шаблона

В файле параметров AzureDeploy.Parameters объявляются многие значения, используемые для развертывания кластера и связанных ресурсов. Далее представлены некоторые параметры, которые может понадобиться изменить для развертывания:

Параметр Пример значения Примечания.
adminUserName vmadmin Имя администратора кластера виртуальных машин.
adminPassword Password#1234 Пароль администратора для кластера виртуальных машин.
clusterName mysfcluster123 Имя кластера.
Расположение southcentralus Расположение кластера.
certificateThumbprint

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

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

certificateUrlValue

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

Если необходимо использовать имеющийся сертификат, который вы ранее передали в хранилище ключей, укажите URL-адрес сертификата. Например, https://mykeyvault.vault.azure.net:443/secrets/mycertificate/02bea722c9ef4009a76c5052bcbf8346".

sourceVaultValue

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

Если необходимо использовать имеющийся сертификат, который вы ранее передали в хранилище ключей, укажите сведения об исходном хранилище. Например, /subscriptions/333cc2c84-12fa-5778-bd71-c71c07bf873f/resourceGroups/MyTestRG/providers/Microsoft.KeyVault/vaults/MYKEYVAULT.

Развертывание кластера и виртуальной сети

Настройте топологию сети и разверните кластер Service Fabric. Шаблон Resource Manager AzureDeploy.json создает виртуальную сеть (VNET) и подсеть для Service Fabric. Шаблон также развертывает кластер с включенным сертификатом безопасности. Для рабочих кластеров в качестве сертификата нужно использовать сертификат из центра сертификации (ЦС). Самозаверяющий сертификат можно использовать для защиты тестовых кластеров.

Шаблон в этой статье развертывает кластер, использующий отпечаток сертификата для идентификации сертификата кластера. Два сертификата не могут иметь один и тот же отпечаток. Это затрудняет управление сертификатами. Переключение развернутого кластера с использования отпечатков сертификата на использование общих имен сертификатов упрощает управление им. Сведения о том, как обновить кластер для использования общих имен сертификата для управления сертификатами, см. в статье Переход с отпечатка на общее имя сертификата для кластера.

Создание кластера с помощью имеющегося сертификата

В приведенном ниже сценарии используется команда az sf cluster create и шаблон, которые позволяют развернуть новый кластер с помощью имеющегося сертификата. Эта команда также создает хранилище ключей в Azure и отправляет сертификат.

ResourceGroupName="sflinuxclustergroup"
Location="southcentralus"
Password="q6D7nN%6ck@6"
VaultName="linuxclusterkeyvault"
VaultGroupName="linuxclusterkeyvaultgroup"
CertPath="C:\MyCertificates\MyCertificate.pem"

# sign in to your Azure account and select your subscription
az login
az account set --subscription <guid>

# Create a new resource group for your deployment and give it a name and a location.
az group create --name $ResourceGroupName --location $Location

# Create the Service Fabric cluster.
az sf cluster create --resource-group $ResourceGroupName --location $Location \
   --certificate-password $Password --certificate-file $CertPath \
   --vault-name $VaultName --vault-resource-group $ResourceGroupName  \
   --template-file AzureDeploy.json --parameter-file AzureDeploy.Parameters.json

Создание кластера с помощью нового самозаверяющего сертификата

В приведенном ниже сценарии используется команда az sf cluster create и шаблон, которые позволяют развернуть в Azure новый кластер. Кроме того, при помощи этой команды создается хранилище ключей в Azure, в него добавляется новый самозаверяющий сертификат и локально скачивается файл сертификата.

ResourceGroupName="sflinuxclustergroup"
ClusterName="sflinuxcluster"
Location="southcentralus"
Password="q6D7nN%6ck@6"
VaultName="linuxclusterkeyvault"
VaultGroupName="linuxclusterkeyvaultgroup"
CertPath="C:\MyCertificates"

az sf cluster create --resource-group $ResourceGroupName --location $Location \
   --cluster-name $ClusterName --template-file C:\temp\cluster\AzureDeploy.json \
   --parameter-file C:\temp\cluster\AzureDeploy.Parameters.json --certificate-password $Password \
   --certificate-output-folder $CertPath --certificate-subject-name $ClusterName.$Location.cloudapp.azure.com \
   --vault-name $VaultName --vault-resource-group $ResourceGroupName

Подключение к безопасному кластеру

Подключитесь к кластеру, выполнив в командной строке Service Fabric команду sfctl cluster select и указав свой ключ. Примечание. Используйте параметр --no-verify только для самозаверяющего сертификата.

sfctl cluster select --endpoint https://aztestcluster.southcentralus.cloudapp.azure.com:19080 \
--pem ./aztestcluster201709151446.pem --no-verify

Выполните команду sfctl cluster health, чтобы проверить подключение к кластеру и убедиться, что кластер работает.

sfctl cluster health

Очистка ресурсов

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

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

Узнайте, как масштабировать кластер.

Шаблон в этой статье развертывает кластер, использующий отпечаток сертификата для идентификации сертификата кластера. Два сертификата не могут иметь один и тот же отпечаток. Это затрудняет управление сертификатами. Переключение развернутого кластера с использования отпечатков сертификата на использование общих имен сертификатов упрощает управление им. Сведения о том, как обновить кластер для использования общих имен сертификата для управления сертификатами, см. в статье Переход с отпечатка на общее имя сертификата для кластера.