Tutoriel : Déployer un cluster Service Fabric exécutant Windows sur un réseau virtuel Azure

Ce tutoriel est la première partie d’une série d’étapes. Vous allez découvrir comment déployer un cluster Azure Service Fabric exécutant Windows dans un réseau virtuel Azure et un groupe de sécurité réseau à l’aide de PowerShell et d’un modèle. Quand vous avez terminé, vous disposez d’un cluster en cours d’exécution dans le cloud sur lequel vous pouvez déployer des applications. Pour créer un cluster Linux qui utilise Azure CLI, consultez Créer un cluster Linux sécurisé sur Azure.

Ce didacticiel décrit un scénario de production. Si vous souhaitez créer un petit cluster à des fins de test, consultez Créer un cluster de test.

Dans ce tutoriel, vous allez apprendre à :

  • Créer un réseau virtuel dans Azure à l’aide de PowerShell
  • Créer un coffre de clés et charger un certificat
  • Configurer l'authentification Microsoft Entra
  • Configurer la collecte de diagnostics
  • Configurer le service EventStore
  • Configurer les journaux Azure Monitor
  • Créer un cluster Service Fabric sécurisé dans Azure PowerShell
  • Sécuriser le cluster avec un certificat X.509
  • Se connecter à un cluster à l’aide de PowerShell
  • Supprimer un cluster

Cette série de tutoriels vous montre comment effectuer les opérations suivantes :

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Prérequis

Avant de commencer ce tutoriel :

Les procédures suivantes créent un cluster Service Fabric à sept nœuds. Utilisez la calculatrice de prix Azure pour calculer le coût lié à l’exécution d’un cluster Service Fabric dans Azure.

Télécharger et explorer le modèle

Téléchargez les fichiers de modèle Azure Resource Manager suivants :

Ce modèle déploie un cluster sécurisé de sept machines virtuelles et trois types de nœuds dans un réseau virtuel et un groupe de sécurité réseau. D’autres exemples de modèles sont disponibles sur GitHub. Le modèle azuredeploy.json déploie un certain nombre de ressources, notamment celles ci-dessous.

Cluster Service Fabric

Dans la ressource Microsoft.servicefabric/clusters, un cluster Windows est configuré avec les caractéristiques suivantes :

  • Trois types de nœuds
  • Cinq nœuds dans le type de nœud principal (configurables dans les paramètres du modèle) et un nœud dans chacun des deux autres types
  • Système d’exploitation : Windows Server 2016 Datacenter avec Containers (configurables dans les paramètres du modèle)
  • Sécurisation par certificat (configurable dans les paramètres du modèle)
  • Proxy inverse activé
  • Service DNS activé
  • Niveau de durabilité Bronze (configurable dans les paramètres du modèle)
  • Niveau de fiabilité Silver (configurable dans les paramètres du modèle)
  • Point de terminaison de connexion client : 19000 (configurable dans les paramètres du modèle)
  • point de terminaison de passerelle HTTP : 19080 (configurable dans les paramètres du modèle)

Azure Load Balancer

Dans la ressource Microsoft.Network/loadBalancers, un équilibreur de charge est configuré. Des sondes et règles sont configurées pour les ports suivants :

  • Point de terminaison de connexion client : 19000
  • point de terminaison de passerelle HTTP : 19080
  • Port de l’application : 80
  • Port de l’application : 443
  • proxy inverse de Service Fabric : 19081

Si d’autres ports de l’application sont nécessaires, vous devez ajuster les ressources Microsoft.Network/loadBalancers et Microsoft.Network/networkSecurityGroups pour autoriser le trafic entrant.

Réseau virtuel, sous-réseau et groupe de sécurité réseau

Les noms du réseau virtuel, du sous-réseau et du groupe de sécurité réseau sont déclarés dans les paramètres du modèle. Les espaces d’adressage du réseau virtuel et du sous-réseau sont également déclarés dans les paramètres de modèle et configurés dans la ressource Microsoft.Network/virtualNetworks :

  • Espace d’adressage du réseau virtuel : 172.16.0.0/20
  • Espace d’adressage du sous-réseau Service Fabric : 172.16.2.0/23

Les règles de trafic entrant suivantes sont activées dans la ressource Microsoft.Network/networkSecurityGroups. Vous pouvez modifier les valeurs de port en modifiant les variables de modèle.

  • ClientConnectionEndpoint (TCP) : 19000
  • HttpGatewayEndpoint (HTTP/TCP) : 19080
  • SMB : 445
  • Internodecommunication : 1025, 1026, 1027
  • Plage de ports éphémères : 49152 à 65534 (besoin d’un minimum de 256 ports)
  • Ports pour l’utilisation de l’application : 80 et 443
  • Plage de ports de l’application : 49152 à 65534 (utilisés pour les communications entre services. Les autres ports ne sont pas ouverts sur l’équilibreur de charge).
  • Bloquer tous les autres ports

Si d’autres ports de l’application sont nécessaires, vous devez ajuster les ressources Microsoft.Network/loadBalancers et Microsoft.Network/networkSecurityGroups pour autoriser le trafic entrant.

Windows Defender

Par défaut, le programme antivirus Windows Defender est installé sur Windows Server 2016 et fonctionne correctement. L’interface utilisateur est installée par défaut sur certaines références SKU, mais elle n’est pas obligatoire. Pour tous les types de nœuds ou groupes de machines virtuelles identiques déclarés dans le modèle, l’extension Azure VM Antimalware est utilisée pour exclure les répertoires et les processus 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
}
}

Définir les paramètres de modèle

Le fichier de paramètres azuredeploy.parameters.json déclare de nombreuses valeurs servant à déployer le cluster et les ressources associées. Voici les paramètres à modifier pour votre déploiement :

Paramètre Exemple de valeur Remarques
adminUsername vmadmin Nom d’utilisateur administrateur pour les machines virtuelles de cluster. Conditions requises pour les noms d’utilisateur de la machine virtuelle.
adminPassword Password#1234 Mot de passe d’administrateur pour les machines virtuelles de cluster. Conditions requises pour les mots de passe de la machine virtuelle.
clusterName mysfcluster123 Nom du cluster. Peut contenir seulement des lettres et des chiffres. Le nom peut contenir entre 3 et 23 caractères.
location southcentralus Emplacement du cluster.
certificateThumbprint

La valeur doit être vide si vous créez un certificat auto-signé ou si vous fournissez un fichier de certificat.

Pour utiliser un certificat existant déjà chargé dans un coffre de clés, renseignez la valeur d’empreinte du certificat SHA-1. Par exemple, « 6190390162C988701DB5676EB81083EA608DCCF3 ».

certificateUrlValue

La valeur doit être vide si vous créez un certificat auto-signé ou si vous fournissez un fichier de certificat.

Pour utiliser un certificat existant déjà chargé dans un coffre de clés, renseignez l’URL du certificat. Par exemple : "https://mykeyvault.vault.azure.net:443/secrets/mycertificate/02bea722c9ef4009a76c5052bcbf8346".

sourceVaultValue

La valeur doit être vide si vous créez un certificat auto-signé ou si vous fournissez un fichier de certificat.

Pour utiliser un certificat existant déjà chargé dans un coffre de clés, renseignez la valeur de coffre source. Par exemple, « /subscriptions/333cc2c84-12fa-5778-bd71-c71c07bf873f/resourceGroups/MyTestRG/providers/Microsoft.KeyVault/vaults/MYKEYVAULT ».

Configurer l'authentification du client Microsoft Entra

Pour les clusters Service Fabric déployés dans un réseau public hébergé dans Azure, les recommandations concernant l’authentification mutuelle client à nœud sont les suivantes :

  • Utilisez Microsoft Entra ID pour l’identité du client.
  • Utiliser un certificat pour l’identité du serveur et le chiffrement TLS de la communication HTTP

La configuration de Microsoft Entra ID pour authentifier les clients pour un cluster Service Fabric doit être effectuée avant de créer le cluster. Microsoft Entra ID permet aux organisations (appelées locataires) de gérer l'accès des utilisateurs aux applications.

Un cluster Service Fabric offre plusieurs points d’entrée pour ses fonctionnalités de gestion, notamment les outils web Service Fabric Exploreret Visual Studio. Par conséquent, vous créez deux applications Microsoft Entra pour contrôler l'accès au cluster : une application Web et une application native. Après avoir créé les applications, vous devez affecter les utilisateurs aux rôles en lecture seule et administrateur.

Notes

Vous devez exécuter les étapes suivantes avant de créer le cluster. Étant donné que les scripts attendent des noms de cluster et des points de terminaison, ces valeurs doivent être des valeurs planifiées et non celles que vous avez déjà créées.

Dans cet article, nous partons du principe que vous avez déjà créé un locataire. Si ce n'est pas le cas, commencez par lire Comment obtenir un locataire Microsoft Entra.

Pour simplifier les étapes de configuration de Microsoft Entra ID avec un cluster Service Fabric, nous avons créé un ensemble de scripts Windows PowerShell. Téléchargez les scripts sur votre ordinateur.

Créer des applications Microsoft Entra et attribuer des rôles aux utilisateurs

Créez deux applications Microsoft Entra pour contrôler l'accès au cluster : une application Web et une application native. Une fois que vous avez créé les applications pour représenter votre cluster, attribuez à vos utilisateurs les rôles pris en charge par Service Fabric : lecture seule et administrateur.

Exécutez SetupApplications.ps1, puis entrez l'ID du locataire, le nom du cluster et l'URL de réponse de l'application web en tant que paramètres. Spécifiez les noms d’utilisateur et les mots de passe des utilisateurs. Par exemple :

$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

Notes

Pour les clouds nationaux (notamment Azure Government, Microsoft Azure géré par 21Vianet, Azure Allemagne), spécifiez le paramètre -Location.

Vous trouverez votre ID de locataire, ou ID de répertoire, dans le portail Azure. Sélectionnez Propriétés>Microsoft Entra ID et copiez la valeur de l'ID de répertoire.

ClusterName est utilisé pour préfixer les applications Microsoft Entra créées par le script. Il ne doit pas forcément correspondre précisément au nom du cluster. Cela facilite uniquement le mappage des artefacts Microsoft Entra au cluster Service Fabric utilisé.

WebApplicationReplyUrl est le point de terminaison par défaut que Microsoft Entra ID renvoie à vos utilisateurs une fois leur connexion terminée. Définissez ce point de terminaison en tant que point de terminaison Service Fabric Explorer pour votre cluster, qui est par défaut :

https://<cluster_domain>:19080/Explorer

Vous êtes invité à vous connecter à un compte disposant de privilèges administratifs pour le locataire Microsoft Entra. Une fois que vous vous êtes connecté, le script crée les applications web et native pour représenter votre cluster Service Fabric. Dans les applications du locataire dans le portail Azure, vous devez voir deux nouvelles entrées :

  • ClusterName_Cluster
  • ClusterName_Client

Comme le script imprime le code JSON exigé par le modèle Resource Manager quand vous créez le cluster, il est préférable de garder la fenêtre PowerShell ouverte.

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

Ajouter la configuration Microsoft Entra pour utiliser l'ID Microsoft Entra pour l'accès client

Dans azuredeploy.json, configurez Microsoft Entra ID dans la section Microsoft.ServiceFabric/clusters. Ajoutez des paramètres pour l’ID du locataire, l’ID de l’application de cluster et l’ID de l’application cliente.

{
  "$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')]"
    },
    ...
  }
}

Ajoutez les valeurs des paramètres dans le fichier de paramètres azuredeploy.parameters.json. Par exemple :

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

Configurer la collecte de diagnostics sur le cluster

Quand vous exécutez un cluster Service Fabric, il peut être intéressant de recueillir les journaux de tous les nœuds pour les regrouper dans un emplacement central. La centralisation des journaux d’activité vous permet d’analyser et résoudre les problèmes que vous pourriez rencontrer dans votre cluster ou dans les applications et services exécutés dans ce cluster.

Pour charger et recueillir des journaux, vous pouvez utiliser l’extension Diagnostics Azure pour Windows (WAD), qui charge les journaux dans Stockage Azure, ou envoyer les journaux à Azure Application Insights ou Event Hubs. Vous pouvez également utiliser un processus externe pour lire les événements à partir du stockage et les placer dans une plateforme d’analyse comme les journaux Azure Monitor ou une autre solution d’analyse des journaux.

Si vous suivez ce tutoriel, la collecte des diagnostics est déjà configurée dans le modèle.

Si l’extension Diagnostics n’est pas déployée sur l’un de vos clusters existants, vous pouvez l’ajouter ou la mettre à jour par le biais du modèle de cluster. Modifiez le modèle Resource Manager utilisé pour créer le cluster existant ou téléchargez le modèle à partir du portail. Modifiez le fichier template.json en effectuant les opérations suivantes :

Ajoutez une nouvelle ressource de stockage à la section resources dans le modèle :

"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')]"
  }
},
...
]

Ensuite, ajoutez des paramètres pour le type et le nom du compte de stockage à la section parameters du modèle. Remplacez le texte de l’espace réservé storage account name goes here par le nom du compte de stockage de votre choix.

"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"
    }
},
...
}

Ensuite, ajoutez l’extension IaaSDiagnostics au tableau d’extensions de la propriété VirtualMachineProfile de chaque ressource Microsoft.Compute/virtualMachineScaleSets dans le cluster. Si vous utilisez l’exemple de modèle, il existe trois groupes de machines virtuelles identiques (un pour chaque type de nœud dans le cluster).

"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"
                    }
                }
            ...
            ]
        }
    }
}

Configurer le service EventStore

Le service EventStore est une option de supervision de Service Fabric. EventStore offre un moyen de comprendre l’état de votre cluster ou de vos charges de travail à un moment donné dans le temps. EventStore est un service Service Fabric avec état qui conserve les événements du cluster. Les événements sont exposés via Service Fabric Explorer, REST et les API. EventStore interroge le cluster directement pour obtenir des données de diagnostic sur une entité de votre cluster et doit être utilisé pour aider à :

  • Diagnostiquer les problèmes de développement ou de test, ou lorsque vous utilisez peut-être un pipeline de surveillance.
  • Vérifier que les actions de gestion que vous entreprenez sur votre cluster sont traitées correctement
  • Obtenir un « instantané » de la façon dont interagit Service Fabric avec une entité en particulier

Pour activer le service EventStore sur votre cluster, ajoutez le code suivant à la propriété fabricSettings de la ressource 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"
                }
            ]
        }
    ]
}

Configurer les journaux Azure Monitor pour le cluster

Nous vous recommandons d’utiliser les journaux Azure Monitor pour superviser les événements au niveau du cluster. Pour configurer les journaux Azure Monitor afin de superviser votre cluster, vous devez activer les diagnostics pour voir les événements au niveau du cluster.

L’espace de travail a besoin d’être connecté aux données de diagnostic provenant de votre cluster. Ces données de journaux sont stockées dans le compte de stockage applicationDiagnosticsStorageAccountName, dans les tables WADServiceFabric*EventTable, WADWindowsEventLogsTable et WADETWEventTable.

Ajoutez l’espace de travail Azure Log Analytics et ajoutez la solution à l’espace de travail :

"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": ""
        }
    }
]

Ensuite, ajoutez des paramètres :

"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"
        }
    }
}

Ensuite, ajoutez des variables :

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

Ajoutez l’extension de l’agent Log Analytics à chaque groupe de machines virtuelles identiques dans le cluster, et connectez l’agent à l’espace de travail Log Analytics. Cela permet de collecter des données de diagnostic sur les conteneurs, les applications et les performances. Si vous l’ajoutez en tant qu’extension à la ressource de groupe de machines virtuelles identiques, Azure Resource Manager veille à l’installer sur tous les nœuds, même lors de la mise à l’échelle du cluster.

"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]"
                        }
                    }
                }
            ...
            ]
        }
    }
}

Déployer le réseau virtuel et le cluster

Puis, configurez la topologie de réseau et déployez le cluster Service Fabric. Le modèle Resource Manager azuredeploy.json crée un réseau virtuel, un sous-réseau et un groupe de sécurité réseau pour Service Fabric. Le modèle déploie également un cluster avec la sécurité de certificat activée. Pour les clusters de production, utilisez un certificat délivré par une autorité de certification en tant que certificat de cluster. Un certificat auto-signé peut être utilisé pour garantir la sécurité des clusters de test.

Dans cet article, le modèle déploie un cluster qui utilise l’empreinte numérique du certificat pour identifier le certificat de cluster. Deux certificats ne peuvent pas avoir la même empreinte numérique, ce qui complique leur gestion. Le fait de basculer un cluster déployé des empreintes de certificat aux noms communs de certificat simplifie la gestion des certificats. Pour découvrir comment mettre à jour le cluster pour que celui-ci utilise des noms communs de certificat pour la gestion des certificats, consultez Modifier un cluster pour qu’il passe de l’utilisation d’une empreinte de certificat à l’utilisation d’un nom commun.

Créer un cluster à l’aide d’un certificat existant

Le script suivant utilise l’applet de commande New-AzServiceFabricCluster et un modèle pour déployer un nouveau cluster dans Azure. L’applet de commande crée un coffre de clés dans Azure et charge votre certificat.

# 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

Créer un cluster à l’aide d’un nouveau certificat auto-signé

Le script suivant utilise l’applet de commande New-AzServiceFabricCluster et un modèle pour déployer un nouveau cluster dans Azure. L’applet de commande crée un coffre de clés dans Azure, ajoute un nouveau certificat auto-signé dans le coffre de clés, puis télécharge le fichier de certificat localement.

# 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

Se connecter à un cluster sécurisé

Connectez-vous au cluster à l’aide du module Service Fabric PowerShell installé avec le SDK Service Fabric. Tout d’abord, installez le certificat dans le magasin personnel de l’utilisateur actuel sur votre ordinateur. Exécutez la commande PowerShell suivante :

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

Vous êtes maintenant prêt à vous connecter à votre cluster sécurisé.

Le module Service Fabric PowerShell fournit de nombreuses cmdlets pour la gestion des services, applications et clusters Service Fabric. Pour vous connecter au cluster sécurisé, utilisez la cmdlet Connect-ServiceFabricCluster. Les détails du point de terminaison de connexion et de l’empreinte de certificat SHA-1 se trouvent dans la sortie de l’étape précédente.

Si vous avez déjà configuré l'authentification du client Microsoft Entra, exécutez la commande suivante :

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

Si vous n'avez pas configuré l'authentification du client Microsoft Entra, exécutez la commande suivante :

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

Vérifiez que vous êtes connecté et que le cluster est sain à l’aide de l’applet de commande Get-ServiceFabricClusterHealth.

Get-ServiceFabricClusterHealth

Nettoyer les ressources

Les autres articles de cette série de tutoriels utilisent le cluster que vous avez créé. Si vous ne passez pas immédiatement à l’article suivant, vous souhaiterez peut-être supprimer le cluster pour éviter de subir des frais.

Étapes suivantes

Passez au tutoriel suivant pour découvrir comment mettre à l’échelle votre cluster.

  • Créer un réseau virtuel dans Azure à l’aide de PowerShell
  • Créer un coffre de clés et charger un certificat
  • Configurer l'authentification Microsoft Entra
  • Configurer la collecte de diagnostics
  • Configurer le service EventStore
  • Configurer les journaux Azure Monitor
  • Créer un cluster Service Fabric sécurisé dans Azure PowerShell
  • Sécuriser le cluster avec un certificat X.509
  • Se connecter à un cluster à l’aide de PowerShell
  • Supprimer un cluster

Maintenant, passez au tutoriel suivant pour découvrir comment superviser votre cluster.