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

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

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

Подготовка к работе

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

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

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

  • Если при создании управляемого шлюза NAT не задана зона, шлюз NAT по умолчанию развертывается в "без зоны". Если шлюз NAT помечен как Без зоны, Azure поместит ресурс в одну из зон за вас. Дополнительные сведения о незональной модели развертывания см . в незональном шлюзе NAT.

  • Ресурс управляемого шлюза NAT нельзя использовать в нескольких зонах доступности.

      az aks create \
          --resource-group myResourceGroup \
          --name myNatCluster \
          --node-count 3 \
          --outbound-type managedNATGateway \
          --nat-gateway-managed-outbound-ip-count 2 \
          --nat-gateway-idle-timeout 4
    
  • Обновите исходящий IP-адрес или время ожидания простоя с помощью az aks update команды с параметром или --nat-gateway-idle-timeout параметром--nat-gateway-managed-outbound-ip-count.

    az aks update \ 
        --resource-group myResourceGroup \
        --name myNatCluster\
        --nat-gateway-managed-outbound-ip-count 5
    

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

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

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

    az group create --name myResourceGroup \
        --location southcentralus
    
  2. Создайте управляемое удостоверение для разрешений сети и сохраните идентификатор $IDENTITY_ID для последующего использования.

    IDENTITY_ID=$(az identity create \
        --resource-group myResourceGroup \
        --name myNatClusterId \
        --location southcentralus \
        --query id \
        --output tsv)
    
  3. Создайте общедоступный IP-адрес для шлюза NAT с помощью az network public-ip create команды.

    az network public-ip create \
        --resource-group myResourceGroup \
        --name myNatGatewayPip \
        --location southcentralus \
        --sku standard
    
  4. Создайте шлюз NAT с помощью az network nat gateway create команды.

    az network nat gateway create \
        --resource-group myResourceGroup \
        --name myNatGateway \
        --location southcentralus \
        --public-ip-addresses myNatGatewayPip
    

    Внимание

    Один ресурс шлюза NAT нельзя использовать в нескольких зонах доступности. Чтобы обеспечить устойчивость зоны, рекомендуется развернуть ресурс шлюза NAT в каждой зоне доступности и назначить подсети, содержащие кластеры AKS в каждой зоне. Дополнительные сведения об этой модели развертывания см. в разделе шлюза NAT для каждой зоны. Если для шлюза NAT не настроена зона NAT, размещение зоны по умолчанию — "нет зоны", в которой Azure помещает шлюз NAT в зону.

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

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

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

    az aks create \
        --resource-group myResourceGroup \
        --name myNatCluster \
        --location southcentralus \
        --network-plugin azure \
        --vnet-subnet-id $SUBNET_ID \
        --outbound-type userAssignedNATGateway \
        --enable-managed-identity \
        --assign-identity $IDENTITY_ID
    

Отключение исходящего ТРАФИКА для Windows

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

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

Необходимые компоненты

  • Существующий кластер 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 (отключить исходящий трафик) имеет 64512 портов на общедоступный IP-адрес.
  • Если для приложения недостаточно диапазона портов Брандмауэр Azure, необходимо использовать шлюз NAT.
  • Брандмауэр Azure не использует SNAT с правилами сети, если целевой IP-адрес находится в диапазоне частных IP-адресов на каждый IANA RFC 1918 или общее адресное пространство для IANA RFC 6598.

Отключение исходящего ТРАФИКА вручную для Windows

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

    Примечание.

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

    az aks nodepool add \
        --resource-group myResourceGroup
        --cluster-name myNatCluster
        --name mynodepool
        --node-count 3
        --os-type Windows
        --disable-windows-outbound-nat
    

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

Дополнительные сведения о Шлюзе NAT в Azure см. в статье Что такое NAT виртуальной сети?