Implantar um cluster do Service Fabric do Linux em uma rede virtual do Azure

Neste artigo você aprenderá como implantar um cluster Linux do Service Fabric em uma VNET (rede virtual) do Azure usando a CLI do Azure e um modelo. Ao terminar, você terá um cluster em execução na nuvem no qual você poderá implantar aplicativos. Para criar um cluster do Windows usando o PowerShell, consulte Create a secure Windows cluster on Azure (Criar um cluster seguro do Windows no Azure).

Pré-requisitos

Antes de começar:

Os procedimentos a seguir criam um cluster de sete nós do Service Fabric. Para calcular o custo incorrido ao executar um cluster do Service Fabric no Azure, use a Calculadora de Preços do Azure.

Baixar e explorar o modelo

Baixe os seguintes arquivos do modelo do Resource Manager:

Para Ubuntu 18.04 LTS:

  • AzureDeploy.json
    • O atributo vmImageSku é "18.04-LTS"
    • Microsoft.ServiceFabric/recursos de clusters
      • apiVersion sendo definido como "2019-03-01"
      • propriedade vmImage sendo definida como "Ubuntu18_04"
  • AzureDeploy.Parameters.json

Para Ubuntu 20.04 LTS:

  • AzureDeploy.json
    • O atributo vmImageSku é "20.04-LTS"
    • Microsoft.ServiceFabric/recursos de clusters
      • apiVersion sendo definido como "2019-03-01"
      • A propriedade vmImage sendo definida como "Ubuntu20_04"
  • AzureDeploy.Parameters.json

Esses modelos implantam um cluster seguro de sete máquinas virtuais e três tipos de nó em uma rede virtual. Outros modelos de exemplo podem ser encontrados no GitHub. O AzureDeploy.json implanta uma série de recursos, incluindo os seguintes.

Cluster do Service Fabric

No recurso Microsoft.ServiceFabric/clusters, um cluster do Linux é implantado com as seguintes características:

  • três tipos de nó
  • cinco nós no tipo de nó primário (configurável nos parâmetros de modelo), um nó em cada um dos outros tipos de nó
  • SO: (Ubuntu 18.04 LTS / Ubuntu 20.04) (configurável nos parâmetros do modelo)
  • certificado protegidos (configurável nos parâmetros de modelo)
  • Serviço DNS está habilitado
  • Nível de durabilidade de Bronze (configurável nos parâmetros de modelo)
  • Nível de confiabilidade de Prata (configurável nos parâmetros de modelo)
  • ponto de extremidade de conexão de cliente: 19000 (configurável nos parâmetros de modelo)
  • ponto de extremidade de conexão de cliente: 19080 (configurável nos parâmetros de modelo)

Azure Load Balancer

No recurso Microsoft.Network/loadBalancers, um balanceador de carga é configurado e investigações e regras são configuradas para as seguintes portas:

  • ponto de extremidade de conexão do cliente: 19000
  • ponto de extremidade de gateway HTTP: 19080
  • porta do aplicativo: 80
  • porta do aplicativo: 443

Rede virtual e sub-rede

Os nomes da rede virtual e da sub-rede são declarados nos parâmetros de modelo. Espaços de endereço de rede virtual e sub-rede também são declarados nos parâmetros de modelo e configurados no recurso Microsoft.Network/virtualNetworks:

  • espaço de endereço da rede virtual: 10.0.0.0/16
  • espaço de endereço de sub-rede do Service Fabric: 10.0.2.0/24

Se forem necessárias outras portas de aplicativo, você precisará ajustar o recurso Microsoft.Network/loadBalancers para permitir o tráfego de entrada.

Extensão do Service Fabric

No recurso Microsoft.Compute/virtualMachineScaleSets, a extensão Linux do Service Fabric está configurada. Essa extensão é usada para inicializar o Service Fabric em Máquinas Virtuais do Azure e configurar a Segurança do Nó.

A seguir, um trecho de código de modelo para a extensão Linux do 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"
     }
   },

Definir os parâmetros do modelo

O arquivo AzureDeploy.Parameters declara muitos valores usados para implantar o cluster e os recursos associados. Alguns dos parâmetros que você talvez precise modificar para sua implantação:

Parâmetro Valor de exemplo Observações
adminUserName vmadmin Um nome de usuário de administrador para as VMs do cluster.
adminPassword Password#1234 Uma senha de administrador para as VMs do cluster.
clusterName mysfcluster123 Nome do cluster.
local southcentralus Localização do cluster.
certificateThumbprint

O valor deve estar vazio se for criado um certificado auto-assinado ou for fornecido um arquivo de certificado.

Para usar um certificado existente que já foi carregado em um cofre de chaves, preencha o valor da impressão digital SHA1 do certificado. Por exemplo, "6190390162C988701DB5676EB81083EA608DCCF3".

certificateUrlValue

O valor deve estar vazio se for criado um certificado auto-assinado ou for fornecido um arquivo de certificado.

Para usar um certificado existente que foi previamente carregado para um cofre de chaves, preencha a URL do certificado. (Por exemplo, "https://mykeyvault.vault.azure.net:443/secrets/mycertificate/02bea722c9ef4009a76c5052bcbf8346".

sourceVaultValue

O valor deve estar vazio se for criado um certificado auto-assinado ou for fornecido um arquivo de certificado.

Para usar um certificado existente que foi previamente carregado para um cofre de chaves, preencha o valor do cofre de origem. For example, "/subscriptions/333cc2c84-12fa-5778-bd71-c71c07bf873f/resourceGroups/MyTestRG/providers/Microsoft.KeyVault/vaults/MYKEYVAULT".

Implantar a rede virtual e o cluster

Em seguida, configure a topologia de rede e implante o cluster do Service Fabric. O modelo do Resource Manager AzureDeploy.json cria uma VNET (rede virtual) e uma sub-rede para o Service Fabric. O modelo também implanta um cluster com a segurança de certificado habilitada. Para clusters de produção, use um certificado de uma autoridade de certificação (CA) como o certificado de cluster. Um certificado autoassinado pode ser usado para proteger clusters de teste.

O modelo deste artigo implanta um cluster que usa a impressão digital do certificado para identificar o certificado de cluster. Dois certificados não podem ter a mesma impressão digital, o que dificulta o gerenciamento de certificados. Alternar um cluster implantado do uso de impressões digitais de certificado para o uso de nomes comuns do certificado simplifica muito o gerenciamento de certificados. Para saber como atualizar o cluster para que ele use nomes comuns de certificado para o gerenciamento de certificados, leia Alterar o cluster para o gerenciamento de nomes comuns de certificado.

Criar um cluster usando um certificado existente

O script a seguir usa o comando az sf cluster create e o modelo para implantar um novo cluster protegido por um certificado existente. O comando também cria um novo cofre de chaves no Azure e carrega o certificado.

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

Criar um cluster usando um novo certificado autoassinado

O script a seguir usa o comando az sf cluster create e um modelo para implantar um novo cluster no Azure. O comando também cria um cofre de chaves no Azure, adiciona um certificado autoassinado a ele e baixa o arquivo de certificado localmente.

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

Conectar-se ao cluster seguro

Conecte-se ao cluster usando o comando sfctl cluster select da CLI do Service Fabric com a sua chave. Observação: use apenas a opção --no-verify para um certificado autoassinado.

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

Verifique se você está conectado e se o cluster está íntegro usando o comando sfctl cluster health.

sfctl cluster health

Limpar recursos

Se você não for imediatamente para o próximo artigo, exclua o cluster para evitar a cobrança de encargos.

Próximas etapas

Saiba como dimensionar um cluster.

O modelo deste artigo implanta um cluster que usa a impressão digital do certificado para identificar o certificado de cluster. Dois certificados não podem ter a mesma impressão digital, o que dificulta o gerenciamento de certificados. Alternar um cluster implantado do uso de impressões digitais de certificado para o uso de nomes comuns do certificado simplifica muito o gerenciamento de certificados. Para saber como atualizar o cluster para que ele use nomes comuns de certificado para o gerenciamento de certificados, leia Alterar o cluster para o gerenciamento de nomes comuns de certificado.