Share via


Esporre le applicazioni a Internet con terminazione TLS in gateway applicazione

Nota

Azure Spring Apps è il nuovo nome del servizio Azure Spring Cloud. Anche se il servizio ha un nuovo nome, il nome precedente verrà visualizzato in alcune posizioni per un po' mentre si lavora per aggiornare gli asset, ad esempio screenshot, video e diagrammi.

Questo articolo illustra come esporre le applicazioni a Internet tramite gateway applicazione.

Quando un'istanza del servizio Azure Spring Apps viene distribuita nella rete virtuale (VNET), le applicazioni nell'istanza del servizio sono accessibili solo nella rete privata. Per rendere accessibili le applicazioni su Internet, è necessario integrarsi con app Azure lication Gateway. Il traffico crittografato in ingresso può essere decrittografato nel gateway applicazione oppure può essere passato ad Azure Spring Apps crittografato per ottenere TLS/SSL end-to-end. A scopo di sviluppo e test, è possibile iniziare con la terminazione SSL nel gateway applicazione, descritta in questa guida. Per la produzione, è consigliabile usare TLS/SSL end-to-end con certificato privato, come descritto in Esporre applicazioni con TLS end-to-end in una rete virtuale.

Prerequisiti

Configurare gateway applicazione per Le app Azure Spring

È consigliabile che il nome di dominio, come illustrato dal browser, corrisponda al nome host usato gateway applicazione per indirizzare il traffico al back-end di Azure Spring Apps. Questa raccomandazione offre la migliore esperienza quando si usa gateway applicazione per esporre le applicazioni ospitate in App Spring di Azure e che risiedono in una rete virtuale. Se il dominio esposto da gateway applicazione è diverso dal dominio accettato da Azure Spring Apps, i cookie e gli URL di reindirizzamento generati (ad esempio) possono essere interrotti. Per altre informazioni, vedere Conservazione dei nomi host.

Per configurare gateway applicazione davanti ad Azure Spring Apps in una rete virtuale privata, seguire questa procedura.

  1. Seguire le istruzioni in Distribuire App Azure Spring in una rete virtuale.
  2. Seguire le istruzioni in Accedere all'applicazione in una rete privata.
  3. Acquisire un certificato per il dominio preferito e archiviare tale certificato in Key Vault. Per altre informazioni, vedere Esercitazione: Importare un certificato in Azure Key Vault.
  4. Configurare un dominio personalizzato e il certificato corrispondente da Key Vault in un'app distribuita in Azure Spring Apps. Per altre informazioni, vedere Esercitazione: Eseguire il mapping di un dominio personalizzato esistente ad Azure Spring Apps.
  5. Distribuire gateway applicazione in una rete virtuale configurata in base all'elenco seguente:
    • Usare Azure Spring Apps nel pool back-end, a cui fa riferimento il suffisso del dominio con private.azuremicroservices.io.
    • Includere un listener HTTPS usando lo stesso certificato di Key Vault.
    • Configurare la rete virtuale con le impostazioni HTTP che usano il nome di dominio personalizzato configurato in Azure Spring Apps anziché il suffisso di dominio con private.azuremicroservices.io.
  6. Configurare il DNS pubblico in modo che punti al gateway applicazione.

Definire le variabili

Usare quindi i comandi seguenti per definire le variabili per il gruppo di risorse e la rete virtuale creati come indicato in Distribuire Azure Spring Apps in una rete virtuale. Sostituire i <segnaposto ...> con valori reali in base all'ambiente effettivo. Quando si definisce SPRING_APP_PRIVATE_FQDN, rimuovere https:// dall'URI.

export SUBSCRIPTION='<subscription-id>'
export RESOURCE_GROUP='<resource-group-name>'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='<name-of-Azure-Spring-Apps-instance>'
export APPNAME='<name-of-app-in-Azure-Spring-Apps>'
export SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
export VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
export APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
export APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'

Accedere ad Azure

Usare il comando seguente per accedere all'interfaccia della riga di comando di Azure e scegliere la sottoscrizione attiva.

az login
az account set --subscription $SUBSCRIPTION

Configurare il nome di dominio pubblico in Azure Spring Apps

Il traffico immetterà l'applicazione distribuita in Azure Spring Apps usando il nome di dominio pubblico. Per configurare l'applicazione per l'ascolto di questo nome host su HTTP, usare i comandi seguenti per aggiungere un dominio personalizzato all'app, sostituendo i <segnaposto ...> con valori reali:

export KV_NAME='<name-of-key-vault>'
export KV_RG='<resource-group-name-of-key-vault>'
export CERT_NAME_IN_KV='<name-of-certificate-with-intermediaries-in-key-vault>'
export DOMAIN_NAME=myapp.mydomain.com

az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --app $APPNAME

Creare risorse di rete

Il gateway applicazione da creare verrà aggiunto alla stessa rete virtuale dell'istanza del servizio Azure Spring Apps. Creare prima di tutto una nuova subnet per il gateway applicazione nella rete virtuale, quindi creare un indirizzo IP pubblico come front-end del gateway applicazione, come illustrato nell'esempio seguente.

export APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
az network vnet subnet create \
    --name $APPLICATION_GATEWAY_SUBNET_NAME \
    --resource-group $RESOURCE_GROUP \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
az network public-ip create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --allocation-method Static \
    --sku Standard

Creare un'identità gestita per il gateway applicazione

Il gateway applicazione dovrà essere in grado di accedere a Key Vault per leggere il certificato. A tale scopo, il gateway applicazione userà un'identità gestita assegnata dall'utente. Per altre informazioni, vedere Che cosa sono le identità gestite per le risorse di Azure? Creare l'identità gestita usando il comando seguente, sostituendo il segnaposto ...> :<

export APPGW_IDENTITY_NAME='<name-for-appgw-managed-identity>'
az identity create \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME

Usare quindi il comando seguente per recuperare per objectId l'identità gestita. Questo valore verrà usato in un secondo momento per concedere i diritti di accesso al certificato in Key Vault.

export APPGW_IDENTITY_CLIENTID=$(az identity show \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME \
    --query clientId \
    --output tsv)
export APPGW_IDENTITY_OID=$(az ad sp show \
    --id $APPGW_IDENTITY_CLIENTID \
    --query objectId \
    --output tsv)

Impostare i criteri in Key Vault

Configurare Key Vault usando il comando seguente in modo che l'identità gestita per il gateway applicazione sia autorizzata ad accedere al certificato archiviato in Key Vault:

az keyvault set-policy \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --object-id $APPGW_IDENTITY_OID \
    --secret-permissions get list \
    --certificate-permissions get list

Creare un gateway applicazione

Creare un gateway applicazione usando az network application-gateway create e specificare il nome di dominio completo (FQDN) privato dell'applicazione come server nel pool back-end. Assicurarsi di usare l'identità gestita assegnata dall'utente e puntare al certificato in Key Vault usando l'ID segreto del certificato.

export APPGW_NAME='<name-for-application-gateway>'
export CERT_NAME_IN_KV='<name-of-certificate-in-key-vault>'
export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KV \
    --vault-name $KV_NAME \
    --query sid \
    --output tsv)

az network application-gateway create \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --capacity 2 \
    --sku Standard_v2 \
    --frontend-port 443 \
    --http-settings-cookie-based-affinity Disabled \
    --http-settings-port 80 \
    --http-settings-protocol Http \
    --public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --subnet $APPLICATION_GATEWAY_SUBNET_NAME \
    --servers $SPRING_APP_PRIVATE_FQDN \
    --key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
    --identity $APPGW_IDENTITY_NAME

Il processo di creazione del gateway applicazione in Azure può richiedere fino a 30 minuti.

Aggiornare le impostazioni HTTP per usare il nome di dominio verso il back-end

Aggiornare le impostazioni HTTP per usare il nome di dominio pubblico come nome host anziché il suffisso di dominio con .private.azuremicroservices.io cui inviare il traffico ad Azure Spring Apps.

az network application-gateway http-settings update \
    --resource-group $RESOURCE_GROUP \
    --gateway-name $APPGW_NAME \
    --host-name-from-backend-pool false \
    --host-name $DOMAIN_NAME \
    --name appGatewayBackendHttpSettings

Controllare la distribuzione del gateway applicazione

Dopo la creazione, controllare l'integrità del back-end usando il comando seguente. L'output di questo comando consente di determinare se il gateway applicazione raggiunge l'applicazione tramite il nome di dominio completo (FQDN) privato.

az network application-gateway show-backend-health \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP

L'output indica lo stato integro del pool back-end, come illustrato nell'esempio seguente:

{
  "backendAddressPools": [
    {
      "backendHttpSettingsCollection": [
        {
          "servers": [
            {
              "address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
              "health": "Healthy",
              "healthProbeLog": "Success. Received 200 status code",
              "ipConfiguration": null
            }
          ]
        }
      ]
    }
  ]
}

Configurare DNS e accedere all'applicazione

Configurare il DNS pubblico in modo che punti al gateway applicazione usando un record CNAME o A. È possibile trovare l'indirizzo pubblico per il gateway applicazione usando il comando seguente:

az network public-ip show \
    --resource-group $RESOURCE_GROUP \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --query [ipAddress] \
    --output tsv

È ora possibile accedere all'applicazione usando il nome di dominio pubblico.

Pulire le risorse

Se si prevede di continuare a usare gli articoli successivi, è possibile lasciare queste risorse. Quando non è più necessario, eliminare il gruppo di risorse per eliminare tutte le risorse contenute al suo interno. Per eliminare il gruppo di risorse usando l'interfaccia della riga di comando di Azure, usare il comando seguente:

az group delete --name $RESOURCE_GROUP

Passaggi successivi