Создание управляемого или назначаемого пользователем шлюза 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 несовместим с пользовательскими виртуальными сетями.
Внимание
В не частных кластерах трафик кластера сервера API направляется и обрабатывается через исходящий тип кластеров. Чтобы предотвратить обработку трафика сервера API в качестве общедоступного трафика, рассмотрите возможность использования частного кластера или ознакомьтесь с функцией интеграции виртуальной сети СЕРВЕРА API.
Создание кластера 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 \ --generate-ssh-keys
Обновите исходящий 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 предварительно настроен в подсети. Следующие команды создают необходимые ресурсы для этого сценария.
Создайте группу ресурсов с помощью
az group create
команды.az group create --name myResourceGroup \ --location southcentralus
Создайте управляемое удостоверение для разрешений сети и сохраните идентификатор
$IDENTITY_ID
для последующего использования.IDENTITY_ID=$(az identity create \ --resource-group myResourceGroup \ --name myNatClusterId \ --location southcentralus \ --query id \ --output tsv)
Создайте общедоступный IP-адрес для шлюза NAT с помощью
az network public-ip create
команды.az network public-ip create \ --resource-group myResourceGroup \ --name myNatGatewayPip \ --location southcentralus \ --sku standard
Создайте шлюз 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 в зону.
Создайте виртуальную сеть с помощью
az network vnet create
команды.az network vnet create \ --resource-group myResourceGroup \ --name myVnet \ --location southcentralus \ --address-prefixes 172.16.0.0/20
Создайте подсеть в виртуальной сети с помощью шлюза 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)
Создайте кластер 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 \ --assign-identity $IDENTITY_ID \ --generate-ssh-keys
Отключение исходящего ТРАФИКА для 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 mynp \ --node-count 3 \ --os-type Windows \ --disable-windows-outbound-nat
Следующие шаги
Дополнительные сведения о Шлюзе NAT в Azure см. в статье Что такое NAT виртуальной сети?
Azure Kubernetes Service