Condividi tramite


Distribuire un cluster Linux di Service Fabric in una rete virtuale di Azure

In questo articolo si apprenderà come distribuire un cluster Linux di Service Fabric in una rete virtuale di Azure usando l'interfaccia della riga di comando di Azure e un modello. Al termine, si ottiene un cluster in esecuzione nel cloud nel quale è possibile distribuire applicazioni. Per creare un cluster Windows tramite PowerShell, vedere Creare un cluster sicuro di Windows in Azure.

Prerequisiti

Prima di iniziare:

Le procedure seguenti creano un cluster di Service Fabric a sette nodi. Per calcolare i costi sostenuti per l'esecuzione di un cluster di Service Fabric in Azure, usare il calcolatore dei prezzi di Azure.

Scaricare ed esplorare il modello

Scaricare i file del modello di Resource Manager seguenti:

Per Ubuntu 18.04 LTS:

  • AzureDeploy.json
    • L'attributo vmImageSku è "18.04-LTS"
    • Microsoft.ServiceFabric/della risorsa dei cluster
      • apiVersion impostato su "2019-03-01"
      • La proprietà vmImage viene impostata su "Ubuntu18_04"
  • AzureDeploy.Parameters.json

Per Ubuntu 20.04 LTS:

  • AzureDeploy.json
    • L'attributo vmImageSku è "20.04-LTS"
    • Microsoft.ServiceFabric/della risorsa dei cluster
      • apiVersion impostato su "2019-03-01"
      • La proprietà vmImage viene impostata su "Ubuntu20_04"
  • AzureDeploy.Parameters.json

Questi modelli distribuiscono un cluster sicuro di sette macchine virtuali e tre tipi di nodo in una rete virtuale. Altri modelli di esempio sono disponibili su GitHub. AzureDeploy.json distribuisce varie risorse, incluse le seguenti.

Cluster di Service Fabric

Nella risorsa Microsoft.ServiceFabric/clusters viene distribuito un cluster Linux con le caratteristiche seguenti:

  • tre tipi di nodi
  • Cinque nodi del tipo di nodo primario (configurabile nei parametri del modello), un nodo di ognuno degli altri tipi di nodi
  • Sistema operativo: (Ubuntu 18.04 LTS / Ubuntu 20.04) (configurabile nei parametri del modello)
  • Protezione con certificato (configurabile nei parametri del modello)
  • Servizio DNS abilitato
  • Livello di durabilità Bronzo (configurabile nei parametri del modello)
  • Livello di affidabilità Argento (configurabile nei parametri del modello)
  • Endpoint di connessione client: 19000 (configurabile nei parametri del modello)
  • Endpoint del gateway HTTP: 19080 (configurabile nei parametri del modello)

Azure Load Balancer

Nella risorsa Microsoft.Network/loadBalancers viene configurato un servizio di bilanciamento del carico e vengono impostate probe e regole per le porte seguenti:

  • Endpoint di connessione client: 19000
  • Endpoint del gateway HTTP: 19080
  • Porta applicazione: 80
  • Porta applicazione: 443

Rete virtuale e subnet

I nomi della rete virtuale e della subnet sono dichiarati nei parametri del modello. così come gli spazi indirizzi della rete virtuale e della subnet. Questi ultimi vengono configurati nella risorsa Microsoft.Network/virtualNetworks:

  • Spazio indirizzi della rete virtuale: 10.0.0.0/16
  • Spazio indirizzi della subnet di Service Fabric: 10.0.2.0/24

Se sono necessarie altre porte dell'applicazione, si dovrà modificare la risorsa Microsoft.Network/loadBalancers in modo da consentire il traffico in ingresso.

Estensione di Service Fabric

Nella risorsa Microsoft.Compute/virtualMachineScaleSets l'estensione Linux di Service Fabric è configurata. Questa estensione viene usata per avviare Service Fabric in macchine virtuali di Azure e configurare la sicurezza dei nodi.

Di seguito è riportato un frammento di modello per l'estensione Linux di Service Fabric:

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

Impostare i parametri del modello

Nel file AzureDeploy.Parameters vengono dichiarati molti valori usati per distribuire il cluster e le risorse associate. Di seguito sono riportati alcuni dei parametri che potrebbe essere necessario modificare per la propria distribuzione:

Parametro Valore di esempio Note
adminUserName vmadmin Nome utente amministratore per le VM del cluster.
adminPassword Password#1234 Password amministratore per le VM del cluster.
clusterName mysfcluster123 Nome del cluster.
posizione Stati Uniti centro-meridionali Località del cluster.
certificateThumbprint

Il valore deve essere vuoto se si crea un certificato autofirmato o si specifica un file di certificato.

Per usare un certificato esistente precedentemente caricato in un insieme di credenziali delle chiavi, immettere il valore di identificazione personale SHA1 del certificato, ad esempio "6190390162C988701DB5676EB81083EA608DCCF3".

certificateUrlValue

Il valore deve essere vuoto se si crea un certificato autofirmato o si specifica un file di certificato.

Per usare un certificato esistente precedentemente caricato in un insieme di credenziali delle chiavi, immettere l'URL del certificato, Ad esempio: “https://mykeyvault.vault.azure.net:443/secrets/mycertificate/02bea722c9ef4009a76c5052bcbf8346".

sourceVaultValue

Il valore deve essere vuoto se si crea un certificato autofirmato o si specifica un file di certificato.

Per usare un certificato esistente precedentemente caricato in un insieme di credenziali delle chiavi, immettere il valore dell'insieme di credenziali di origine, ad esempio "/subscriptions/333cc2c84-12fa-5778-bd71-c71c07bf873f/resourceGroups/MyTestRG/providers/Microsoft.KeyVault/vaults/MYKEYVAULT".

Distribuire la rete virtuale e il cluster

Configurare quindi la topologia di rete e distribuire il cluster di Service Fabric. Il modello di Resource Manager AzureDeploy.json crea una rete virtuale e una subnet per Service Fabric. Il modello distribuisce anche un cluster in cui è abilitata la sicurezza basata su certificati. Come certificato per i cluster di produzione usare un certificato di un'entità di certificazione (CA). Per proteggere i cluster di test è possibile usare un certificato autofirmato.

Il modello in questo articolo distribuisce un cluster che usa l'identificazione personale del certificato per identificare il certificato del cluster. Nessun certificato può avere la stessa identificazione personale di un altro, il che rende più difficile gestire i certificati. Commutare un cluster distribuito dall'uso di identificazioni personali del certificato all'uso di nomi comuni del certificato rende molto più semplice la gestione dei certificati. Per informazioni su come aggiornare il cluster per l'uso dei nomi comuni del certificato per la gestione dei certificati, vedere Passare dall'uso di identificazioni personali del certificato all'uso di nomi comuni del certificato in un cluster.

Creare un cluster usando un certificato esistente

Lo script seguente usa il comando az sf cluster create e il modello per distribuire un nuovo cluster protetto con un certificato esistente. Il comando crea anche un nuovo insieme di credenziali delle chiavi in Azure e carica il certificato.

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

Creare un cluster usando un nuovo certificato autofirmato

Lo script seguente usa il comando az sf cluster create e un modello per distribuire un nuovo cluster in Azure. Il comando crea anche un insieme di credenziali delle chiavi in Azure, aggiunge un nuovo certificato autofirmato all'insieme di credenziali delle chiavi e scarica il file del certificato in locale.

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

Connettersi al cluster sicuro

Connettersi al cluster tramite l'interfaccia della riga di comando di Service Fabric sfctl cluster select con la chiave. Usare solo l'opzione --no-verify per un certificato autofirmato.

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

Verificare di essere connessi e che il cluster sia integro usando il comando sfctl cluster health.

sfctl cluster health

Pulire le risorse

Se non si intende passare subito all'articolo successivo, è opportuno eliminare il cluster per evitare di sostenere costi.

Passaggi successivi

Informazioni su come ridimensionare un cluster.

Il modello in questo articolo distribuisce un cluster che usa l'identificazione personale del certificato per identificare il certificato del cluster. Nessun certificato può avere la stessa identificazione personale di un altro, il che rende più difficile gestire i certificati. Commutare un cluster distribuito dall'uso di identificazioni personali del certificato all'uso di nomi comuni del certificato rende molto più semplice la gestione dei certificati. Per informazioni su come aggiornare il cluster per l'uso dei nomi comuni del certificato per la gestione dei certificati, vedere Passare dall'uso di identificazioni personali del certificato all'uso di nomi comuni del certificato in un cluster.