Предоставление приложений с помощью сквозного протокола TLS в виртуальной сети
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.
Эта статья относится к: ✔️ Basic/Standard ✔️ Enterprise
В этой статье описано, как предоставить доступ к приложениям по Интернету с помощью Шлюза приложений. При развертывании экземпляра службы Azure Spring Apps в виртуальной сети приложения в экземпляре службы доступны только в частной сети. Чтобы сделать приложения доступными в Интернете, необходимо интегрировать их со Шлюзом приложений Azure.
Необходимые компоненты
- Azure CLI версии 2.0.4 или более поздней.
- Экземпляр службы Azure Spring Apps, развернутый в виртуальной сети с приложением, доступным через частную сеть с использованием суффикса домена по умолчанию
.private.azuremicroservices.io
. Дополнительные сведения см. в статье Развертывание Azure Spring Apps в виртуальной сети. - Личный домен, который будет использоваться для доступа к приложению.
- Сертификат, хранящийся в Key Vault, который соответствует личному домену, который будет использоваться для установки прослушивателя HTTPS. Дополнительные сведения см. в статье Руководство по импорту сертификата в Azure Key Vault.
Настройка Шлюза приложений для Azure Spring Apps
Рекомендуем, чтобы доменное имя, отображаемое в браузере, совпадало с именем узла, которое Шлюз приложений использует для направления трафика в серверную часть Azure Spring Apps. Эта рекомендация обеспечивает оптимальный процесс использования Шлюза приложений для предоставления приложений, размещенных в Azure Spring Apps и находящихся в виртуальной сети. Если домен, предоставляемый Шлюзом приложений, отличается от домена, принятого Azure Spring Apps, файлы cookie и созданные URL-адреса перенаправления (например) могут быть нарушены. Дополнительные сведения см. в разделе "Сохранение имени узла".
Чтобы настроить Шлюз приложений перед Azure Spring Apps, выполните описанные ниже действия.
- Следуйте инструкциям из статьи Развертывание Azure Spring Apps в виртуальной сети.
- Следуйте инструкциям из статьи Доступ к приложению в частной сети.
- Получите сертификат для выбранного домена и сохраните его в Key Vault. Дополнительные сведения см. в статье Руководство по импорту сертификата в Azure Key Vault.
- Настройте личный домен и соответствующий сертификат из Key Vault в приложении, развернутом в Azure Spring Apps. Дополнительные сведения см. в руководстве Сопоставление существующего личного домена с Azure Spring Apps.
- Развертывание Шлюз приложений в виртуальной сети, настроенной в соответствии со следующим списком:
- Примените Azure Spring Apps в серверном пуле, на который ссылается домен с суффиксом
private.azuremicroservices.io
. - Добавьте прослушиватель HTTPS, используя тот же сертификат из Key Vault.
- Настройте виртуальную сеть с параметрами HTTP, которые используют имя личного домена, настроенное в Azure Spring Apps, вместо домена с суффиксом
private.azuremicroservices.io
.
- Примените Azure Spring Apps в серверном пуле, на который ссылается домен с суффиксом
- Настройте общедоступный DNS, чтобы он указывал на Шлюз приложений.
Определение переменных
Далее используйте приведенные ниже команды, чтобы определить переменные для группы ресурсов и виртуальной сети, которые вы создали в соответствии с инструкциями по развертыванию Azure Spring Apps в виртуальной сети Azure. Настройте значения в зависимости от вашей среды. Задав SPRING_APP_PRIVATE_FQDN
, удалите https://
из 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'
Вход в Azure
Войдите в Azure CLI и выберите активную подписку, выполнив следующую команду:
az login
az account set --subscription $SUBSCRIPTION
Получение сертификата
Для рабочих развертываний вы, скорее всего, будете использовать сертификат открытого ключа. В этом случае импортируйте сертификат в Azure Key Vault. Дополнительные сведения см. в статье Руководство по импорту сертификата в Azure Key Vault. Убедитесь, что сертификат содержит всю цепочку сертификатов.
Настройка общедоступного доменного имени в Azure Spring Apps
Трафик будет входить в приложение, развернутое в Azure Spring Apps, с помощью общедоступного доменного имени. Чтобы приложение прослушивало это имя узла и делало это по протоколу HTTPS, используйте следующие команды, чтобы добавить личный домен в приложение:
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
Создание сетевых ресурсов
Создаваемый Шлюз приложений Azure будет присоединяться к той же виртуальной сети (или пиринговой виртуальной сети), что и экземпляр службы Azure Spring Apps. Сначала создайте новую подсеть для Шлюза приложений в виртуальной сети с помощью az network vnet subnet create
, а также создайте общедоступный IP-адрес в качестве внешнего интерфейса Шлюза приложений с помощью командлета 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
Создание управляемого удостоверения для Шлюз приложений
Шлюзу приложений необходим доступ к Key Vault для чтения сертификата. Для этого будет использоваться управляемое удостоверение, назначаемое пользователем. Создайте управляемое удостоверение с помощью следующей команды:
export APPGW_IDENTITY_NAME='name-for-appgw-managed-identity'
az identity create \
--resource-group $RESOURCE_GROUP \
--name $APPGW_IDENTITY_NAME
Затем получите идентификатор объекта для управляемого удостоверения, так как он будет использоваться позже, чтобы предоставить права доступа к сертификату в 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)
Настройка политики в Key Vault
Настройте Key Vault с помощью следующей команды, чтобы управляемое удостоверение для Шлюз приложений разрешено получить доступ к сертификату, хранящейся в 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
Создание шлюза приложений
Создайте шлюз приложений, используя az network application-gateway create
, и укажите частное полное доменное имя (FQDN) приложения в качестве серверов в серверном пуле. Обязательно используйте управляемое удостоверение, назначаемое пользователем, и укажите сертификат в Key Vault с помощью идентификатора секрета сертификата. Затем с помощью командлета az network application-gateway http-settings update
обновите параметр HTTP, чтобы использовать общедоступное имя узла.
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
Чтобы создать шлюз приложения в Azure, может понадобиться до 30 минут.
Изменение параметров HTTP для использования доменного имени для серверной части
Измените параметры HTTP, чтобы использовать общедоступное доменное имя в качестве имени узла вместо суффикса домена с расширением ".private.azuremicroservices.io" для отправки трафика в 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
Проверка развертывания Шлюза приложений
После создания серверной части проверьте ее работоспособность с помощью приведенной ниже команды. Выходные данные этой команды позволяют определить, достигает ли шлюз приложений вашего приложения через частное полное доменное имя.
az network application-gateway show-backend-health \
--name $APPGW_NAME \
--resource-group $RESOURCE_GROUP
Выходные данные указывают на состояние работоспособности внутреннего пула, как показано в следующем примере:
{
"backendAddressPools": [
{
"backendHttpSettingsCollection": [
{
"servers": [
{
"address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
"health": "Healthy",
"healthProbeLog": "Success. Received 200 status code",
"ipConfiguration": null
}
]
}
]
}
]
}
Настройка DNS и доступ к приложению
Теперь настройте общедоступную службу доменных имен (DNS), чтобы она указывала на Шлюз приложений, используя запись CNAME или A. Общедоступный адрес для Шлюза приложений можно найти с помощью следующей команды:
az network public-ip show \
--resource-group $RESOURCE_GROUP \
--name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--query [ipAddress] \
--output tsv
Теперь вы можете получить доступ к приложению с помощью общедоступного доменного имени.