Implementación de un clúster de Service Fabric de Linux en una red virtual de Azure

En este artículo, aprenderá a implementar un clúster de Service Fabric con Linux en una red virtual de Azure (VNET) mediante la CLI de Azure y una plantilla. Cuando haya terminado, tendrá un clúster que se ejecuta en la nube en el que puede implementar aplicaciones. Para crear un clúster con Windows mediante PowerShell, consulte la información sobre la creación de un clúster con Windows seguro en Azure.

Prerrequisitos

Antes de empezar:

Los siguientes procedimientos crean un clúster de Service Fabric de siete nodos. Para calcular el costo producido por la ejecución de un clúster de Service Fabric en Azure, use la Calculadora de precios de Azure.

Descarga y exploración de la plantilla

Descargue los siguientes archivos de plantilla de Resource Manager:

Para Ubuntu 18.04 LTS:

  • AzureDeploy.json
    • El atributo vmImageSku es "18.04-LTS"
    • Microsoft.ServiceFabric/clusters resource's
      • El establecimiento de apiVersion en "2019-03-01"
      • el establecimiento de la propiedad vmImage en "Ubuntu18_04"
  • AzureDeploy.Parameters.json

Para Ubuntu 20.04 LTS:

  • AzureDeploy.json
    • El atributo vmImageSku es "20.04-LTS"
    • Microsoft.ServiceFabric/clusters resource's
      • El establecimiento de apiVersion en "2019-03-01"
      • El establecimiento de la propiedad vmImage en "Ubuntu20_04"
  • AzureDeploy.Parameters.json

Estas plantillas implementan un clúster seguro de siete máquinas virtuales y tres tipos de nodo en una red virtual. Se pueden encontrar otras plantillas de ejemplo en GitHub. El archivo azuredeploy.json permite implementar varios recursos, incluidos los siguientes.

Clúster de Service Fabric

En el recurso Microsoft.ServiceFabric/clusters, se ha implementado un clúster de Linux con las siguientes características:

  • tres tipos de nodo
  • cinco nodos en el tipo de nodo principal (configurable en los parámetros de la plantilla), cada nodo está presente en cada uno de los otros tipos de nodo
  • Sistema operativo: (Ubuntu 18.04 LTS / Ubuntu 20.04 LTS) (configurable en los parámetros de la plantilla)
  • protección con certificado (configurable en los parámetros de la plantilla)
  • se habilita el servicio DNS
  • Nivel de durabilidad: Bronze (configurable en los parámetros de plantilla)
  • Nivel de confiabilidad: Silver (configurable en los parámetros de plantilla)
  • punto de conexión de la conexión de cliente: 19000 (configurable en los parámetros de la plantilla)
  • punto de conexión de la puerta de enlace HTTP: 19080 (configurable en los parámetros de la plantilla)

Azure Load Balancer

En el recurso Microsoft.Network/loadBalancers se han configurado un equilibrador de carga y sondeos y reglas para los siguientes puertos:

  • punto de conexión de la conexión de cliente: 19000
  • punto de conexión de la puerta de enlace HTTP: 19080
  • puerto de la aplicación: 80
  • puerto de la aplicación: 443

Red virtual y subred

Los nombres de la red virtual y la subred se declaran en los parámetros de la plantilla. Los espacios de direcciones de la red virtual y de la subred se declaran también en los parámetros de plantilla y se configuran en el recurso Microsoft.Network/virtualNetworks:

  • espacio de direcciones de red virtual: 10.0.0.0/16
  • espacio de direcciones de subred de Service Fabric: 10.0.2.0/24

Si se necesitan otros puertos de aplicación, deberá ajustar el recurso Microsoft.Network/loadBalancers para permitir el tráfico de entrada.

Extensión de Service Fabric

En el recurso Microsoft.Compute/virtualMachineScaleSets se configura la extensión de Linux de Service Fabric. Esta extensión se utiliza para arrancar Service Fabric en Azure Virtual Machines y configurar la seguridad de nodo.

A continuación se muestra un fragmento de plantilla para la extensión de Linux de 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"
     }
   },

Configuración de los parámetros de plantilla

El archivo AzureDeploy.Parameters permite declarar muchos valores que se usan para implementar el clúster y los recursos asociados. Estos son algunos de los parámetros que debe modificar para su implementación:

Parámetro Valor de ejemplo Notas
adminUserName vmadmin Nombre de usuario del administrador de las máquinas virtuales del clúster.
adminPassword Password#1234 Contraseña del administrador de las máquinas virtuales del clúster.
clusterName mysfcluster123 Nombre del clúster.
ubicación southcentralus Ubicación del clúster.
certificateThumbprint

El valor debe estar vacío si se va a crear un certificado autofirmado o a proporcionar un archivo de certificados.

Para usar un certificado existente cargado previamente en un almacén de claves, rellene el valor de huella digital SHA1 del certificado. Por ejemplo, "6190390162C988701DB5676EB81083EA608DCCF3".

certificateUrlValue

El valor debe estar vacío si se va a crear un certificado autofirmado o a proporcionar un archivo de certificados.

Para usar un certificado existente cargado previamente en un almacén de claves, especifique la dirección URL del certificado. Por ejemplo, "https://mykeyvault.vault.azure.net:443/secrets/mycertificate/02bea722c9ef4009a76c5052bcbf8346".

sourceVaultValue

El valor debe estar vacío si se va a crear un certificado autofirmado o a proporcionar un archivo de certificados.

Para usar un certificado existente cargado previamente en un almacén de claves, especifique el valor del almacén de claves de origen. Por ejemplo, "/subscriptions/333cc2c84-12fa-5778-bd71-c71c07bf873f/resourceGroups/MyTestRG/providers/Microsoft.KeyVault/vaults/MYKEYVAULT".

Implementación de la red virtual y el clúster

A continuación, configure la topología de red e implemente el clúster de Service Fabric. La plantilla AzureDeploy.json de Resource Manager crea una red virtual (VNET) y una subred para Service Fabric. La plantilla permite también implementar un clúster con seguridad mediante certificados habilitada. Para los clústeres de producción, use un certificado de una entidad de certificación (CA) como certificado del clúster. Un certificado autofirmado se puede usar para proteger los clústeres de prueba.

La plantilla de este artículo implementa un clúster que usa la huella digital para identificar el certificado del clúster. No hay dos certificados que puedan tener la misma huella digital, lo que dificulta la administración de certificados. Si cambia un clúster implementado para que use nombres comunes del certificado en vez de las huellas digitales del mismo, será mucho más fácil administrar los certificados. Para más información sobre cómo actualizar el clúster para que use nombres comunes del certificado para la administración de certificados, consulte cómo cambiar el clúster a administración de nombre común del certificado.

Creación de un clúster mediante un certificado existente

El script siguiente usa el comando az sf cluster create y una plantilla para implementar un clúster nuevo protegido con un certificado existente. El comando también crea un nuevo almacén de claves de Azure y carga el 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

Creación de un clúster mediante un nuevo certificado autofirmado

El script siguiente usa el comando az sf cluster create y una plantilla para implementar un clúster nuevo en Azure. El comando también crea un almacén de claves en Azure, agrega un nuevo certificado autofirmado al almacén de claves y carga el certificado en el archivo de certificado de forma local.

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

Conexión al clúster seguro

Conéctese al clúster mediante el comando sfctl cluster select de la CLI de Service Fabric con su clave. Nota: Use la opción --no-verify solo para obtener un certificado autofirmado.

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

Compruebe que está conectado y que el estado del clúster es correcto mediante el comando sfctl cluster health.

sfctl cluster health

Limpieza de recursos

Si no va a pasar inmediatamente al siguiente artículo, puede eliminar el clúster para evitar incurrir en cargos.

Pasos siguientes

Aprenda a escalar un clúster.

La plantilla de este artículo implementa un clúster que usa la huella digital para identificar el certificado del clúster. No hay dos certificados que puedan tener la misma huella digital, lo que dificulta la administración de certificados. Si cambia un clúster implementado para que use nombres comunes del certificado en vez de las huellas digitales del mismo, será mucho más fácil administrar los certificados. Para más información sobre cómo actualizar el clúster para que use nombres comunes del certificado para la administración de certificados, consulte cómo cambiar el clúster a administración de nombre común del certificado.