Condividi tramite


Avvio rapido: Distribuire i contenitori Windows in Service Fabric

Azure Service Fabric è una piattaforma di sistemi distribuiti per la distribuzione e la gestione di microservizi e contenitori scalabili e affidabili.

Per eseguire un'applicazione esistente in un contenitore Windows in un cluster di Service Fabric non è necessario apportare modifiche all'applicazione. Questa guida introduttiva illustra come distribuire un'immagine del contenitore Docker predefinita in un'applicazione di Service Fabric. Al termine, saranno in esecuzione un server Windows Server Core 2016 e un contenitore IIS. Questa guida di avvio rapido descrive la distribuzione di un contenitore di Windows. Per distribuire un contenitore di Linux, vedere questa guida di avvio rapido.

IIS default web page

In questa guida introduttiva si apprende come:

  • Creare un pacchetto di un contenitore di un'immagine Docker
  • Configurare la comunicazione
  • Compilare l'applicazione di Service Fabric e creare il pacchetto
  • Distribuire l'applicazione del contenitore in Azure

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Prerequisiti

Creare un pacchetto di un contenitore di un'immagine Docker con Visual Studio

L'SDK e gli strumenti di Service Fabric offrono un modello di servizio che permette di distribuire un contenitore in un cluster di Service Fabric.

Avviare Visual Studio come "Amministratore". Selezionare File>New (Nuovo) >Project (Progetto).

Selezionare l'applicazione di Service Fabric, denominarla "MyFirstContainer" e fare clic su Crea.

Selezionare Contenitore dai modelli Applicazioni e contenitori ospitati.

In Nome immagine immettere "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016", ossia l'immagine di base di Windows Server Core Server e IIS.

Configurare il mapping dalla porta all'host del contenitore in modo che per le richieste in ingresso per il servizio sulla porta 80 venga eseguito il mapping alla porta 80 del contenitore. Impostare la Porta del contenitore su "80" e impostare Porta host su "80".

Assegnare al servizio il nome "MyContainerService" e fare clic su OK.

New service dialog

Specificare la build del sistema operativo per l'immagine del contenitore

I contenitori compilati con una versione specifica di Windows Server potrebbero non supportare l'esecuzione in un host con una versione diversa di Windows Server. Ad esempio, i contenitori compilati con Windows Server versione 1709 non possono essere eseguiti negli host che eseguono Windows Server 2016. Per altre informazioni, vedere Windows Server container OS and host OS compatibility (Compatibilità tra il sistema operativo del contenitore di Windows Server e il sistema operativo dell'host).

Con la versione 6.1 del runtime di Service Fabric e le versioni più recenti, è possibile specificare più immagini del sistema operativo per ogni contenitore e contrassegnare ognuna con la versione della build del sistema operativo in cui deve essere distribuita. Ciò consente di assicurarsi che l'applicazione venga eseguita in host che eseguono versioni diverse del sistema operativo Windows. Per altre informazioni, vedere Specificare immagini del contenitore specifiche per la build del sistema operativo.

Microsoft pubblica immagini diverse per le versioni di IIS compilate per versioni differenti di Windows Server. Per assicurarsi che Service Fabric distribuisca un contenitore compatibile con la versione di Windows Server in esecuzione nei nodi del cluster in cui si distribuisce l'applicazione, aggiungere le righe seguenti righe al file ApplicationManifest.xml. La versione della build per Windows Server 2016 è 14393 e la versione della build per Windows Server versione 1709 è 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> 

Il manifesto del servizio continua a specificare solo un'immagine per nanoserver, mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016.

Nel file ApplicationManifest.xml impostare anche PasswordEncrypted su false. Dato che l'account e la password sono vuoti per l'immagine del contenitore pubblica disponibile nell'hub Docker, si disattiva la crittografia perché la crittografia di una password vuota genera un errore di compilazione.

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

Creare un cluster

Lo script di esempio seguente crea un cluster di Service Fabric con cinque nodi protetto con un certificato X.509. Il comando crea un certificato autofirmato e lo carica in un nuovo insieme di credenziali delle chiavi. Il certificato viene copiato anche in una directory locale. Per altre informazioni sulla creazione di un cluster con questo script, vedere Creare un cluster di Service Fabric.

Se necessario, installare Azure PowerShell seguendo le istruzioni presenti nella guida di Azure PowerShell.

Prima di eseguire questo script, in PowerShell eseguire Connect-AzAccount per creare una connessione con Azure.

Copiare lo script seguente negli Appunti e aprire Windows PowerShell ISE. Incollare il contenuto nella finestra vuota Untitled1.ps1. Specificare quindi i valori per le variabili nello script: subscriptionId, certpwd, certfolder, adminuser, adminpwd e così via. La directory specificata per certfolder deve essere già presente prima dell'esecuzione dello 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

Dopo avere specificato i valori per le variabili, premere F5 per eseguire lo script.

Dopo l'esecuzione dello script e la creazione del cluster, trovare ClusterEndpoint nell'output. Ad esempio:

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

Installare il certificato per il cluster

Si installerà ora il certificato PFX nell'archivio certificati CurrentUser\My. Il file PFX si troverà nella directory specificata con la variabile di ambiente certfolder nello script di PowerShell precedente.

Passare a tale directory e quindi eseguire il comando di PowerShell seguente, sostituendo il nome del file PFX che si trova nella directory certfolder e la password specificata nella variabile certpwd. In questo esempio, come directory corrente è impostata la directory specificata dalla variabile certfolder nello script di PowerShell. Da questa posizione viene eseguito il comando Import-PfxCertificate:

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

Il comando restituisce l'identificazione personale:

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

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

Ricordare il valore di identificazione personale per il passaggio seguente.

Distribuire l'applicazione in Azure usando Visual Studio

Ora che l'applicazione è pronta, è possibile distribuirla in un cluster direttamente da Visual Studio.

Fare clic con il pulsante destro del mouse su MyFirstContainer in Esplora soluzioni e scegliere Pubblica. Verrà visualizzata la finestra di dialogo Pubblica.

Copiare il contenuto che segue CN= nella finestra di PowerShell in cui è stato eseguito il comando Import-PfxCertificate precedente e aggiungervi la porta 19000. Ad esempio, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000. Copiare nel campo Endpoint connessione. Ricordare questo valore perché sarà necessario in un passaggio successivo.

Fare clic su Parametri di connessione avanzati e verificare le informazioni sui parametri di connessione. I valori di FindValue e ServerCertThumbprint devono corrispondere all'identificazione personale del certificato installato eseguendo Import-PfxCertificate nel passaggio precedente.

Publish Dialog

Fare clic su Pubblica.

Ogni applicazione nel cluster deve avere un nome univoco. Se è presente un conflitto di nomi, ridenominare il progetto di Visual Studio e distribuirlo di nuovo.

Aprire un browser e passare all'indirizzo inserito nel campo Endpoint connessione nel passaggio precedente. Facoltativamente, è possibile anteporre l'identificatore di schema, http://, e accodare la porta, :80, all'URL. Ad esempio, http://mysfcluster.SouthCentralUS.cloudapp.azure.com:80.

Viene generalmente visualizzata la pagina Web predefinita di IIS: IIS default web page

Eseguire la pulizia

Mentre il cluster è in esecuzione, continuano a essere addebitati i relativi costi. Valutare la possibilità di eliminare il cluster.

Passaggi successivi

In questa guida introduttiva si è appreso come:

  • Creare un pacchetto di un contenitore di un'immagine Docker
  • Configurare la comunicazione
  • Compilare l'applicazione di Service Fabric e creare il pacchetto
  • Distribuire l'applicazione del contenitore in Azure

Per altre informazioni sull'uso di contenitori Windows in Service Fabric, continuare con l'esercitazione sulle applicazioni contenitore Windows.