Поделиться через


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

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

В этом руководстве описывается рабочий сценарий. Если вы хотите создать меньший кластер для тестирования, см. статью "Создание тестового кластера".

В этом руководстве описано, как:

  • Создание виртуальной сети в Azure с помощью PowerShell
  • Создание хранилища ключей и отправка сертификата
  • Настройка проверки подлинности Microsoft Entra
  • Настройка коллекции диагностики
  • Настройка службы EventStore
  • настройка журналов Azure Monitor;
  • Создание защищенного кластера Service Fabric в Azure PowerShell
  • Защита кластера с помощью сертификата X.509
  • Подключение к кластеру с помощью PowerShell
  • Удаление кластера

Из этого цикла руководств вы узнаете, как выполнять следующие задачи:

Примечание.

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

Предпосылки

Перед началом работы с этим руководством выполните следующие действия:

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

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

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

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

Кластер Service Fabric

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

  • Три типа узлов.
  • Пять узлов в типе первичного узла (настраиваемого в параметрах шаблона) и один узел в каждом из двух других типов узлов.
  • ОС: Windows Server 2016 Datacenter с контейнерами (можно настроить в параметрах шаблона).
  • Защищенный сертификат (настраиваемый в параметрах шаблона).
  • Обратный прокси-сервер включен.
  • Служба DNS включена.
  • Уровень прочности Бронза, настраиваемый в параметрах шаблона.
  • Уровень надежности "Серебряный" (настраивается в параметрах шаблона).
  • Конечная точка подключения клиента: 19000 (настраиваемая в параметрах шаблона).
  • Конечная точка шлюза HTTP: 19080 (настраиваемая в параметрах шаблона).

Azure Load Balancer (балансировщик нагрузки Azure)

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

  • Конечная точка подключения клиента: 19000
  • Конечная точка шлюза HTTP: 19080
  • Порт приложения: 80
  • Порт приложения: 443
  • Обратный прокси-сервер Service Fabric: 19081

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

Виртуальная сеть, подсеть и группа безопасности сети

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

  • Адресное пространство виртуальной сети: 172.16.0.0/20
  • Адресное пространство подсети Service Fabric: 172.16.2.0/23

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

  • ClientConnectionEndpoint (TCP): 19000
  • HttpGatewayEndpoint (HTTP/TCP): 19080
  • SMB: 445
  • Internodecommunication: 1025, 1026, 1027
  • Диапазон временных портов: от 49152 до 65534 (требуется не менее 256 портов).
  • Порты для использования приложений: 80 и 443
  • Диапазон портов приложения: от 49152 до 65534 (используется для обслуживания связи. Другие порты не открываются в подсистеме балансировки нагрузки.
  • Блокировать все остальные порты

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

Защитник Windows

По умолчанию антивирусная программа Защитника Windows установлена и работает в Windows Server 2016. Пользовательский интерфейс устанавливается по умолчанию на некоторых номерах SKU, но не требуется. Для каждого типа узла или масштабируемого набора виртуальных машин, объявленного в шаблоне, расширение защиты от вредоносных программ виртуальной машины Azure используется для исключения каталогов и процессов Service Fabric:

{
"name": "[concat('VMIaaSAntimalware','_vmNodeType0Name')]",
"properties": {
        "publisher": "Microsoft.Azure.Security",
        "type": "IaaSAntimalware",
        "typeHandlerVersion": "1.5",
        "settings": {
        "AntimalwareEnabled": "true",
        "Exclusions": {
                "Paths": "D:\\SvcFab;D:\\SvcFab\\Log;C:\\Program Files\\Microsoft Service Fabric",
                "Processes": "Fabric.exe;FabricHost.exe;FabricInstallerService.exe;FabricSetup.exe;FabricDeployer.exe;ImageBuilder.exe;FabricGateway.exe;FabricDCA.exe;FabricFAS.exe;FabricUOS.exe;FabricRM.exe;FileStoreService.exe"
        },
        "RealtimeProtectionEnabled": "true",
        "ScheduledScanSettings": {
                "isEnabled": "true",
                "scanType": "Quick",
                "day": "7",
                "time": "120"
        }
        },
        "protectedSettings": null
}
}

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

Файл параметров azuredeploy.parameters.json объявляет множество значений, используемых для развертывания кластера и связанных ресурсов. Ниже приведены параметры, которые нужно изменить для настройки развертывания.

Параметр Пример значения Примечания
Имя пользователя администратора vmadmin Имя администратора для виртуальных машин кластера. Требования к имени пользователя для виртуальной машины.
пароль администратора Пароль#1234 Пароль администратора для виртуальных машин кластера. Требования к паролям для виртуальной машины.
Имя кластера mysfcluster123 Имя кластера. Может содержать только буквы и цифры. Длина может составлять от 3 до 23 символов.
расположение southcentralus Расположение кластера.
отпечаток сертификата

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

Чтобы использовать существующий сертификат, переданный ранее в хранилище ключей, заполните значение отпечатка SHA1 сертификата. Например, "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00".

certificateUrlValue

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

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

sourceVaultValue

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

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

Настройка проверки подлинности клиента Microsoft Entra

Для кластеров Service Fabric, развернутых в общедоступной сети, размещенной в Azure, для взаимной проверки подлинности между клиентом и узлом рекомендуется:

  • Используйте идентификатор Microsoft Entra для удостоверения клиента.
  • Используйте сертификат для удостоверений сервера и шифрования TLS для связи HTTP.

Перед созданием кластера необходимо настроить идентификатор Microsoft Entra для проверки подлинности клиентов кластера Service Fabric. Идентификатор Microsoft Entra позволяет организациям (клиентам) управлять доступом пользователей к приложениям.

Кластеры Service Fabric предлагают несколько точек входа для управления функциями кластеров, включая веб-интерфейс Service Fabric Explorer и Visual Studio. В результате вы создаете два приложения Microsoft Entra для управления доступом к кластеру: одним веб-приложением и одним собственным приложением. После создания приложений вы назначаете пользователям роль с доступом только для чтения и роль администратора.

Примечание.

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

В этой статье предполагается, что вы уже создали арендатора. Если вы этого ещё не сделали, начните с прочтения «Как получить клиент Microsoft Entra».

Чтобы упростить действия, связанные с настройкой идентификатора Microsoft Entra с помощью кластера Service Fabric, мы создали набор сценариев Windows PowerShell. Скачайте скрипты на компьютер.

Создание приложений Microsoft Entra и назначение ролей пользователям

Создайте два приложения Microsoft Entra для управления доступом к кластеру: одним веб-приложением и одним собственным приложением. После создания приложений для представления кластера назначьте пользователям роли, поддерживаемые Service Fabric: только для чтения и администратора.

Запустите SetupApplications.ps1и укажите идентификатор клиента, имя кластера и URL-адрес ответа веб-приложения в качестве параметров. Укажите имена пользователей и пароли. Рассмотрим пример.

$Configobj = .\SetupApplications.ps1 -TenantId '<MyTenantID>' -ClusterName 'mysfcluster123' -WebApplicationReplyUrl 'https://mysfcluster123.eastus.cloudapp.azure.com:19080/Explorer/index.html' -AddResourceAccess
.\SetupUser.ps1 -ConfigObj $Configobj -UserName 'TestUser' -Password 'P@ssword!123'
.\SetupUser.ps1 -ConfigObj $Configobj -UserName 'TestAdmin' -Password 'P@ssword!123' -IsAdmin

Примечание.

Для национальных облаков (например, Azure Government, Microsoft Azure, управляемый 21Vianet, Azure Germany) укажите -Location параметр.

Идентификатор клиента или идентификатор каталога можно найти на портале Azure. Выберите Microsoft Entra ID, Свойства>, и скопируйте значение ID каталога.

ClusterName используется для префикса приложений Microsoft Entra, созданных скриптом. Он не должен точно соответствовать фактическому имени кластера. Это упрощает сопоставление артефактов Microsoft Entra с используемым кластером Service Fabric.

WebApplicationReplyUrl — это конечная точка по умолчанию, которую идентификатор Microsoft Entra возвращает пользователям после завершения входа. Задайте эту конечную точку в качестве конечной точки Service Fabric Explorer для кластера, которая по умолчанию:

<https://cluster_domain>:19080/Explorer

Вам будет предложено войти в учетную запись с правами администратора для клиента Microsoft Entra. После входа скрипт создает веб-приложения и собственные приложения для представления кластера Service Fabric. В приложениях клиента на портале Azure вы увидите две новые записи:

  • ClusterName_Кластер
  • ClusterName_Клиент

Скрипт печатает JSON, необходимый шаблоном Resource Manager при создании кластера, поэтому рекомендуется сохранить окно PowerShell открытым.

"azureActiveDirectory": {
  "tenantId":"<guid>",
  "clusterApplication":"<guid>",
  "clientApplication":"<guid>"
},

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

В azuredeploy.jsonнастройте идентификатор Microsoft Entra в разделе Microsoft.ServiceFabric/clusters . Добавьте параметры для идентификатора клиента, идентификатора приложения кластера и идентификатора клиентского приложения.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    ...

    "aadTenantId": {
      "type": "string",
      "defaultValue": "0e3d2646-78b3-4711-b8be-74a381d9890c"
    },
    "aadClusterApplicationId": {
      "type": "string",
      "defaultValue": "cb147d34-b0b9-4e77-81d6-420fef0c4180"
    },
    "aadClientApplicationId": {
      "type": "string",
      "defaultValue": "7a8f3b37-cc40-45cc-9b8f-57b8919ea461"
    }
  },

...

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

Добавьте значения параметров в файл параметров azuredeploy.parameters.json . Рассмотрим пример.

"aadTenantId": {
"value": "0e3d2646-78b3-4711-b8be-74a381d9890c"
},
"aadClusterApplicationId": {
"value": "cb147d34-b0b9-4e77-81d6-420fef0c4180"
},
"aadClientApplicationId": {
"value": "7a8f3b37-cc40-45cc-9b8f-57b8919ea461"
}

Настройка коллекции диагностики в кластере

При запуске кластера Service Fabric рекомендуется собирать журналы со всех узлов в центральном расположении. Централизованное хранение журналов упрощает анализ и устранение неполадок в кластере, а также в приложениях и службах, работающих в этом кластере.

Одним из способов отправки и сбора журналов является использование расширения диагностики Azure (WAD), которое отправляет журналы в службу хранилища Azure, а также позволяет отправлять журналы в Azure Application Insights или Центры событий. Вы также можете использовать внешний процесс для чтения событий из хранилища и их размещения в продукте платформы анализа, таких как журналы Azure Monitor или другое решение для анализа журналов.

Если вы следуете этому руководству, сбор диагностики уже настроен в шаблоне.

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

Добавьте новый ресурс хранилища в раздел ресурсов в шаблоне:

"resources": [
...
{
  "apiVersion": "2015-05-01-preview",
  "type": "Microsoft.Storage/storageAccounts",
  "name": "[parameters('applicationDiagnosticsStorageAccountName')]",
  "location": "[parameters('computeLocation')]",
  "sku": {
    "accountType": "[parameters('applicationDiagnosticsStorageAccountType')]"
  },
  "tags": {
    "resourceType": "Service Fabric",
    "clusterName": "[parameters('clusterName')]"
  }
},
...
]

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

"parameters": {
...
"applicationDiagnosticsStorageAccountType": {
    "type": "string",
    "allowedValues": [
    "Standard_LRS",
    "Standard_GRS"
    ],
    "defaultValue": "Standard_LRS",
    "metadata": {
    "description": "Replication option for the application diagnostics storage account"
    }
},
"applicationDiagnosticsStorageAccountName": {
    "type": "string",
    "defaultValue": "**STORAGE ACCOUNT NAME GOES HERE**",
    "metadata": {
    "description": "Name for the storage account that contains application diagnostics data from the cluster"
    }
},
...
}

Затем добавьте расширение IaaSDiagnostics в массив расширений свойства VirtualMachineProfile каждого ресурса Microsoft.Compute/virtualMachineScaleSets в кластере. Если вы используете пример шаблона, существует три масштабируемых набора виртуальных машин (по одному для каждого типа узла в кластере).

"apiVersion": "2018-10-01",
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "[variables('vmNodeType1Name')]",
"properties": {
    ...
    "virtualMachineProfile": {
        "extensionProfile": {
            "extensions": [
                {
                    "name": "[concat(parameters('vmNodeType0Name'),'_Microsoft.Insights.VMDiagnosticsSettings')]",
                    "properties": {
                        "type": "IaaSDiagnostics",
                        "autoUpgradeMinorVersion": true,
                        "protectedSettings": {
                        "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
                        "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
                        "storageAccountEndPoint": "https://core.windows.net/"
                        },
                        "publisher": "Microsoft.Azure.Diagnostics",
                        "settings": {
                        "WadCfg": {
                            "DiagnosticMonitorConfiguration": {
                            "overallQuotaInMB": "50000",
                            "EtwProviders": {
                                "EtwEventSourceProviderConfiguration": [
                                {
                                    "provider": "Microsoft-ServiceFabric-Actors",
                                    "scheduledTransferKeywordFilter": "1",
                                    "scheduledTransferPeriod": "PT5M",
                                    "DefaultEvents": {
                                    "eventDestination": "ServiceFabricReliableActorEventTable"
                                    }
                                },
                                {
                                    "provider": "Microsoft-ServiceFabric-Services",
                                    "scheduledTransferPeriod": "PT5M",
                                    "DefaultEvents": {
                                    "eventDestination": "ServiceFabricReliableServiceEventTable"
                                    }
                                }
                                ],
                                "EtwManifestProviderConfiguration": [
                                {
                                    "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                                    "scheduledTransferLogLevelFilter": "Information",
                                    "scheduledTransferKeywordFilter": "4611686018427387904",
                                    "scheduledTransferPeriod": "PT5M",
                                    "DefaultEvents": {
                                    "eventDestination": "ServiceFabricSystemEventTable"
                                    }
                                }
                                ]
                            }
                            }
                        },
                        "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
                        },
                        "typeHandlerVersion": "1.5"
                    }
                }
            ...
            ]
        }
    }
}

Настройка службы EventStore

Служба EventStore — это параметр мониторинга в Service Fabric. EventStore предоставляет способ для оценки состояния кластера или рабочих нагрузок в определенный момент времени. Служба EventStore — это управляемая состоянием служба Service Fabric, которая сохраняет события из кластера. События предоставляются через Service Fabric Explorer, REST и API. EventStore отправляет запросы непосредственно к кластеру, чтобы получить данные диагностики по любой сущности в кластере. Их следует использовать, чтобы:

  • Диагностировать проблемы при разработке, тестировании или во время использования конвейера для мониторинга.
  • Убедитесь, что действия управления, выполняемые в кластере, обрабатываются правильно
  • Получить снимок состояния взаимодействия Service Fabric с конкретной сущностью.

Чтобы включить службу EventStore в кластере, добавьте следующее в свойство FabricSettings ресурса Microsoft.ServiceFabric/clusters :

"apiVersion": "2018-02-01",
"type": "Microsoft.ServiceFabric/clusters",
"name": "[parameters('clusterName')]",
"properties": {
    ...
    "fabricSettings": [
        ...
        {
            "name": "EventStoreService",
            "parameters": [
                {
                "name": "TargetReplicaSetSize",
                "value": "3"
                },
                {
                "name": "MinReplicaSetSize",
                "value": "1"
                }
            ]
        }
    ]
}

Настройка журналов Azure Monitor для кластера

Для мониторинга событий на уровне кластера мы рекомендуем использовать журналы Azure Monitor. Чтобы настроить журналы Azure Monitor для мониторинга кластера, необходимо включить диагностику для просмотра событий на уровне кластера.

Рабочая область должна быть подключена к данным диагностики, поступающим из кластера. Эти данные журнала хранятся в учетной записи хранения applicationDiagnosticsStorageAccountName в таблицах WADServiceFabric*EventTable, WADWindowsEventLogsTable и WADETWEventTable.

Добавьте рабочую область Azure Log Analytics и добавьте решение в рабочую область:

"resources": [
    ...
    {
        "apiVersion": "2015-11-01-preview",
        "location": "[parameters('omsRegion')]",
        "name": "[parameters('omsWorkspacename')]",
        "type": "Microsoft.OperationalInsights/workspaces",
        "properties": {
            "sku": {
                "name": "Free"
            }
        },
        "resources": [
            {
                "apiVersion": "2015-11-01-preview",
                "name": "[concat(variables('applicationDiagnosticsStorageAccountName'),parameters('omsWorkspacename'))]",
                "type": "storageinsightconfigs",
                "dependsOn": [
                    "[concat('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename'))]",
                    "[concat('Microsoft.Storage/storageAccounts/', variables('applicationDiagnosticsStorageAccountName'))]"
                ],
                "properties": {
                    "containers": [],
                    "tables": [
                        "WADServiceFabric*EventTable",
                        "WADWindowsEventLogsTable",
                        "WADETWEventTable"
                    ],
                    "storageAccount": {
                        "id": "[resourceId('Microsoft.Storage/storageaccounts/', variables('applicationDiagnosticsStorageAccountName'))]",
                        "key": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('applicationDiagnosticsStorageAccountName')),'2015-06-15').key1]"
                    }
                }
            },
            {
                "apiVersion": "2015-11-01-preview",
                "type": "datasources",
                "name": "sampleWindowsPerfCounter",
                "dependsOn": [
                    "[concat('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename'))]"
                ],
                "kind": "WindowsPerformanceCounter",
                "properties": {
                    "objectName": "Memory",
                    "instanceName": "*",
                    "intervalSeconds": 10,
                    "counterName": "Available MBytes"
                }
            },
            {
                "apiVersion": "2015-11-01-preview",
                "type": "datasources",
                "name": "sampleWindowsPerfCounter2",
                "dependsOn": [
                    "[concat('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename'))]"
                ],
                "kind": "WindowsPerformanceCounter",
                "properties": {
                    "objectName": "Service Fabric Service",
                    "instanceName": "*",
                    "intervalSeconds": 10,
                    "counterName": "Average milliseconds per request"
                }
            }
        ]
    },
    {
        "apiVersion": "2015-11-01-preview",
        "location": "[parameters('omsRegion')]",
        "name": "[variables('solution')]",
        "type": "Microsoft.OperationsManagement/solutions",
        "dependsOn": [
            "[concat('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename'))]"
        ],
        "properties": {
            "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename'))]"
        },
        "plan": {
            "name": "[variables('solution')]",
            "publisher": "Microsoft",
            "product": "[Concat('OMSGallery/', variables('solutionName'))]",
            "promotionCode": ""
        }
    }
]

Затем добавьте параметры

"parameters": {
    ...
    "omsWorkspacename": {
        "type": "string",
        "defaultValue": "mysfomsworkspace",
        "metadata": {
            "description": "Name of your OMS Log Analytics Workspace"
        }
    },
    "omsRegion": {
        "type": "string",
        "defaultValue": "West Europe",
        "allowedValues": [
            "West Europe",
            "East US",
            "Southeast Asia"
        ],
        "metadata": {
            "description": "Specify the Azure Region for your OMS workspace"
        }
    }
}

Затем добавьте переменные:

"variables": {
    ...
    "solution": "[Concat('ServiceFabric', '(', parameters('omsWorkspacename'), ')')]",
    "solutionName": "ServiceFabric"
}

Добавьте расширение агента Log Analytics в каждый масштабируемый набор виртуальных машин в кластере и подключите агент к рабочей области Log Analytics. Это активирует сбор данных диагностики о контейнерах и приложениях, а также мониторинг производительности. Если вы добавите агент в качестве расширения ресурса масштабируемого набора виртуальных машин, Azure Resource Manager гарантирует его установку на каждом узле, даже при масштабировании кластера.

"apiVersion": "2018-10-01",
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "[variables('vmNodeType1Name')]",
"properties": {
    ...
    "virtualMachineProfile": {
        "extensionProfile": {
            "extensions": [
                {
                    "name": "[concat(variables('vmNodeType0Name'),'OMS')]",
                    "properties": {
                        "publisher": "Microsoft.EnterpriseCloud.Monitoring",
                        "type": "MicrosoftMonitoringAgent",
                        "typeHandlerVersion": "1.0",
                        "autoUpgradeMinorVersion": true,
                        "settings": {
                            "workspaceId": "[reference(resourceId('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename')), '2015-11-01-preview').customerId]"
                        },
                        "protectedSettings": {
                            "workspaceKey": "[listKeys(resourceId('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename')),'2015-11-01-preview').primarySharedKey]"
                        }
                    }
                }
            ...
            ]
        }
    }
}

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

Затем настройте топологию сети и разверните кластер Service Fabric. Шаблон resource Managerazuredeploy.json создает виртуальную сеть, подсеть и группу безопасности сети для Service Fabric. Шаблон также развертывает кластер с включенной безопасностью сертификатов. Для рабочих кластеров используйте сертификат из центра сертификации в качестве сертификата кластера. Самозаверяющий сертификат можно использовать для защиты тестовых кластеров.

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

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

Следующий сценарий использует командлет New-AzServiceFabricCluster и шаблон для развертывания нового кластера в Azure. Командлет создает новое хранилище ключей в Azure и отправляет сертификат.

# Variables.
$groupname = "sfclustertutorialgroup"
$clusterloc="southcentralus"  # Must match the location parameter in the template
$templatepath="C:\temp\cluster"

$certpwd="q6D7nN%6ck@6" | ConvertTo-SecureString -AsPlainText -Force
$clustername = "mysfcluster123"  # Must match the clustername parameter in the template
$vaultname = "clusterkeyvault123"
$vaultgroupname="clusterkeyvaultgroup123"
$subname="$clustername.$clusterloc.cloudapp.azure.com"

# Sign in to your Azure account and select your subscription
Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId <guid>

# Create a new resource group for your deployment, and give it a name and a location.
New-AzResourceGroup -Name $groupname -Location $clusterloc

# Create the Service Fabric cluster.
New-AzServiceFabricCluster  -ResourceGroupName $groupname -TemplateFile "$templatepath\azuredeploy.json" `
-ParameterFile "$templatepath\azuredeploy.parameters.json" -CertificatePassword $certpwd `
-KeyVaultName $vaultname -KeyVaultResourceGroupName $vaultgroupname -CertificateFile $certpath

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

Следующий сценарий использует командлет New-AzServiceFabricCluster и шаблон для развертывания нового кластера в Azure. Командлет создает новое хранилище ключей в Azure, добавляет новый самозаверяющий сертификат в хранилище ключей и загружает файл сертификата локально.

# Variables.
$groupname = "sfclustertutorialgroup"
$clusterloc="southcentralus"  # Must match the location parameter in the template
$templatepath="C:\temp\cluster"

$certpwd="q6D7nN%6ck@6" | ConvertTo-SecureString -AsPlainText -Force
$certfolder="c:\mycertificates\"
$clustername = "mysfcluster123"
$vaultname = "clusterkeyvault123"
$vaultgroupname="clusterkeyvaultgroup123"
$subname="$clustername.$clusterloc.cloudapp.azure.com"

# Sign in to your Azure account and select your subscription
Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId <guid>

# Create a new resource group for your deployment, and give it a name and a location.
New-AzResourceGroup -Name $groupname -Location $clusterloc

# Create the Service Fabric cluster.
New-AzServiceFabricCluster  -ResourceGroupName $groupname -TemplateFile "$templatepath\azuredeploy.json" `
-ParameterFile "$templatepath\azuredeploy.parameters.json" -CertificatePassword $certpwd `
-CertificateOutputFolder $certfolder -KeyVaultName $vaultname -KeyVaultResourceGroupName $vaultgroupname -CertificateSubjectName $subname

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

Подключитесь к кластеру с помощью модуля PowerShell Service Fabric, установленного с помощью пакета SDK Service Fabric. Сначала установите сертификат в персональное (Моё) хранилище текущего пользователя на вашем компьютере. Выполните следующую команду PowerShell:

$certpwd="q6D7nN%6ck@6" | ConvertTo-SecureString -AsPlainText -Force
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\My `
        -FilePath C:\mycertificates\mysfcluster20170531104310.pfx `
        -Password $certpwd

Теперь вы готовы подключиться к защищенному кластеру.

Модуль PowerShell Service Fabric предоставляет множество командлетов для управления кластерами, приложениями и службами Service Fabric. Используйте командлет Connect-ServiceFabricCluster для подключения к безопасному кластеру. Отпечаток сертификата SHA1 и сведения о конечной точке подключения находятся в выходных данных предыдущего шага.

Если вы ранее настроили проверку подлинности клиента Microsoft Entra, выполните следующую команду:

Connect-ServiceFabricCluster -ConnectionEndpoint mysfcluster123.southcentralus.cloudapp.azure.com:19000 `
        -KeepAliveIntervalInSec 10 `
        -AzureActiveDirectory `
        -ServerCertThumbprint BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11

Если вы не настроили проверку подлинности клиента Microsoft Entra, выполните следующую команду:

Connect-ServiceFabricCluster -ConnectionEndpoint mysfcluster123.southcentralus.cloudapp.azure.com:19000 `
          -KeepAliveIntervalInSec 10 `
          -X509Credential -ServerCertThumbprint BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11 `
          -FindType FindByThumbprint -FindValue BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11 `
          -StoreLocation CurrentUser -StoreName My

Убедитесь, что вы подключены и что кластер работоспособен с помощью командлета Get-ServiceFabricClusterHealth .

Get-ServiceFabricClusterHealth

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

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

Дальнейшие действия

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

  • Создание виртуальной сети в Azure с помощью PowerShell
  • Создание хранилища ключей и отправка сертификата
  • Настройка проверки подлинности Microsoft Entra
  • Настройка коллекции диагностики
  • Настройка службы EventStore
  • настройка журналов Azure Monitor;
  • Создание защищенного кластера Service Fabric в Azure PowerShell
  • Защита кластера с помощью сертификата X.509
  • Подключение к кластеру с помощью PowerShell
  • Удаление кластера

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