Udostępnianie aplikacji za pomocą kompleksowego protokołu TLS w sieci wirtualnej
Uwaga
Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.
Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.
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
- Interfejs wiersza polecenia platformy Azure w wersji 2.0.4 lub nowszej.
- Wystąpienie usługi Azure Spring Apps wdrożone w sieci wirtualnej z aplikacją dostępną za pośrednictwem sieci prywatnej przy użyciu domyślnego
.private.azuremicroservices.io
sufiksu domeny. Aby uzyskać więcej informacji, zobacz Wdrażanie usługi Azure Spring Apps w sieci wirtualnej - Domena niestandardowa, która ma być używana do uzyskiwania dostępu do aplikacji.
- Certyfikat przechowywany w usłudze Key Vault, który pasuje do domeny niestandardowej, która ma być używana do ustanowienia odbiornika HTTPS. Aby uzyskać więcej informacji, zobacz Samouczek: importowanie certyfikatu w usłudze Azure Key Vault.
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.
- 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).
- Postępuj zgodnie z instrukcjami w artykule Uzyskiwanie dostępu do aplikacji w sieci prywatnej.
- 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.
- 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.
- 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
.
- Użyj usługi Azure Spring Apps w puli zaplecza, do których odwołuje się domena z sufiksem
- 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_FQDN
elementu 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.
Zaktualizuj ustawienia PROTOKOŁU HTTP, aby używać nazwy domeny w kierunku 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.