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

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

В модели управляемого шлюза NAT AKS управляет шлюзом NAT, чтобы обеспечить исходящее подключение для узлов кластера. AKS поддерживает два варианта управляемого шлюза NAT: более новые managedNATGatewayV2 и исходные managedNATGateway. managedNATgatewayV2 использует шлюз NAT StandardV2, который по умолчанию является избыточным по зонам, обеспечивая непрерывное исходящее подключение, даже если одна зона доступности выходит из строя. В отличие от стандартного шлюза NAT, вам не нужно указывать зону — избыточность зоны обеспечивается автоматически. Шлюз NAT StandardV2 также поддерживает IPv6, более высокую пропускную способность и журналы потоков. Дополнительные сведения см. в разделе SKU шлюза NAT standardV2.

Внимание

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

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

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

Прежде чем начать

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

Внимание

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

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

  • Создайте кластер 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 управляемые IP-адреса — используйте --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.

В следующей таблице описывается каждый исходящий 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 Клиент

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

Внимание

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

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

    Минимальная версия расширения aks-preview Azure CLI — 20.0.0b1.

    # 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
    
  2. Регистрация флага компонента ManagedNATGatewayV2Preview

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

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

    Проверьте успешную регистрацию, используя команду az feature show. Для завершения регистрации потребуется несколько минут.

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

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

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

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

    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"
    az group create --name $MY_RG --location "eastus2"
    
  4. Создайте общедоступный IP-адрес IPv4 с избыточностью между зонами и префикс общедоступного IP с помощью команды az network public-ip create. Сохраните $MY_IP и $MY_IP_PREFIX, чтобы использовать их в качестве исходящих IP-адресов для управляемого шлюза NAT StandardV2.

    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 id \
        --output tsv)
    
    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)
    
  5. Создайте кластер AKS и сошлитесь на общедоступный IP-адрес ($MY_IP_ID) и префикс общедоступного IP-адреса ($MY_IP_PREFIX_ID).

    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 с помощью 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 команды.

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    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 для 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 (должен использовать исходящий трафик по умолчанию) имеет "64 порта на IP-адресе узла".
  • SNAT по Брандмауэр Azure (отключение OutboundNAT) имеет 2496 портов на общедоступный IP-адрес.
  • SNAT по шлюзу NAT (отключить OutboundNAT) имеет 64512 портов на общедоступный 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.

    Следующая команда добавляет пул узлов Windows в существующий кластер AKS, отключив OutboundNAT.

      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 см. в разделе Azure NAT Gateway.