Управление исходящим трафиком для экземпляра Azure Spring Apps
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.
Эта статья применима к: ✔️ Java ✔️ C#
Эта статья относится к: ✔️ Basic/Standard ✔️ Enterprise
В этой статье описывается, как защитить исходящий трафик от приложений, размещенных в Azure Spring Apps. В статье приведен пример определяемого пользователем маршрута. Определяемый пользователем маршрут — это расширенная функция, которая позволяет полностью контролировать исходящий трафик. Вы можете использовать определяемый пользователем маршрут в таких сценариях, как запрет автоматического создания общедоступного IP-адреса Azure Spring Apps.
Необходимые компоненты
- Все необходимые условия для развертывания Azure Spring Apps в виртуальной сети
- Версия API или более поздней версии
2022-09-01 preview
- Azure CLI версии 1.1.7 или более поздней версии
- Знакомство со сведениями в следующих статьях:
Создание виртуальной сети с помощью определяемого пользователем маршрута
На следующем рисунке показан пример виртуальной сети Azure Spring Apps, которая использует определяемый пользователем маршрут (UDR).
На этой схеме показаны следующие функции архитектуры:
- Общедоступный трафик входящего трафика должен проходить через фильтры брандмауэра.
- Каждый экземпляр Azure Spring Apps изолирован в выделенной подсети.
- Клиенты имеют и управляют брандмауэром.
- Эта структура гарантирует, что брандмауэр включает здоровую среду для всех необходимых функций.
- Azure Spring Apps не создает ресурсы общедоступного IP-адреса автоматически.
Определение переменных среды
В следующем примере показано, как определить набор переменных среды для использования в создании ресурсов:
export PREFIX="asa-egress"
export RG="${PREFIX}-rg"
export LOC="eastus"
export ASANAME="${PREFIX}"
export VNET_NAME="${PREFIX}-vnet"
export ASA_APP_SUBNET_NAME="asa-app-subnet"
export ASA_SERVICE_RUNTIME_SUBNET_NAME="asa-service-runtime-subnet"
# Do not change FWSUBNET_NAME. This is currently a requirement for Azure Firewall.
export FWSUBNET_NAME="AzureFirewallSubnet"
export FWNAME="${PREFIX}-fw"
export FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
export FWIPCONFIG_NAME="${PREFIX}-fwconfig"
export APP_ROUTE_TABLE_NAME="${PREFIX}-app-rt"
export SERVICE_RUNTIME_ROUTE_TABLE_NAME="${PREFIX}-service-runtime-rt"
export FWROUTE_NAME="${PREFIX}-fwrn"
export ASA_NAME="${PREFIX}-instance"
Создание виртуальной сети с несколькими подсетями
В этом разделе показано, как подготовить виртуальную сеть с тремя отдельными подсетями: один для пользовательских приложений, один для среды выполнения службы и один для брандмауэра.
Сначала создайте группу ресурсов, как показано в следующем примере:
# Create a resource group.
az group create --name $RG --location $LOC
Затем создайте виртуальную сеть с тремя подсетями для размещения экземпляров Azure Spring Apps и Брандмауэр Azure, как показано в следующем примере:
# Dedicated virtual network with an Azure Spring Apps app subnet.
az network vnet create \
--resource-group $RG \
--name $VNET_NAME \
--location $LOC \
--address-prefixes 10.42.0.0/16 \
--subnet-name $ASA_APP_SUBNET_NAME \
--subnet-prefix 10.42.1.0/24
# Dedicated subnet for the Azure Spring Apps service runtime subnet.
az network vnet subnet create \
--resource-group $RG \
--vnet-name $VNET_NAME \
--name $ASA_SERVICE_RUNTIME_SUBNET_NAME\
--address-prefix 10.42.2.0/24
# Dedicated subnet for Azure Firewall. (Firewall name can't be changed.)
az network vnet subnet create \
--resource-group $RG \
--vnet-name $VNET_NAME \
--name $FWSUBNET_NAME \
--address-prefix 10.42.3.0/24
Настройка экземпляра Брандмауэр Azure с определяемым пользователем маршрутом
Используйте следующую команду, чтобы создать и настроить экземпляр Брандмауэр Azure с определяемым пользователем маршрутом и настроить правила исходящего трафика Брандмауэр Azure. Брандмауэр позволяет настроить детализированные правила трафика исходящего трафика из Azure Spring Apps.
Внимание
Если кластер или приложение создает большое количество исходящих подключений, направленных в то же место или в небольшое подмножество назначений, может потребоваться больше IP-адресов брандмауэра, чтобы избежать достижения максимального количества портов на внешний IP-адрес. Дополнительные сведения о создании экземпляра Брандмауэр Azure с несколькими IP-адресами см. в кратком руководстве. Создание экземпляра Брандмауэр Azure с несколькими общедоступными IP-адресами — шаблон ARM. Создайте общедоступный IP-ресурс SKU уровня "Стандартный" для использования в качестве Брандмауэр Azure внешнего адреса.
az network public-ip create \
--resource-group $RG \
--name $FWPUBLICIP_NAME -l $LOC \
--sku "Standard"
В следующем примере показано, как установить расширение CLI для предварительной версии Брандмауэр Azure и развернуть Брандмауэр Azure:
# Install the Azure Firewall preview CLI extension.
az extension add --name azure-firewall
# Deploy Azure Firewall.
az network firewall create \
--resource-group $RG \
--name $FWNAME -l $LOC \
--enable-dns-proxy true
В следующем примере показано, как назначить IP-адрес, созданный интерфейсу брандмауэра.
Примечание.
Настройка общедоступного IP-адреса для экземпляра Брандмауэр Azure может занять несколько минут. Чтобы использовать полное доменное имя (FQDN) в правилах сети, включите DNS-прокси. После включения прокси-сервера брандмауэр прослушивает порт 53 и пересылает DNS-запросы на указанный DNS-сервер. Затем брандмауэр может автоматически перевести полное доменное имя.
# Configure the firewall IP address.
az network firewall ip-config create \
--resource-group $RG \
--firewall-name $FWNAME \
--name $FWIPCONFIG_NAME \
--public-ip-address $FWPUBLICIP_NAME \
--vnet-name $VNET_NAME
По завершении операции сохраните внешний IP-адрес брандмауэра для настройки позже, как показано в следующем примере:
# Capture the firewall IP address for later use.
export FWPUBLIC_IP=$(az network public-ip show \
--resource-group $RG \
--name $FWPUBLICIP_NAME \
--query "ipAddress" \
--output tsv)
export FWPRIVATE_IP=$(az network firewall show \
--resource-group $RG \
--name $FWNAME \
--query "ipConfigurations[0].privateIPAddress" \
--output tsv | tr -d '[:space:]')
Создание определяемого пользователем маршрута с прыжком для Брандмауэр Azure
Azure автоматически направляет трафик между подсетями Azure, виртуальными и локальными сетями. Если вы хотите изменить маршрутизацию по умолчанию в Azure, создайте таблицу маршрутов.
В следующем примере показано, как создать таблицу маршрутов, связанную с указанной подсетью. Таблица маршрутов определяет следующий прыжк, как в созданном экземпляре Брандмауэр Azure. Каждая подсеть может иметь одну таблицу маршрутов, связанную с ней или не связанную таблицу маршрутов.
# Create a user-defined route and add a route for Azure Firewall.
az network route-table create \
--resource-group $RG -l $LOC \
--name $APP_ROUTE_TABLE_NAME
az network route-table route create \
--resource-group $RG \
--name $FWROUTE_NAME \
--route-table-name $APP_ROUTE_TABLE_NAME \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address $FWPRIVATE_IP
az network route-table create \
--resource-group $RG -l $LOC \
--name $SERVICE_RUNTIME_ROUTE_TABLE_NAME
az network route-table route create \
--resource-group $RG \
--name $FWROUTE_NAME \
--route-table-name $SERVICE_RUNTIME_ROUTE_TABLE_NAME \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address $FWPRIVATE_IP
Добавление правил брандмауэра
В следующем примере показано, как добавить правила в брандмауэр. Дополнительные сведения см. в статье о обязанностях клиентов по запуску Azure Spring Apps в виртуальной сети.
# Add firewall network rules.
az network firewall network-rule create \
--resource-group $RG \
--firewall-name $FWNAME \
--collection-name 'asafwnr' \
--name 'springcloudtcp' \
--protocols 'TCP' \
--source-addresses '*' \
--destination-addresses "AzureCloud" \
--destination-ports 443 445 \
--action allow \
--priority 100
# Add firewall application rules.
az network firewall application-rule create \
--resource-group $RG \
--firewall-name $FWNAME \
--collection-name 'aksfwar'\
--name 'fqdn' \
--source-addresses '*' \
--protocols 'https=443' \
--fqdn-tags "AzureKubernetesService" \
--action allow \
--priority 100
Связывание таблиц маршрутов с подсетями
Чтобы связать кластер с брандмауэром, убедитесь, что выделенная подсеть для кластера ссылается на созданную таблицу маршрутов. Подсети среды выполнения приложений и служб должны быть связаны с соответствующими таблицами маршрутов. В следующем примере показано, как связать таблицу маршрутов с подсетью:
# Associate the route table with a next hop to the firewall for the Azure Spring Apps subnet.
az network vnet subnet update \
--resource-group $RG \
--vnet-name $VNET_NAME \
--name $ASA_APP_SUBNET_NAME \
--route-table $APP_ROUTE_TABLE_NAME
az network vnet subnet update
--resource-group $RG \
--vnet-name $VNET_NAME \
--name $ASA_SERVICE_RUNTIME_SUBNET_NAME \
--route-table $SERVICE_RUNTIME_ROUTE_TABLE_NAME
Добавление роли для поставщика ресурсов Azure Spring Apps
В следующем примере показано, как добавить роль для поставщика ресурсов Azure Spring Apps. Роль назначается всем пользователям, определяемым строкой e8de9221-a19c-4c81-b814-fd37c6caf9d2
:
export VIRTUAL_NETWORK_RESOURCE_ID=$(az network vnet show \
--name $VNET_NAME \
--resource-group $RG \
--query "id" \
--output tsv)
az role assignment create \
--role "Owner" \
--scope ${VIRTUAL_NETWORK_RESOURCE_ID} \
--assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2
export APP_ROUTE_TABLE_RESOURCE_ID=$(az network route-table show \
--name $APP_ROUTE_TABLE_NAME \
--resource-group $RG \
--query "id" \
--output tsv)
az role assignment create \
--role "Owner" \
--scope ${APP_ROUTE_TABLE_RESOURCE_ID} \
--assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2
export SERVICE_RUNTIME_ROUTE_TABLE_RESOURCE_ID=$(az network route-table show \
--name $SERVICE_RUNTIME_ROUTE_TABLE_NAME \
--resource-group $RG \
--query "id" \
--output tsv)
az role assignment create \
--role "Owner" \
--scope ${SERVICE_RUNTIME_ROUTE_TABLE_RESOURCE_ID} \
--assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2
Создание экземпляра Azure Spring Apps с определяемой пользователем маршрутизацией
В следующем примере показано, как создать экземпляр Azure Spring Apps с определяемой пользователем маршрутизацией:
az spring create \
--name $ASA_NAME \
--resource-group $RG \
--vnet $VNET_NAME \
--app-subnet $ASA_APP_SUBNET_NAME \
--service-runtime-subnet $ASA_SERVICE_RUNTIME_SUBNET_NAME \
--outbound-type userDefinedRouting
Теперь вы можете получить доступ к общедоступному IP-адресу брандмауэра из Интернета. Брандмауэр направляет трафик в подсети Azure Spring Apps в соответствии с правилами маршрутизации.