Создание управляемого или назначаемого пользователем шлюза NAT для кластера Azure Kubernetes Service (AKS)

Область применения: ✔️ AKS Automatic ✔️ AKS Standard

Для большинства производственных рабочих нагрузок AKS Automatic — рекомендуемый готовый к промышленной эксплуатации вариант AKS по умолчанию. Автоматические кластеры AKS включают предварительно настроенный управляемый шлюз NAT.

В AKS Standard можно создать или настроить управляемый шлюз NAT, если требуется исходящее подключение AKS для кластера. Для сценариев использования собственной сети (BYO) используйте шлюз NAT, назначаемый пользователем.

Хотя вы можете маршрутизировать исходящий трафик через Azure Load Balancer, существуют ограничения на количество исходящих потоков трафика, которые можно использовать. Azure NAT Gateway поддерживает до 64 512 исходящих потоков трафика UDP и TCP на один IP-адрес и не более 16 IP-адресов. Три типа исходящего трафика поддерживают шлюз NAT: managedNATGatewayV2 (предварительная версия) managedNATGatewayи userAssignedNATGateway.

В этой статье показано, как создать кластер AKS с управляемым шлюзом NAT и шлюзом NAT, назначенным пользователем, для исходящего трафика. В нем также показано, как отключить ИсходящийNAT для Windows.

Внимание

Тип managedNATGatewayV2 для исходящего трафика в настоящее время доступен в предварительной версии. Изучите Дополнительные условия использования предварительных версий Microsoft Azure для юридических вопросов, применимых к функциям Azure, которые находятся в стадии бета-тестирования, предварительного просмотра или еще не выпущены в общую доступность.

Требования

Автоматические кластеры AKS включают предварительно настроенный управляемый шлюз NAT. Действия, описанные в этой статье, в основном предназначены для сценариев AKS Standard и пользовательских сетевых сценариев.

  • Убедитесь, что вы используете последнюю версию Azure CLI.
  • Убедитесь, что вы используете Kubernetes версии 1.20.x или более поздней.
  • Управляемый шлюз NAT несовместим с пользовательскими виртуальными сетями.

Внимание

В неприватных кластерах трафик кластера к серверу API маршрутизируется и обрабатывается через тип исходящего трафика кластера. Чтобы предотвратить обработку трафика сервера API в качестве общедоступного трафика, рассмотрите возможность использования частного кластера или ознакомьтесь с функцией интеграции виртуальной сети СЕРВЕРА API.

Управляемый шлюз NAT в AKS

AKS Automatic использует управляемый шлюз NAT как часть своей предварительно настроенной конфигурации по умолчанию, готовой к промышленной эксплуатации. Используйте этот раздел, если вы работаете с AKS Standard или хотите понять, как работает управляемый шлюз NAT в кластере AKS.

Управляемый шлюз NAT — это управляемый AKS вариант исходящего подключения. AKS создает шлюз NAT и управляет им, чтобы обеспечить исходящее подключение для узлов кластера.

Используйте управляемый шлюз NAT, если требуется:

  • Исходящее сетевое подключение под управлением AKS с меньшими операционными затратами.
  • Маршрут исходящего трафика по умолчанию, подходящий для промышленной эксплуатации.
  • Проще управлять исходящим трафиком, чем развертывание шлюза NAT, управляемым клиентом.
  • Стандартная сетевая модель AKS без использования собственного ресурса шлюза NAT.

Создание кластера AKS с управляемым шлюзом NAT

Параметры исходящего IP-адреса

В следующей таблице описывается каждый исходящий IP-параметр и когда он используется:

Параметр Ввод Версия протокола IP Кто управляет общедоступными IP-адресами
--nat-gateway-managed-outbound-ip-count Значение в диапазоне [1, 16]. Требуемое число исходящих IPv4-адресов для исходящего подключения шлюза NAT. IPv4 Azure
--nat-gateway-managed-outbound-ipv6-count Значение в диапазоне [1, 16]. Требуемое число исходящих IPv6-адресов для исходящего подключения шлюза NAT. IPv6 Azure
--nat-gateway-outbound-ips Идентификаторы ресурсов общедоступных IP-адресов, разделенные запятыми, для исходящего подключения через шлюз NAT. IPv4 или IPv6 Клиент
--nat-gateway-outbound-ip-prefixes Идентификаторы ресурсов префиксов публичных IP-адресов, разделенные запятыми, для исходящего подключения NAT-шлюза. IPv4 или IPv6 Клиент

Создание кластера AKS с управляемым шлюзом NAT StandardV2 (managedNATGatewayV2)

Внимание

Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

  • Создайте кластер AKS с управляемым шлюзом NAT StandardV2, используя команду az aks create с параметрами --outbound-type managedNATGateway, --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-ip-count, --nat-gateway-managed-outbound-ipv6-count, --nat-gateway-idle-timeout.
  • При настройке исходящих IP-адресов для managedNATgatewayV2 используйте один из следующих способов. Вы не можете использовать ip-адреса исходящего трафика, управляемые Azure и определяемые клиентом.
    • IP-адреса, управляемые Azure: используйте --nat-gateway-managed-ip-outbound-count и --nat-gateway-managed-outbound-ipv6-count, чтобы Azure автоматически выделяла исходящие общедоступные IP-адреса и управляла ими за вас.
    • Задаваемые клиентом IP-адреса: используйте --nat-gateway-outbound-ips и --nat-gateway-outbound-ip-prefixes, чтобы подключить собственные предварительно подготовленные общедоступные IP-адреса или префиксы, обеспечивая полный контроль над конкретными адресами, используемыми для исходящего трафика. Шлюз NAT StandardV2 требует использования новых общедоступных IP-адресов StandardV2. Существующие общедоступные IP-адреса SKU уровня "Стандартный" не работают с шлюзом NAT StandardV2.

Установите расширение aks-preview Azure CLI

Тип managedNATGatewayV2 outbound в настоящее время доступен в предварительной версии. Чтобы использовать этот тип исходящего подключения, установите расширение aks-preview для Azure CLI и зарегистрируйте ManagedNATGatewayV2Preview флаг функции.

Установите или обновите расширение предварительной версии Azure CLI с помощью команды az extension add или az extension update. Минимальная версия расширения Azure CLI составляет aks-preview.

# Install the aks-preview extension
az extension add --name aks-preview

# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

Регистрация флага компонента ManagedNATGatewayV2Preview

  1. Зарегистрируйте флаг функции ManagedNATGatewayV2Preview с помощью команды az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    
  2. Проверьте успешную регистрацию, используя команду az feature show. Для завершения регистрации потребуется несколько минут.

    az feature show --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    После того как функция отображает Registered, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью команды az provider register.

Создание кластера AKS с управляемым шлюзом NAT StandardV2

Следующие команды создают необходимую группу ресурсов, общедоступный IP-адрес и ресурс префикса общедоступного IP-адреса для присоединения к шлюзу NAT и кластер AKS с управляемым шлюзом NAT уровня StandardV2.

  1. Создайте группу ресурсов с помощью az group create команды.

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    export MY_AKS="myNatV2Cluster$RANDOM_SUFFIX"
    export MY_IP="myNatOutboundIP$RANDOM_SUFFIX"
    export MY_IP_PREFIX="myNatOutboundIPPrefix$RANDOM_SUFFIX"
    
    # Create the resource group
    az group create --name $MY_RG --location "eastus2"
    
  2. Создайте общедоступный IP-адрес IPv4 с избыточностью между зонами и префикс общедоступного IP с помощью команды az network public-ip create. Сохраните $MY_IP и $MY_IP_PREFIX, чтобы использовать их в качестве исходящих IP-адресов для управляемого шлюза NAT StandardV2.

    # Create a zone redundant IPv4 public IP address and store the ID to $MY_IP_ID for later use
    export MY_IP_ID=$(az network public-ip create \
        --resource-group $MY_RG \
        --name $MY_IP \
        --location eastus2 \
        --sku StandardV2 \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --query publicIp.id \
        --output tsv)
    
    # Create a zone redundant IPv4 public IP prefix and store the ID to $MY_IP_PREFIX_ID for later use
    export MY_IP_PREFIX_ID=$(az network public-ip prefix create \
        --resource-group $MY_RG \
        --name $MY_IP_PREFIX \
        --location eastus2 \
        --length 31 \
        --sku StandardV2 \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
  3. Создайте кластер AKS и укажите общедоступный IP-адрес ($MY_IP_ID) и префикс общедоступного IP-адреса ($MY_IP_PREFIX_ID) с помощью команды az aks create с параметрами --outbound-type managedNATGatewayV2, --nat-gateway-outbound-ips и --nat-gateway-outbound-ip-prefixes.

    az aks create \
        --resource-group $MY_RG \
        --name $MY_AKS \
        --node-count 3 \
        --outbound-type managedNATGatewayV2 \
        --nat-gateway-outbound-ips $MY_IP_ID \
        --nat-gateway-outbound-ip-prefixes $MY_IP_PREFIX_ID \
        --nat-gateway-idle-timeout 4 \
        --generate-ssh-keys
    

Обновите исходящие IP-адреса, префиксы исходящих IP-адресов, число управляемых исходящих IP-адресов или время ожидания простоя, используя az aks update команду с параметрами --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-count, --nat-gateway-managed-outbound-ipv6-count или --nat-gateway-idle-timeout. Невозможно изменить конфигурацию managedNATGatewayV2, чтобы переключаться между задаваемыми клиентом и управляемыми исходящими IP-адресами после создания. Конфигурация исходящего IP-адреса определяется при первоначальном создании шлюза NAT StandardV2 и остается неизменяемым.

Создание кластера AKS с управляемым шлюзом NAT уровня "Стандартный" (managedNATGateway)

  • Создайте кластер AKS с управляемым шлюзом NAT уровня "Стандартный" с помощью az aks create команды и --outbound-type managedNATGateway--nat-gateway-managed-outbound-ip-count--nat-gateway-idle-timeout параметров. Если требуется, чтобы шлюз NAT работал из определенной зоны доступности, укажите зону с помощью --zones.
  • Нельзя использовать управляемый ресурс шлюза NAT в нескольких зонах доступности. Для зонально-избыточного исходящего подключения рекомендуется использовать managedNATgatewayV2.
  • Если вы не указываете зону при создании управляемого шлюза NAT, шлюз NAT развертывается без зоны по умолчанию. Если шлюз NAT находится в состоянии без зоны, Azure назначает ресурсу зону. Дополнительные сведения о незональной модели развертывания см. в незональном шлюзе NAT.

Создание кластера AKS с помощью userAssignedNatGateway

Для этой конфигурации требуется создание собственных сетей (через Azure CNI), а шлюз NAT предварительно настроен в подсети. Для этого outbound-typeподдерживаются шлюзы NAT standard и StandardV2. Следующие команды создают необходимые ресурсы для развертывания ресурса шлюза NAT StandardV2 для кластера AKS.

  1. Создайте группу ресурсов с помощью az group create команды.

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    
    # Create the resource group
    az group create --name $MY_RG --location southcentralus
    
  2. Создайте управляемое удостоверение для сетевых разрешений и сохраните идентификатор в $IDENTITY_ID для последующего использования.

    export IDENTITY_NAME="myNatClusterId$RANDOM_SUFFIX"
    export IDENTITY_ID=$(az identity create \
        --resource-group $MY_RG \
        --name $IDENTITY_NAME \
        --location southcentralus \
        --query id \
        --output tsv)
    

    Пример выходных данных:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxx
    
  3. Создайте общедоступный IP-адрес StandardV2 для шлюза NAT с помощью az network public-ip create команды. Для шлюза NAT StandardV2 требуется общедоступный IP-адрес StandardV2.

    export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX"
    az network public-ip create \
        --resource-group $MY_RG \
        --name $PIP_NAME \
        --location southcentralus \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --sku standard-v2
    
  4. Создайте шлюз NAT StandardV2 с помощью az network nat gateway create команды.

    export NATGATEWAY_NAME="myNatGateway$RANDOM_SUFFIX"
    az network nat gateway create \
        --resource-group $MY_RG \
        --name $NATGATEWAY_NAME \
        --location southcentralus \
        --public-ip-addresses $PIP_NAME \
        --sku StandardV2
        --idle-timeout 4
    

    Внимание

    Чтобы обеспечить избыточность зоны, разверните ресурс шлюза NAT StandardV2, охватывающий несколько зон доступности в регионе. Эта конфигурация обеспечивает непрерывное исходящее подключение даже в случае сбоя одной зоны. Дополнительные сведения о шлюзе NAT StandardV2 и его преимуществах см. в статье "Шлюз NAT StandardV2". Для сравнения ресурс шлюза NAT уровня «Стандартный» обеспечивает отказоустойчивость только в той зоне доступности, в которой он развернут.

  5. Создайте виртуальную сеть с помощью az network vnet create команды.

    export VNET_NAME="myVnet$RANDOM_SUFFIX"
    az network vnet create \
        --resource-group $MY_RG \
        --name $VNET_NAME \
        --location southcentralus \
        --address-prefixes 172.16.0.0/20 
    
  6. Создайте подсеть в виртуальной сети с помощью шлюза NAT и сохраните идентификатор $SUBNET_ID для последующего использования.

    export SUBNET_NAME="myNatCluster$RANDOM_SUFFIX"
    export SUBNET_ID=$(az network vnet subnet create \
        --resource-group $MY_RG \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 172.16.0.0/22 \
        --nat-gateway $NATGATEWAY_NAME \
        --query id \
        --output tsv)
    
  7. Создайте кластер AKS с помощью подсети с шлюзом NAT и управляемым удостоверением с помощью az aks create команды.

    export AKS_NAME="myNatCluster$RANDOM_SUFFIX"
    az aks create \
        --resource-group $MY_RG \
        --name $AKS_NAME \
        --location southcentralus \
        --network-plugin azure \
        --vnet-subnet-id $SUBNET_ID \
        --outbound-type userAssignedNATGateway \
        --assign-identity $IDENTITY_ID \
        --generate-ssh-keys
    

Факторы, учитываемые при производстве

При использовании управляемого шлюза NAT в рабочей среде планируйте поведение исходящего трафика, доступ к серверу API и устойчивость рабочей нагрузки.

  • Используйте AKS Automatic, если вам нужен рекомендуемый вариант по умолчанию, готовый к промышленной эксплуатации, для большинства рабочих нагрузок AKS.
  • Используйте управляемый шлюз NAT в AKS Standard, если требуется управляемое AKS исходящее подключение без привлечения собственного шлюза NAT.
  • Используйте частный кластер или интеграцию виртуальной сети сервера API, если требуется уменьшить объем трафика сервера API.
  • Просмотрите требования к исходящему IP-адресу перед тем, как перейти в режим реального времени.
  • Если рабочие нагрузки зависят от фиксированных исходящих адресов, убедитесь, что управляемый шлюз NAT соответствует этим требованиям перед развертыванием.
  • Если вам нужно управлять NAT независимо от AKS, используйте шлюз NAT, назначенный пользователем.

Отключение исходящего NAT для Windows

Windows OutboundNAT может вызвать определенные проблемы с подключением и обменом данными с модулями pod AKS. Примером проблемы является повторное использование порта узла. В этом примере Windows OutboundNAT использует порты для преобразования IP-адреса pod в IP-адрес узла Windows, что может привести к нестабильному подключению к внешней службе из-за исчерпания портов.

Windows включает OutboundNAT по умолчанию. Теперь при создании новых пулов агентов Windows можно вручную отключать исходящий NAT.

Предварительные требования и ограничения

  • Вам нужен существующий кластер AKS с версией 1.26 или более поздней версии. Если вы используете Kubernetes версии 1.25 или более поздней, обновите конфигурацию развертывания.
  • Нельзя задать для кластера тип исходящего трафика "LoadBalancer". Вы можете настроить его как шлюз NAT или UDR:
    • Шлюз NAT: шлюз NAT автоматически обрабатывает подключения NAT и более мощный, чем Load Balancer (цен. категория "Стандартный"). При использовании этого параметра с вас может взиматься дополнительная плата.
    • UDR (UserDefinedRouting) — при настройке правил маршрутизации необходимо учитывать ограничения портов.
    • Чтобы переключиться с подсистемы балансировки нагрузки на шлюз NAT, можно добавить шлюз NAT в виртуальную сеть или запустить az aks upgrade , чтобы обновить исходящий тип.

Примечание.

UserDefinedRouting имеет следующие ограничения:

  • SNAT через Load Balancer (необходимо использовать OutboundNAT по умолчанию) имеет 64 порта на IP-адресе хоста.
  • SNAT по Брандмауэр Azure (отключить outboundNAT) имеет 2496 портов на общедоступный IP-адрес.
  • SNAT через шлюз NAT (с отключённым OutboundNAT) имеет 64 512 портов на каждый общедоступный IP-адрес.
  • Если для приложения недостаточно диапазона портов Брандмауэр Azure, необходимо использовать шлюз NAT.
  • Брандмауэр Azure не использует SNAT с правилами сети, если IP-адрес назначения находится в диапазоне частных IP-адресов согласно RFC 1918 или общего адресного пространства согласно IANA RFC 6598.

Ручное отключение Outbound NAT для Windows

  • Вручную отключите Outbound NAT для Windows при создании новых пулов агентов Windows, используя команду az aks nodepool add с флагом --disable-windows-outbound-nat.

    Примечание.

    Вы можете использовать существующий кластер AKS, но может потребоваться обновить исходящий тип и добавить пул узлов для включения --disable-windows-outbound-nat.

    export WIN_NODEPOOL_NAME="win$(head -c 1 /dev/urandom | xxd -p)"
    az aks nodepool add \
        --resource-group $MY_RG \
        --cluster-name $MY_AKS \
        --name $WIN_NODEPOOL_NAME \
        --node-count 3 \
        --os-type Windows \
        --disable-windows-outbound-nat
    

    Пример выходных данных:

    {
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx/agentPools/mynpxxx",
      "name": "mynpxxx",
      "osType": "Windows",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroupxxx",
      "type": "Microsoft.ContainerService/managedClusters/agentPools"
    }
    

Дополнительные сведения о Azure NAT Gateway и AKS Automatic см. в следующих статьях: