Aprile 2018

Volume 33 Numero 4

Il presente articolo è stato tradotto automaticamente.

Azure - Distribuzione di applicazioni ASP.NET Core in contenitori in Azure

Dal Srikatan Sankaran

Insieme di credenziali chiave di Azure è un servizio basato su cloud che le organizzazioni possono sfruttare a in modo sicuro le informazioni aziendali riservate del Negozio. Nell'ultimo numero di MSDN Magazine (msdn.com/magazine/mt845653), è possibile esplorare uno scenario nel quale polizze per veicoli generati da un'agenzia potrebbero essere archiviati in modo sicuro nell'insieme di credenziali chiave di Azure come segreti e la visualizzazione come aggiuntive funzionalità quali la crittografia asimmetrica con controllo delle versioni predefinita e le chiavi potrebbe essere utilizzata per gestire un audit trail di accesso ai criteri di assicurazione. Le applicazioni che usato insieme credenziali chiavi Azure sono state distribuite al servizio App di Azure come App Web. Questo problema, dovrà essere distribuito le stesse applicazioni contenitore in servizi di Azure per Kubernetes (AKS). Servizi di contenitore di Azure offre la possibilità di creare e distribuire applicazioni abilitate per contenitore Docker in Azure.

Scenario di caso d'uso

Esistono due applicazioni Web ASP.NET Core 2.0 nella soluzione che accompagna questo articolo, un portale di amministrazione utilizzato dalla società di assicurazioni, agenzie e istanze di Service Broker e utilizzati da entrambi i consumatori che acquistano i criteri di assicurazione veicolo o da un portale per i clienti regolamentazione per verificare la validità della polizza. Vedere l'articolo precedente per ulteriori informazioni sullo scenario di business indirizzato dalla soluzione e per informazioni su come insieme di credenziali chiave di Azure ha consentito di soddisfare tali requisiti.

Architettura della soluzione

Figura 1 rappresenta l'architettura della soluzione, con modifiche non essenziali dall'articolo precedente. Invece di servizio App di Azure, un singolo cluster AKS consente di ospitare applicazioni Web su Linux, usano i contenitori di Docker. Gateway applicazione Azure viene utilizzata per esporre un endpoint abilitato per SSL per i client in esecuzione nel browser e per l'app Xamarin native e instrada le richieste per le applicazioni Web distribuite in AKS. Azure Active Directory (Azure AD) viene usato per autenticare gli utenti del portale di amministrazione durante Azure Active Directory B2C (Azure Active Directory B2C) viene utilizzato per i consumer di accesso al portale del cliente. Database SQL di Azure archivia le informazioni sui metadati che riguardano i criteri di assicurazione creati nella soluzione e insieme credenziali chiavi Azure contiene le informazioni riservate che verranno utilizzate per verificare la validità e autenticità di ogni polizza di assicurazione. Esistono altre opzioni, oltre a AKS, per la distribuzione di applicazioni nei contenitori, ad esempio Azure contenitore istanze ACI () e le app Web di Azure per i contenitori, che vengono inoltre descritti in questo articolo, sebbene non illustrato nella figura 1.

Architettura della soluzione
Figura 1 architettura della soluzione

Modifica la soluzione in base alla nuova architettura

Naturalmente, per l'architettura delle modifiche deve modificare la soluzione. Diamo un'occhiata a come è possibile modificare la soluzione.

Abilitare le applicazioni Web per i contenitori di Docker Visual Studio Tools per Docker fornisce un'implementazione completa per abilitare un'applicazione di base di ASP.NET 2.0 per Windows e i contenitori di Linux. Installazione di questo strumento offre un'opzione di menu basati su contesto nel progetto di Visual Studio 2017 che genera tutti gli elementi necessari per creare un contenitore Docker per l'applicazione. L'amministrazione e dell'utente (esterno) le applicazioni del portale nella soluzione sono stata inserite per i contenitori di Docker Linux. Prima di utilizzare lo strumento in Visual Studio 2017, è necessario installare Docker per Windows ed eseguire i passaggi di configurazione descritti in bit.ly/2F6YBRb. È possibile creare le immagini contenitore Docker usando la configurazione di "Rilascio" in Visual Studio 2017 per ognuno dei progetti di applicazione Web.

Esecuzione dei comandi di Docker nelle finestre della console vengono visualizzati due immagini contenitore, uno per ogni applicazione del portale, come illustrato figura 2.

Immagini docker le applicazioni Web
Figura 2 Docker Images le applicazioni Web

Caricamento di immagini contenitore in un registro di sistema privata le immagini contenitore create in precedenza sono state caricate prima di tutto a un registro di sistema di contenitore di Azure (ACR), da dove potrebbe essere utilizzati nei servizi di contenitore di Azure. L'istanza del record creato per questa distribuzione è "contosoinsacr". Dopo la firma nel Registro di sistema usando l'interfaccia CLI di Azure, è possibile eseguire i comandi di Docker per caricare le immagini contenitore in questo registro di sistema:

az acr login --name contosoinsacr --username <username> --password <password>
docker tag contosoinsauthorityadminportal contosoinsacr.azurecr.io/contosoinsauthorityadminportal:web1v1
docker push contosoinsacr.azurecr.io/contosoinsauthorityadminportal:web1v1
docker tag contosoinsextportal:latest contosoinsacr.azurecr.io/contosoinsextportal:web2v1
docker push contosoinsacr.azurecr.io/contosoinsextportal:web2v1
az acr repository list --name contosoinsacr --output table

L'ultimo comando Docker sono elencate le immagini contenitore dal record dopo che sono stati caricati. Consultare la documentazione relativa al bit.ly/2BZ1rdv, che forniscono informazioni su come creare un record e un'immagine Docker esegue il push al.

Distribuzione di applicazioni Web nei contenitori

Con l'amministratore ed esterno le applicazioni del portale (customer) è incluso nel pacchetto come contenitori, sono disponibili più opzioni disponibili in Azure per distribuirli. Iniziamo.

La distribuzione in istanze di contenitori Azure ACI consente di eseguire un'applicazione contenitore in Azure, senza dover eseguire il provisioning di tutte le macchine virtuali per includerli o gestiscono con orchestrazione contenitore per gestire più complessa in modo più rapido scenari. È sufficiente utilizzare esperienza del portale di Azure per creare un nuovo ACI e fornire le credenziali di accesso e fare riferimento alle immagini contenitore caricate in record nei passaggi descritti in precedenza. Al termine, l'istanza del contenitore il provisioning viene assegnato un indirizzo IP pubblico per l'accesso all'applicazione Web. Questi passaggi verrà eseguiti per le applicazioni del portale sia amministratore del cliente. Consultare la documentazione disponibile bit.ly/2CmuNhK per utilizzare il portale di Azure per creare un ACI e distribuire un'applicazione per ulteriori informazioni.

Prima di possono utilizzare queste applicazioni, è necessario configurare la "url di reindirizzamento" nelle pagine di registrazione dell'applicazione in Azure AD per il portale di amministrazione e in Azure Active Directory B2C per il portale di consumer. Figura 3 Mostra l'URL di risposta che è configurato per un'applicazione Web distribuita ACI o AKS.

Configurare gli URL di risposta: registrazione dell'App Azure AD
Figura 3 configurati gli URL di risposta: registrazione dell'App Azure AD

Distribuzione di App Web di Azure per i contenitori la distribuzione di un'applicazione in App Web di Azure per i contenitori è simile alla distribuzione in istanze di contenitori di Azure in quanto esistono nessuna macchina virtuale per effettuare il provisioning e nessun orchestrator per la gestione delle informazioni scenari complessi. Al contrario, i contenitori vengono distribuiti a un endpoint di istanza di servizio App di Azure gestito in Azure.

Figura 4 vengono mostrate le impostazioni necessarie per creare un'App Web di Azure per istanza contenitori nel portale di Azure. L'URL dell'immagine contenitore Docker caricato nel Registro di sistema di contenitore di Azure viene acquisito come parte della configurazione.

App Web di Azure per i contenitori
Figura 4 App Web di Azure per i contenitori

La distribuzione di App Web per i contenitori offre altre funzionalità che sono disponibili con il servizio App di Azure, come la possibilità di scalare in orizzontale l'app Web, configurare la scalabilità automatica e usare gli slot di distribuzione per la gestione temporanea e produzione.

Distribuzione di contenitore in servizi di Azure per Kubernetes (AKS) il primo passaggio è la creazione e configurazione di un cluster AKS. Prima di poter distribuire l'applicazione a AKS dal computer di sviluppo locale, è necessario disporre di strumenti di comando "kubectl" per Windows installato.

Durante la procedura può essere eseguita anche dal portale di Azure, i passaggi che verranno descritti di seguito sono per effettuare il provisioning di un cluster AKS in Azure utilizzando l'interfaccia CLI di Azure. Si noti che in questo momento, ACS è disponibile per tutte le regioni di Azure, AKS, che offre cluster Kubernetes gestiti con funzionalità non è disponibile in ACS, e che è attualmente in anteprima, è anche disponibile in solo alcune aree geografiche in tutto il World.  In questo caso, sto creando cluster in Europa occidentale. Ecco i comandi che è possibile utilizzare per eseguire questa operazione:

az group create --name contosoinsacsrg --location westeurope
az aks create  -g contosoinsacsrg --name contosoinsacsportal --generate-ssh-keys --admin-username <username> --node-count 1
az aks get-credentials -g contosoinsacsrg -n contosoinsacsportal

Per abilitare il cluster AKS accedere al Registro di contenitore di Azure per estrarre le immagini contenitore, l'entità servizio del cluster AKS viene assegnato un ruolo di "Lettura"; vale a dire, è specificato l'accesso in lettura per il record dell'istanza che ospita le immagini. Consultare la documentazione relativa al bit.ly/2ErvcBq per altre informazioni su questo. Ecco i comandi CLI utilizzati per eseguire queste azioni:

# Get the id of the service principal configured for AKS
az aks show --resource-group contosoinsacsrg --name contosoinsacsportal  --query "servicePrincipalProfile.clientId" --output tsv
# Get the ACR registry resource id
az acr show --name contosoinsacr --resource-group contosoInsAuthRG --query "id" --output tsv
# Create role assignment
az role assignment create --assignee <ServicePrincipalId> --role Reader --scope <resourceid>

Ora si distribuire l'applicazione per il cluster AKS. I passaggi che verrà illustrato di seguito implicano l'uso di comandi kubectl nella workstation di sviluppo che esegue Windows e Docker.

Vedrà come distribuire l'applicazione utilizzando i file "YAML". (YAML è un linguaggio di serializzazione dei dati spesso usato per i file di configurazione). Figura 5 illustra il file YAML consentono di distribuire il portale di amministrazione nella soluzione. Come un risultato di questo passaggio, l'immagine contenitore del portale di amministrazione viene effettuato il pull da record, il provisioning del cluster AKS ed esposti tramite un servizio di bilanciamento del carico di Azure e l'indirizzo IP pubblico.

Figura 5, il File contosoinsportal.yaml per la distribuzione del portale di amministrazione del cluster AKS

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: contosoinsadminv1
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: contosoinsadminv1
    spec:
      containers:
      - name: contosoinsadminv1
        image: contosoinsacr.azurecr.io/contosoinsauthorityadminportal:web1v1
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: regsecret2
---
apiVersion: v1
kind: Service
metadata:
  name: contosoinsadminv1
spec:
  ports:
  - port: 80
  selector:
    app: contosoinsadminv1
---
apiVersion: v1
kind: Service
metadata:
  name: contosoinsadminv1lb
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: contosoinsadminv1

Per consentire l'accesso all'immagine del contenitore di record, è necessario specificare le credenziali nel file YAML utilizzando "" pull"segreti. Il seguente comando kubectl genera un file secret chiamato "regsecret2", che viene scaricata sul computer locale. Questo file viene fatto riferimento nel file YAML consentono di distribuire l'applicazione:

kubectl create secret docker-registry regsecret2 --docker-server <acr-login-server> --docker-username <service-principal-ID> --docker-password <service-principal-password> --docker-email <email-address>

Eseguire il comando kubectl successivo consente di distribuire il portale di amministrazione per il cluster AKS, in base al file YAML passato come argomento. Esplorare il dashboard Kubernetes per visualizzare le applicazioni distribuite, come illustrato figura 6. Questi passaggi verranno ripetuti per il portale esterno, dopo il quale sarà distribuite entrambe le applicazioni per il cluster AKS, ciascuno con il proprio endpoint con bilanciamento del carico, pubblico:

 

kubectl create -f contosoinsportal.yaml
az aks browse --resource-group contosoinsacsrg --name contosoinsacsportal

Dashboard Kubernetes che mostra le applicazioni distribuite
Figura 6 Kubernetes Dashboard che mostra le applicazioni distribuite

Ora esaminiamo il processo di distribuzione degli aggiornamenti dell'applicazione. Quando la versione successiva del progetto è disponibile in Visual Studio 2017, viene aggiornata l'immagine di contenitore in Docker nel computer locale. Contrassegnare l'immagine nei record con la nuova versione "web2v2" e di sollecitare l'aggiornamento utilizzando i comandi che seguono. L'ultimo comando utilizza kubectl per aggiornare le unità del cluster Kubernetes con la nuova immagine contenitore caricata:

docker tag contosoinsextportal:latest contosoinsacr.azurecr.io/contosoinsextportal:web2v2

docker push contosoinsacr.azurecr.io/contosoinsextportal:web2v2

kubectl impostare immagine distribuzione contosoinsusersv1 contosoinsusersv1=contosoinsacr.azurecr.io/contosoinsextportal:web2v2

Figura 7 Mostra la pagina di destinazione del portale di amministrazione distribuito AKS.

Il portale di amministrazione in esecuzione in AKS
Figura 7 il portale di amministrazione in esecuzione in AKS

CI/CD automazione Pipeline per l'integrazione con servizi di contenitore di Azure

Azure Team Services è utilizzabile per implementare una pipeline di integrazione e della distribuzione continua per applicazioni abilitate per Docker in esecuzione in servizi di contenitore di Azure.

Azure Team Services supporta Team Foundation Server e basati su Git repository per controllo del codice e di versione. Per il codice che si trovano in un repository esterno, ad esempio GitHub, hook Web può essere configurato in servizi di Team di Azure che comportava l'attivazione di un processo di compilazione quando il codice è archiviato nel repository.

Nella pipeline di elementi di configurazione, utilizzando l'attività "Creazione di immagini Docker" sarebbe creare una nuova immagine Docker che contiene gli aggiornamenti dell'applicazione e push al Registro di sistema contenitore di Azure.

Nella pipeline di CD, utilizzando l'attività "Distribuire a Kubernetes" e in base a un file YAML, ovvero l'immagine contenitore aggiornato è stato inserito in un cluster il servizio contenitore di Azure che esegue Kubernetes.

Quando si usa l'App Web di Azure per i contenitori, il portale di Azure consente di configurare la pipeline CI/CD dal pannello delle impostazioni dell'App Web. Questo handle configurazione la generazione di una nuova immagine di Docker dell'applicazione quando il codice è archiviato e il processo di compilazione attivata, lasciando che l'applicazione Web aggiornata essere distribuiti e testati nello slot di gestione temporanea prima di tutto, prima di inserire l'immagine per il slot di produzione.

Se si abilita SSL nelle applicazioni Web

In questo momento, con AKS, le applicazioni Web distribuite utilizzando sono disponibili solo un endpoint HTTP. Per abilitare gli endpoint per HTTPS, invece, una delle opzioni disponibili consiste nel distribuire Gateway applicazione Azure, che espongono un URL HTTPS, eseguire la terminazione SSL e indirizzare le richieste per i portali di amministrazione e customer.

Gateway applicazione Azure Usa un probe personalizzato per monitorare periodicamente l'integrità delle applicazioni Web nel pool di back-end. Affinché il probe di integrità accedere a una pagina nell'applicazione Web per verificare la presenza di integrità delle applicazioni, entrambe le applicazioni del portale sono state apportate modifiche non essenziali disabilitando l'autenticazione nel /home page, che non contengono informazioni aziendali critici. Questa pagina è stata quindi configurata nella definizione di tipo probe personalizzato nel Gateway di applicazione da utilizzare per il controllo di integrità.

In alternativa, il Controller in ingresso Nginx per Kubernetes supporta terminazione TLS e può essere usato per SSL Abilita l'accesso alle applicazioni Web.

La distribuzione della soluzione nella sottoscrizione

Se si desidera provare questa soluzione autonomamente, è possibile scaricare i file di origine e gli script dal repository in GitHub bit.ly/2DRvwdh. È necessario il seguente software per implementare questa soluzione:

  • Visual Studio 2017 Preview, Community o edizione Enterprise con Update 3
  • Una sottoscrizione di Azure
  • Un editor di script di Windows PowerShell
  • CLI di Azure (bit.ly/2w3J00u)
  • Edizione Community docker per Windows (dockr.ly/2mnfX7M)
  • Visual Studio Tools per Docker (bit.ly/2F6YBRb)
  • Lo strumento di comando Kubectl per Windows (bit.ly/2swZVLJ)

Il repository GitHub contiene i file di origine per i portali di amministrazione e customer usati nella soluzione. Per questo articolo, l'unica soluzione contenente i progetti ASP.NET MVC 2.0 dei componenti di base per i servizi Web delle applicazioni sono stati suddivisi in due progetti della soluzione singoli in modo che potrebbe essere incluso nel pacchetto distribuiti ai contenitori separatamente. Tuttavia, questi file di soluzione individuale non sono stati aggiunti al repository GitHub.

Sono state apportate modifiche al codice secondario in entrambi i progetti in base alle proprie questo articolo. Nell'articolo precedente, si usa i file con estensione pfx nell'archivio certificati nel computer locale, il client incorpora nelle proprie richieste per l'autenticazione con il servizio insieme di credenziali delle chiavi di Azure. In questo problema, per semplicità, il segreto client è utilizzato invece insieme l'ID dell'applicazione, per l'autenticazione dell'applicazione Web con insieme credenziali chiavi Azure. L'approccio consigliato consiste nell'utilizzare i certificati nella richiesta per l'autenticazione.

Per distribuire i file della due soluzione alla sottoscrizione di Azure, consultare la documentazione di riferimento fornito in questo articolo e frammenti di codice.

Conclusioni

Insieme di credenziali chiave di Azure è un meccanismo efficiente che consente alle aziende di gestire in modo sicuro alle informazioni aziendali riservate tramite tecniche e gli algoritmi standard del settore per eseguire le operazioni di crittografia. Azure offre gli SDK per utilizzare questo servizio su una vasta gamma di piattaforme nel linguaggio di propria scelta. Senza la necessità di apportare eventuali modifiche significative al codice all'applicazione, è possibile scegliere di distribuire le soluzioni come applicazioni Web in servizi di App di Azure o inserirle in un pacchetto come abilitato per Docker alle applicazioni di servizi di contenitore di Azure o le app Web di Azure per Contenitori. Visual Studio 2017, gli strumenti di Docker fornisce un'implementazione turnkey per Docker-attiva un'applicazione Web, nascondere tutti la complessità e consentendo di concentrarsi sulla compilazione di funzionalità di business. Servizio di contenitore di Azure consente di accedere a best-in-class open source supporto con Kubernetes per l'orchestrazione di contenitore per gli strumenti. Questa funzionalità, unita con l'integrata supporto per l'integrazione continua e distribuzione con i servizi del Team di Azure, per gli strumenti assicura le organizzazioni che gli strumenti appropriati per la distribuzione del software agile in tutte le fasi di un ciclo di vita del progetto.


Srikantan Sankaranè un'entità technical evangelist dal team di un Partner commerciale India, in base all'esterno di Bangalore. Egli funziona con numerosi fornitori di software indipendenti India e consente di progettare e distribuire le relative soluzioni in Microsoft Azure. È possibile contattarlo in sansri@microsoft.com.

Grazie per il seguente esperto tecnico di Microsoft per la revisione dell'articolo: Anil Dwarakanath
Anil Dwarakanath è architetti di soluzioni cloud Microsoft e si basa fuori India.


Viene illustrato in questo articolo nel forum di MSDN Magazine