Udostępnianie aplikacji za pomocą kompleksowego protokołu TLS w sieci wirtualnej

Uwaga

Azure Spring Apps to nowa nazwa usługi Azure Spring Cloud. Mimo że usługa ma nową nazwę, stara nazwa będzie widoczna w niektórych miejscach przez pewien czas, ponieważ pracujemy nad aktualizowaniem zasobów, takich jak zrzuty ekranu, filmy wideo i diagramy.

Ten artykuł dotyczy: ✔️ Podstawowa/Standardowa ✔️ Enterprise

W tym artykule wyjaśniono, jak uwidaczniać aplikacje w Internecie przy użyciu usługi Application Gateway. Po wdrożeniu wystąpienia usługi Azure Spring Apps w sieci wirtualnej aplikacje w wystąpieniu usługi są dostępne tylko w sieci prywatnej. Aby aplikacje były dostępne w Internecie, należy zintegrować je z usługą aplikacja systemu Azure Gateway.

Wymagania wstępne

Konfigurowanie usługi Application Gateway dla usługi Azure Spring Apps

Zalecamy, aby nazwa domeny, jak widać w przeglądarce, jest taka sama jak nazwa hosta używana przez usługę Application Gateway do kierowania ruchu do zaplecza usługi Azure Spring Apps. To zalecenie zapewnia najlepsze środowisko korzystania z usługi Application Gateway w celu uwidaczniania aplikacji hostowanych w usłudze Azure Spring Apps i znajdujących się w sieci wirtualnej. Jeśli domena uwidoczniona przez usługę Application Gateway różni się od domeny zaakceptowanej przez usługę Azure Spring Apps, pliki cookie i wygenerowane adresy URL przekierowania (na przykład) mogą być uszkodzone. Aby uzyskać więcej informacji, zobacz Zachowywanie nazwy hosta.

Aby skonfigurować usługę Application Gateway przed usługą Azure Spring Apps, wykonaj następujące kroki.

  1. Postępuj zgodnie z instrukcjami w artykule Deploy Azure Spring Apps in a virtual network (Wdrażanie usługi Azure Spring Apps w sieci wirtualnej).
  2. Postępuj zgodnie z instrukcjami w artykule Uzyskiwanie dostępu do aplikacji w sieci prywatnej.
  3. Uzyskaj certyfikat dla wybranej domeny i zapisz go w usłudze Key Vault. Aby uzyskać więcej informacji, zobacz Samouczek: importowanie certyfikatu w usłudze Azure Key Vault.
  4. Skonfiguruj domenę niestandardową i odpowiedni certyfikat z usługi Key Vault w aplikacji wdrożonej w usłudze Azure Spring Apps. Aby uzyskać więcej informacji, zobacz Samouczek: mapowania istniejącej domeny niestandardowej na usługę Azure Spring Apps.
  5. Wdróż usługę Application Gateway w sieci wirtualnej skonfigurowanej zgodnie z następującą listą:
    • Użyj usługi Azure Spring Apps w puli zaplecza, do których odwołuje się domena z sufiksem private.azuremicroservices.io.
    • Dołącz odbiornik HTTPS przy użyciu tego samego certyfikatu z usługi Key Vault.
    • Skonfiguruj sieć wirtualną przy użyciu ustawień PROTOKOŁU HTTP, które używają niestandardowej nazwy domeny skonfigurowanej w usłudze Azure Spring Apps zamiast sufiksu domeny z private.azuremicroservices.io.
  6. Skonfiguruj publiczny system DNS, aby wskazywał usługę Application Gateway.

Definiowanie zmiennych

Następnie użyj następujących poleceń, aby zdefiniować zmienne dla grupy zasobów i sieci wirtualnej utworzonej zgodnie z instrukcjami w temacie Wdrażanie usługi Azure Spring Apps w sieci wirtualnej. Dostosuj wartości na podstawie rzeczywistego środowiska. Po zdefiniowaniu SPRING_APP_PRIVATE_FQDNelementu usuń https:// element z identyfikatora URI.

export SUBSCRIPTION='subscription-id'
export RESOURCE_GROUP='my-resource-group'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='name-of-spring-cloud-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'

Logowanie się do platformy Azure

Użyj następującego polecenia, aby zalogować się do interfejsu wiersza polecenia platformy Azure i wybrać aktywną subskrypcję.

az login
az account set --subscription $SUBSCRIPTION

Uzyskiwanie certyfikatu

W przypadku wdrożeń produkcyjnych najprawdopodobniej użyjesz publicznie podpisanego certyfikatu. W takim przypadku zaimportuj certyfikat w usłudze Azure Key Vault. Aby uzyskać więcej informacji, zobacz Samouczek: importowanie certyfikatu w usłudze Azure Key Vault. Upewnij się, że certyfikat zawiera cały łańcuch certyfikatów.

Konfigurowanie nazwy domeny publicznej w usłudze Azure Spring Apps

Ruch spowoduje wprowadzenie aplikacji wdrożonej w usłudze Azure Spring Apps przy użyciu nazwy domeny publicznej. Aby skonfigurować aplikację do nasłuchiwania tej nazwy hosta i zrobić to za pośrednictwem protokołu HTTPS, użyj następujących poleceń, aby dodać domenę niestandardową do aplikacji:

export KV_NAME='name-of-key-vault'
export KV_RG='resource-group-name-of-key-vault'
export CERT_NAME_IN_AZURE_SPRING_APPS='name-of-certificate-in-Azure-Spring-Apps'
export CERT_NAME_IN_KEY_VAULT='name-of-certificate-with-intermediaries-in-key-vault'
export DOMAIN_NAME=myapp.mydomain.com

# provide permissions to Azure Spring Apps to read the certificate from Key Vault:
export VAULTURI=$(az keyvault show \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --query properties.vaultUri \
    --output tsv)

# get the object id for the Azure Spring Apps Domain-Management Service Principal:
export ASADM_OID=$(az ad sp show \
    --id 03b39d0f-4213-4864-a245-b1476ec03169 \
    --query objectId \
    --output tsv)

# allow this Service Principal to read and list certificates and secrets from Key Vault:
az keyvault set-policy \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --object-id $ASADM_OID \
    --certificate-permissions get list \
    --secret-permissions get list

# add custom domain name and configure TLS using the certificate:
az spring certificate add \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --name $CERT_NAME_IN_AZURE_SPRING_APPS \
    --vault-certificate-name $CERT_NAME_IN_KEY_VAULT \
    --vault-uri $VAULTURI
az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --certificate $CERT_NAME_IN_AZURE_SPRING_APPS \
    --app $APPNAME

Tworzenie zasobów sieciowych

Brama aplikacja systemu Azure, która ma zostać utworzona, dołączy tę samą sieć wirtualną co sieć wirtualna lub równorzędna do wystąpienia usługi Azure Spring Apps. Najpierw utwórz nową podsieć dla usługi Application Gateway w sieci wirtualnej przy użyciu polecenia az network vnet subnet create, a także utwórz publiczny adres IP jako fronton usługi Application Gateway przy użyciu polecenia az network public-ip create.

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

Tworzenie tożsamości zarządzanej dla usługi Application Gateway

Usługa Application Gateway będzie musiała mieć dostęp do usługi Key Vault, aby odczytać certyfikat. W tym celu zostanie użyta tożsamość zarządzana przypisana przez użytkownika. Utwórz tożsamość zarządzaną przy użyciu następującego polecenia:

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

Następnie pobierz identyfikator objectId tożsamości zarządzanej, ponieważ będzie on używany później w celu udzielenia praw dostępu do certyfikatu w usłudze 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)

Ustawianie zasad w usłudze Key Vault

Skonfiguruj usługę Key Vault przy użyciu następującego polecenia, aby tożsamość zarządzana usługi Application Gateway mogła uzyskać dostęp do certyfikatu przechowywanego w usłudze Key Vault:

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

Tworzenie usługi Application Gateway

Utwórz bramę aplikacji przy użyciu i az network application-gateway create określ prywatną w pełni kwalifikowaną nazwę domeny (FQDN) aplikacji jako serwery w puli zaplecza. Upewnij się, że używasz tożsamości zarządzanej przypisanej przez użytkownika i wskaż certyfikat w usłudze Key Vault przy użyciu identyfikatora wpisu tajnego certyfikatu. Następnie zaktualizuj ustawienie HTTP przy użyciu polecenia az network application-gateway http-settings update , aby użyć nazwy hosta publicznego.

export APPGW_NAME='name-for-application-gateway'

export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KEY_VAULT \
    --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 443 \
    --http-settings-protocol Https \
    --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

Tworzenie bramy aplikacji na platformie Azure może potrwać do 30 minut.

Aktualizowanie Ustawienia HTTP w celu używania nazwy domeny do zaplecza

Zaktualizuj ustawienia HTTP, aby używać nazwy domeny publicznej jako nazwy hosta zamiast sufiksu domeny z sufiksem ".private.azuremicroservices.io", aby wysyłać ruch do usługi Azure Spring Apps za pomocą polecenia .

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

Sprawdzanie wdrożenia usługi Application Gateway

Po utworzeniu sprawdź kondycję zaplecza, używając następującego polecenia. Dane wyjściowe tego polecenia umożliwiają określenie, czy brama aplikacji dociera do aplikacji za pośrednictwem jej prywatnej nazwy FQDN.

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

Dane wyjściowe wskazują stan dobrej kondycji puli zaplecza, jak pokazano w poniższym przykładzie:

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

Konfigurowanie systemu DNS i uzyskiwanie dostępu do aplikacji

Teraz skonfiguruj publiczny system DNS, aby wskazywał usługę Application Gateway przy użyciu rekordu CNAME lub A. Publiczny adres usługi Application Gateway można znaleźć przy użyciu następującego polecenia:

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

Teraz możesz uzyskać dostęp do aplikacji przy użyciu nazwy domeny publicznej.

Następne kroki