Поделиться через


Управление исходящим трафиком для экземпляра 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, которая использует определяемый пользователем маршрут (UDR).

Схема, демонстрирующая архитектуру виртуальной сети 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 в соответствии с правилами маршрутизации.

Следующие шаги