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, você terá um contêiner do Windows Server Core 2016 Server e do IIS em execução. Este guia de início rápido descreve a implantação de um contêiner do Windows. Leia este início rápido para implantar um contêiner Linux.
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 Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Pré-requisitos
- Uma subscrição do Azure (pode criar uma conta gratuita).
- Um computador de desenvolvimento executando:
- Visual Studio 2019 ou Windows 2019.
- SDK e ferramentas do Service Fabric.
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 o aplicativo Service Fabric, nomeie-o "MyFirstContainer" e clique em Criar.
Selecione Contentor nos modelos de Contentores e Aplicações Alojados.
Em Nome da Imagem, digite "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.
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 contêineres criados usando o Windows Server versão 1709 não são executados em hosts que executam o 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 senha estão em branco para a imagem de contêiner público que está no Docker Hub, portanto, desativamos a criptografia porque criptografar uma senha em branco gerará um erro de compilação.
<RepositoryCredentials AccountName="" Password="" PasswordEncrypted="false" />
Criar um cluster
O script de exemplo a seguir 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. Você pode saber mais sobre como criar um cluster usando esse script em Criar um cluster do Service Fabric.
Se necessário, instale o Azure PowerShell usando as instruções encontradas no guia do Azure PowerShell.
Antes de executar o script a seguir, no PowerShell execute Connect-AzAccount
para criar uma conexão com o Azure.
Copie o script a seguir para a área de transferência e abra o Windows PowerShell ISE. Cole o conteúdo na janela vazia Untitled1.ps1. Em seguida, forneça valores para as variáveis no script: subscriptionId
, certpwd
, certfolder
, adminuser
, adminpwd
e assim por diante. O diretório especificado deve certfolder
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 seus valores para as variáveis, pressione F5 para executar o script.
Depois que o script for executado e o cluster for criado, localize o ClusterEndpoint
na saída. 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 armazenamento de certificados CurrentUser\My . O arquivo PFX estará no diretório especificado usando a certfolder
variável de ambiente no script do PowerShell acima.
Mude para esse diretório e execute o seguinte comando do PowerShell, substituindo o nome do arquivo PFX que está no diretório certfolder
e a senha especificada na certpwd
variável. Neste exemplo, o diretório atual é definido como 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 retorna a impressão digital:
...
PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
0AC30A2FA770BEF566226CFCF75A6515D73FC686 CN=mysfcluster.SouthCentralUS.cloudapp.azure.com
Lembre-se do valor da impressão digital para a etapa a seguir.
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 a seguir CN= na janela do PowerShell quando executou o comando acima e adicione uma Import-PfxCertificate
porta 19000
a ele. Por exemplo, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000
. Copie-o para o campo Ponto de extremidade de conexão. Lembre-se desse valor porque você precisará dele em uma etapa futura.
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 devem corresponder à impressão digital do certificado instalado quando você executou Import-PfxCertificate
na etapa anterior.
Clique em Publicar.
Cada aplicação no cluster tem de ter um nome exclusivo. Se houver um conflito de nome, renomeie o projeto do Visual Studio e implante novamente.
Abra um navegador e navegue até o endereço que você colocou no campo Ponto de extremidade de conexão na etapa 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.
Você deve ver a página da Web padrão do IIS:
Limpeza
Você continua a incorrer em cobranças enquanto o cluster está em execução. Considere excluir seu cluster.
Próximos passos
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 contêineres do Windows no Service Fabric, continue no tutorial para aplicativos de contêiner do Windows.