Início rápido: Implementar contentores do Windows no Service Fabric

O Azure Service Fabric é uma plataforma de sistemas distribuídos par implementar e gerir microsserviços e contentores dimensionáveis e fiáveis.

Para executar uma aplicação existente num contentor do Windows num cluster do Service Fabric, não precisa de fazer quaisquer alterações à sua aplicação. Este guia de início rápido mostra como implementar uma imagem de contentor do Docker pré-concebida numa aplicação do Service Fabric. Quando terminar, terá um contentor do Windows Server Core 2016 Server e IIS em execução. Este início rápido descreve a implementação de um contentor do Windows. Leia este início rápido para implementar um contentor do Linux.

Página Web do IIS predefinida

Neste início rápido, vai aprender a:

  • Empacotar um contentor de imagens do Docker
  • Configurar a comunicação
  • Criar e empacotar a aplicação do Service Fabric
  • Implementar a aplicação de contentor no Azure

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Pré-requisitos

Empacotar um contentor de imagens do Docker com o Visual Studio

O SDK e as ferramentas do Service Fabric fornecem um modelo de serviço para o ajudar a implementar um contentor num cluster do Service Fabric.

Inicie o Visual Studio como “Administrador”. Selecione Ficheiro>Novo>Projeto.

Selecione Aplicação do Service Fabric, dê-lhe o nome "MyFirstContainer" e clique em Criar.

Selecione Contentor nos modelos de Contentores e Aplicações Alojados.

Em Nome da Imagem, introduza "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016", a imagem base do Windows Server Core Server e do IIS.

Configure o mapeamento de portas, da porta para o anfitrião do contentor, de modo que os pedidos recebidos para o serviço na porta 80 sejam mapeados para a porta 80 no contentor. Defina a Porta de Contentor para "80" e defina a Porta do Anfitrião para "80".

Dê ao serviço o nome "MyContainerService" e clique em OK.

Caixa de diálogo do novo serviço

Especificar a compilação do SO para a imagem do contentor

Os contentores criados com uma versão específica do Windows Server poderão não funcionar num anfitrião com uma versão diferente do Windows Server. Por exemplo, os contentores criados com o Windows Server versão 1709 não são executados em anfitriões com Windows Server 2016. Para obter mais informações, veja Compatibilidade do sistema operativo do contentor do Windows Server e do sistema operativo do sistema anfitrião .

Com a versão 6.1 do runtime do Service Fabric e com versões mais recentes, pode especificar várias imagens de sistema operativo por contentor e etiquetar cada uma com a versão do sistema operativo para a qual deve ser implementada. Este procedimento ajuda-o a verificar se a aplicação funcionará em sistemas anfitriões com versões diferentes do sistema operativo Windows. Para saber mais, veja Indicar imagens de contentor específicas da compilação de SO.

A Microsoft publica imagens diferentes para as versões do IIS criadas em diferentes versões do Windows Server. Para verificar se o Service Fabric implementa um contentor compatível com a versão do Windows Server que em execução nos nós do cluster onde implementa a aplicação, adicione as seguintes linhas ao ficheiro ApplicationManifest.xml. A versão de compilação do Windows Server 2016 é 14393 e a da versão 1709 do Windows Server é 16299.

    <ContainerHostPolicies CodePackageRef="Code"> 
      <ImageOverrides> 
        ...
	      <Image Name="mcr.microsoft.com/windows/servercore/iis:windowsservercore-1803" /> 
          <Image Name= "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016" Os="14393" /> 
          <Image Name="mcr.microsoft.com/windows/servercore/iis:windowsservercore-1709" Os="16299" /> 
      </ImageOverrides> 
    </ContainerHostPolicies> 

O manifesto de serviço continua a especificar apenas uma imagem para o Nano Server, mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016.

Também no ficheiro ApplicationManifest.xml , altere PasswordEncrypted para false. A conta e a palavra-passe estão em branco para a imagem de contentor pública que está no Docker Hub, pelo que desativamos a encriptação porque encriptar uma palavra-passe em branco irá gerar um erro de compilação.

<RepositoryCredentials AccountName="" Password="" PasswordEncrypted="false" />

Criar um cluster

O seguinte script de exemplo cria um cluster do Service Fabric de cinco nós protegido com um certificado X.509. O comando cria um certificado autoassinado e carrega-o para um novo cofre de chaves. O certificado é também copiado para um diretório local. Pode saber mais sobre como criar um cluster com este script em Criar um cluster do Service Fabric.

Se necessário, instale o Azure PowerShell com as instruções encontradas no guia de Azure PowerShell.

Antes de executar o seguinte script, no PowerShell, execute Connect-AzAccount para criar uma ligação com o Azure.

Copie o seguinte script para a área de transferência e abra Windows PowerShell ISE. Cole o conteúdo na janela Untitled1.ps1 vazia. Em seguida, forneça valores para as variáveis no script: subscriptionId, certpwd, certfolder, adminuser, , adminpwde assim sucessivamente. O diretório que especificar certfolder tem de existir antes de executar o script.

#Provide the subscription Id
$subscriptionId = 'yourSubscriptionId'

# Certificate variables.
$certpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force
$certfolder="c:\mycertificates\"

# Variables for VM admin.
$adminuser="vmadmin"
$adminpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force 

# Variables for common values
$clusterloc="SouthCentralUS"
$clustername = "mysfcluster"
$groupname="mysfclustergroup"       
$vmsku = "Standard_D2_v2"
$vaultname = "mykeyvault"
$subname="$clustername.$clusterloc.cloudapp.azure.com"

# Set the number of cluster nodes. Possible values: 1, 3-99
$clustersize=5 

# Set the context to the subscription Id where the cluster will be created
Select-AzSubscription -SubscriptionId $subscriptionId

# Create the Service Fabric cluster.
New-AzServiceFabricCluster -Name $clustername -ResourceGroupName $groupname -Location $clusterloc `
-ClusterSize $clustersize -VmUserName $adminuser -VmPassword $adminpwd -CertificateSubjectName $subname `
-CertificatePassword $certpwd -CertificateOutputFolder $certfolder `
-OS WindowsServer2016DatacenterwithContainers -VmSku $vmsku -KeyVaultName $vaultname

Depois de fornecer os seus valores para as variáveis, prima F5 para executar o script.

Depois de o script ser executado e o cluster ser criado, localize o ClusterEndpoint no resultado. Por exemplo:

...
ClusterEndpoint : https://southcentralus.servicefabric.azure.com/runtime/clusters/b76e757d-0b97-4037-a184-9046a7c818c0

Instalar o certificado para o cluster

Agora, vamos instalar o PFX no arquivo de certificados CurrentUser\My . O ficheiro PFX estará no diretório que especificou com a variável de certfolder ambiente no script do PowerShell acima.

Altere para esse diretório e, em seguida, execute o seguinte comando do PowerShell, substituindo o nome do ficheiro PFX que está no diretório certfolder e a palavra-passe que especificou na certpwd variável. Neste exemplo, o diretório atual está definido para o diretório especificado pela certfolder variável no script do PowerShell. A partir daí, o Import-PfxCertificate comando é executado:

PS C:\mycertificates> Import-PfxCertificate -FilePath .\mysfclustergroup20190130193456.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString Password#1234 -AsPlainText -Force)

O comando devolve o Thumbprint:

  ...
  PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
0AC30A2FA770BEF566226CFCF75A6515D73FC686  CN=mysfcluster.SouthCentralUS.cloudapp.azure.com

Lembre-se do valor thumbprint para o passo seguinte.

Implementar a aplicação no Azure com o Visual Studio

Agora que a aplicação está pronta, pode implementá-la num cluster diretamente a partir do Visual Studio.

Clique com o botão direito do rato em MyFirstContainer, no Explorador de Soluções, e escolha Publicar. É apresentada a caixa de diálogo Publicar.

Copie o conteúdo seguinte CN= na janela do PowerShell quando executou o Import-PfxCertificate comando acima e adicione a porta 19000 ao mesmo. Por exemplo, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000. Copie-o para o campo Ponto Final de Ligação . Lembre-se deste valor porque irá precisar dele num passo futuro.

Clique em Parâmetros de Ligação Avançada e verifique as informações dos parâmetros da ligação. Os valores FindValue e ServerCertThumbprint têm de corresponder ao thumbprint do certificado instalado quando executou Import-PfxCertificate no passo anterior.

Caixa de diálogo Publicar

Clique em Publish (Publicar).

Cada aplicação no cluster tem de ter um nome exclusivo. Se existir um conflito de nomes, mude o nome do projeto do Visual Studio e implemente novamente.

Abra um browser e navegue para o endereço que colocou no campo Ponto Final de Ligação no passo anterior. Opcionalmente, pode preceder o identificador do esquema, http://, e acrescentar a porta, :80, ao URL. Por exemplo, http://mysfcluster.SouthCentralUS.cloudapp.azure.com:80.

Deverá ver a página Web predefinida do IIS: página Web predefinida do IIS

Limpeza

Continua a incorrer em custos enquanto o cluster está em execução. Considere eliminar o cluster.

Passos seguintes

Neste início rápido, aprendeu a:

  • Empacotar um contentor de imagens do Docker
  • Configurar a comunicação
  • Criar e empacotar a aplicação do Service Fabric
  • Implementar a aplicação de contentor no Azure

Para saber mais sobre como trabalhar com contentores do Windows no Service Fabric, avance para o tutorial para aplicações de contentor do Windows.