Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure предоставляет исходящее подключение для развертываний клиентов с помощью нескольких различных механизмов. В этой статье описаны сценарии, когда они применяются, как они работают и как управлять ими.
Замечание
В этой статье рассматриваются только классические развертывания. Просмотрите исходящие подключения для всех сценариев развертывания Resource Manager в Azure.
Развертывание в Azure может взаимодействовать с конечными точками за пределами Azure в пространстве общедоступных IP-адресов. Когда экземпляр инициирует исходящий поток в место назначения в пространстве общедоступных IP-адресов, Azure динамически сопоставляет частный IP-адрес с общедоступным IP-адресом. После создания этого сопоставления возвращаемый трафик для исходящего потока также может достигать частного IP-адреса, с которого этот поток начался.
Azure использует преобразование сетевых адресов источника (SNAT) для выполнения этой функции. Если несколько частных IP-адресов маскируются за одним общедоступным IP-адресом, Azure использует преобразование адресов портов (PAT) для маскирования частных IP-адресов. Временные порты используются для PAT и предварительно выделены на основе размера пула.
Существует несколько сценариев исходящего трафика. Эти сценарии можно объединить по мере необходимости. Внимательно изучите их, чтобы понять возможности, ограничения и шаблоны, применяемые к модели развертывания и сценарию приложения. Ознакомьтесь с рекомендациями по управлению этими сценариями.
Обзор сценария
Azure предоставляет три различных метода для обеспечения исходящих подключений в классических развертываниях. Не все классические развертывания имеют все три сценария, доступные для них:
Сценарий | Метод | Протоколы IP | Описание | Роль веб-работника | IaaS |
---|---|---|---|---|---|
1. Виртуальная машина с общедоступным IP-адресом уровня экземпляра | SNAT, маскирование портов не используется | TCP, UDP, ICMP, ESP | Azure использует виртуальную машину с назначенным общедоступным IP-адресом. Экземпляр имеет все эфемерные порты, доступные. | нет | Да |
2. Общедоступная конечная точка балансировки нагрузки | SNAT с маскированием портов (PAT) к общедоступной конечной точке | TCP, UDP | Azure делится общедоступной конечной точкой публичного IP-адреса с несколькими частными конечными точками. Azure использует временные порты общедоступной конечной точки для PAT. | Да | Да |
3. Автономная виртуальная машина | SNAT с маскированием портов (PAT) | TCP, UDP | Azure автоматически назначает общедоступный IP-адрес для SNAT, использует этот общедоступный IP-адрес во всем развертывании и использует временные порты IP-адреса общедоступной конечной точки для PAT. Это резервный сценарий для предыдущих сценариев. Мы не рекомендуем использовать его, если вам нужна видимость и контроль. | Да | Да |
Это подмножество функций исходящего подключения, доступных для развертываний Resource Manager в Azure.
Различные развертывания в классической версии имеют разные функциональные возможности:
Классическое развертывание | Доступные функции |
---|---|
Виртуальная машина | сценарий 1, 2 или 3 |
Роль веб-работника | только сценарий 2, 3 |
Стратегии устранения рисков также имеют одинаковые различия.
Алгоритм, используемый для предварительного размещения временных портов для ПАТ для классических развертываний, совпадает с развертыванием ресурсов Azure Resource Manager.
Сценарий 1. Виртуальная машина с общедоступным IP-адресом уровня экземпляра
В этом сценарии виртуальная машина имеет общедоступный IP-адрес уровня экземпляра (ILPIP). Что касается исходящих подключений, это не имеет значения, имеет ли виртуальная машина конечную точку балансировки нагрузки. Этот сценарий имеет приоритет над другими. При использовании ILPIP виртуальная машина использует ILPIP для всех исходящих потоков.
Общедоступный IP-адрес, назначенный виртуальной машине, — это связь 1:1 (а не 1:многие) и реализуется в виде безгосударственного 1:1 NAT. Маскирование портов (PAT) не используется, и виртуальная машина имеет все временные порты, доступные для использования.
Если приложение инициирует множество исходящих потоков и возникает исчерпание портов SNAT, рекомендуется назначить ILPIP для устранения ограничений SNAT. Просмотрите Управление истощением SNAT в полном объёме.
Сценарий 2. Общедоступная конечная точка балансировки нагрузки
В этом сценарии виртуальная машина или роль веб-работника связаны с общедоступным IP-адресом через конечную точку с балансировкой нагрузки. У виртуальной машины нет общедоступного IP-адреса, назначенного ему.
Когда подсистема балансировки нагрузки создает исходящий поток, Azure преобразует частный исходный IP-адрес исходящего потока в общедоступный IP-адрес общедоступной конечной точки балансировки нагрузки. Azure использует SNAT для выполнения этой функции. Azure также использует PAT для маскировки нескольких частных IP-адресов за общедоступным IP-адресом.
Временные порты внешнего IP-адреса подсистемы балансировки нагрузки используются для различения отдельных потоков, созданных виртуальной машиной. SNAT динамически использует предварительно созданные временные порты при создании исходящих потоков. В этом контексте временные порты, используемые для SNAT, называются портами SNAT.
Порты SNAT предварительно выделены, как описано в разделе «Общие сведения о SNAT и PAT». Это конечный ресурс, который может быть исчерпан. Важно понимать, как они используются. Чтобы понять, как проектировать для этого использования и смягчать последствия при необходимости, ознакомьтесь с разделом "Управление исчерпанием SNAT".
Если существуют несколько общедоступных конечных точек с балансировкой нагрузки , любой из этих общедоступных IP-адресов является кандидатом для исходящих потоков, и один выбирается случайным образом.
Сценарий 3. Нет связанного с общедоступным IP-адресом
В этом сценарии виртуальная машина или роль веб-работника не является частью общедоступной конечной точки с балансировкой нагрузки. В случае виртуальной машины у него нет адреса ILPIP. Когда виртуальная машина создает исходящий поток, Azure преобразует частный исходный IP-адрес исходящего потока в общедоступный IP-адрес. Общедоступный IP-адрес, используемый для этого исходящего потока, не настраивается и не учитывается в отношении ограничения ресурсов общедоступного IP-адреса подписки. Azure автоматически выделяет этот адрес.
Azure использует SNAT с маскированием портов (PAT) для выполнения этой функции. Этот сценарий аналогичен сценарию 2, за исключением того, что используемый IP-адрес отсутствует. Это резервный сценарий, когда сценарии 1 и 2 не существуют. Мы не рекомендуем этот сценарий, если вы хотите контролировать исходящий адрес. Если исходящие подключения являются важной частью приложения, следует выбрать другой сценарий.
Порты SNAT предварительно выделяются, как описано в разделе "Общие сведения о SNAT и PAT". Количество виртуальных машин или ролей веб-рабочих ролей, совместное использование общедоступного IP-адреса, определяет количество предварительно созданных временных портов. Важно понимать, как они используются. Чтобы понять, как разрабатывать это потребление и устранять их при необходимости, ознакомьтесь с разделом "Управление исчерпанием SNAT".
Общие сведения о SNAT и PAT
Маскировка порта SNAT (PAT)
При развертывании выполняется исходящее подключение, каждый исходящий источник подключения перезаписывается. Источник перезаписывается из пространства частных IP-адресов на общедоступный IP-адрес, связанный с развертыванием (на основе описанных выше сценариев). В пространстве общедоступных IP-адресов 5-кортеж потока (исходный IP-адрес, исходный порт, IP-протокол транспортного уровня, IP-адрес назначения, конечный порт) должен быть уникальным.
Временные порты (порты SNAT) используются для этого после перезаписи IP-адреса частного источника, так как несколько потоков исходят из одного общедоступного IP-адреса.
Один порт SNAT используется для каждого потока к одному IP-адресу назначения, порту и протоколу. Для нескольких потоков к одному и тому же IP-адресу, порту и протоколу каждый поток использует один порт SNAT. Это гарантирует, что потоки уникальны, когда они исходят из того же общедоступного IP-адреса и отправляются в один и тот же конечный IP-адрес, порт и протокол.
Несколько потоков, каждый из которых направлен на разные IP-адреса назначения, порты и протоколы, используют один общий SNAT порт. Конечный IP-адрес, порт и протокол делают потоки уникальными без необходимости использования дополнительных исходных портов для различения потоков в пространстве публичных IP-адресов.
До тех пор, пока существующие потоки не освобождают порты SNAT, исчерпание ресурсов порта SNAT приводит к сбоям в исходящих потоках. Load Balancer освобождает порты SNAT при закрытии потока и использует 4-минутный период простоя для освобождения портов SNAT из неактивных потоков.
Для устранения проблем, которые обычно приводят к исчерпанию портов SNAT, ознакомьтесь с разделом "Управление SNAT ".
Эфемерное предварительное размещение портов для маскирования портов SNAT (PAT)
Azure использует алгоритм для определения количества предварительно размещенных портов SNAT на основе размера внутреннего пула при использовании порта, маскирующего SNAT (PAT). Порты SNAT — это временные порты, доступные для определенного общедоступного IP-адреса.
Azure предварительно выделяет порты SNAT при развертывании экземпляра на основе того, сколько экземпляров виртуальной машины или веб-рабочих ролей совместно используют указанный общедоступный IP-адрес. При создании исходящих потоков PAT динамически использует порты (до предварительно заданного предела) и освобождает их при закрытии потока или по истечении времени ожидания простоя.
В следующей таблице показаны предварительные расположения портов SNAT для уровней внутренних пулов:
Случаи | Предварительное выделение портов SNAT для каждого экземпляра |
---|---|
1-50 | 1,024 |
51-100 | 512 |
101-200 | 256 |
201-400 | 128 |
Помните, что количество доступных портов SNAT не преобразуется непосредственно в число потоков. Один порт SNAT можно повторно использовать для нескольких уникальных назначений. Порты используются только в том случае, если необходимо сделать потоки уникальными. Рекомендации по проектированию и устранению рисков см. в разделе о том, как управлять этим исчерпывающим ресурсом и разделом, описывающим PAT.
Изменение размера развертывания может повлиять на некоторые из установленных потоков. Если размер внутреннего пула увеличивается и переходит на следующий уровень, половина предварительно зарезервированных портов SNAT возвращается во время перехода на следующий более крупный уровень внутреннего пула. Потоки, связанные с восстановленным портом SNAT, истекут и должны быть снова установлены. Если предпринята попытка нового потока, он будет выполнен сразу, если предварительно выделенные порты доступны.
Если размер развертывания уменьшается и переходит на более низкий уровень, число доступных портов SNAT увеличивается. В этом случае существующие выделенные порты SNAT и соответствующие потоки не затрагиваются.
Если облачная служба повторно развернута или изменена, инфраструктура может временно сообщить о серверном пуле, который в два раза больше фактического, и Azure, в свою очередь, будет предварительно выделять меньше портов SNAT на экземпляр, чем ожидалось. Это может временно увеличить вероятность исчерпания портов SNAT. В конечном итоге размер пула перейдет на фактический размер, и Azure автоматически увеличит предварительнораспределированные порты SNAT до ожидаемого числа, как показано в таблице выше. Это поведение выполняется по проектированию и не настраивается.
Выделения портов SNAT относятся к протоколу IP-транспорта (протокол TCP и UDP поддерживаются отдельно) и выпускаются в следующих условиях:
Освобождение порта TCP SNAT
- Если оба сервера или клиента отправляют FIN/ACK, порт SNAT будет выпущен через 240 секунд.
- Если отображается RST, порт SNAT будет выпущен через 15 секунд.
- Время ожидания при простое истекло
Освобождение порта UDP SNAT
- Достигнут предел времени простоя
Решение проблем
Этот раздел предназначен для устранения нехватки SNAT и других сценариев, которые могут возникнуть при исходящих подключениях в Azure.
Управление переполнением портов SNAT (PAT)
Временные порты, используемые для PAT, являются ограниченным ресурсом, как описано в отсутствии связанного общедоступного IP-адреса и общедоступной конечной точки с балансировкой нагрузки.
Если вы знаете, что инициируете множество исходящих TCP- или UDP-соединений с тем же IP-адресом и портом назначения и замечаете сбои в исходящих подключения, или если поддержка сообщает вам, что вы исчерпываете порты SNAT (предварительно выделенные временные порты, используемые PAT), у вас есть несколько общих вариантов снижения таких проблем. Просмотрите эти параметры и определите, что доступно и лучше всего подходит для вашего сценария. Возможно, что один или несколько могут помочь управлять этим сценарием.
Если у вас возникли проблемы с пониманием поведения исходящего подключения, можно использовать статистику стека IP -адресов (netstat). Кроме того, это может быть полезно для наблюдения за поведением подключения с помощью записей пакетов.
Изменение приложения для повторного использования подключений
Вы можете уменьшить спрос на временные порты, используемые для SNAT, повторно применяя подключения в приложении. Это особенно верно для протоколов, таких как HTTP/1.1, где повторное использование подключения — это значение по умолчанию. И другие протоколы, использующие HTTP в качестве транспорта (например, REST), могут воспользоваться преимуществами.
Повторное использование всегда лучше, чем отдельные атомарные TCP-подключения для каждого запроса. Повторное использование приводит к более эффективным, очень эффективным транзакциям TCP.
Изменение приложения для использования пулов подключений
В приложении можно использовать схему пула подключений, где запросы распределяются по фиксированному набору подключений (каждый из которых можно использовать повторно). Эта схема ограничивает количество эфемерных портов и создает более прогнозируемую среду. Эта схема также может увеличить пропускную способность запросов, разрешая несколько одновременных операций, когда одно подключение блокирует ответ операции.
Возможно, пулы подключений уже существуют в платформе, которая используется вами для разработки приложения или параметров конфигурации приложения. Вы можете объединить пул соединений с повторным использованием подключений. В этом случае для обработки нескольких запросов можно будет использовать фиксированное, прогнозируемое число портов для одних и тех же конечных IP-адреса и порта. Запросы также получают выгоду от эффективного использования tcp-транзакций, что снижает задержку и использование ресурсов. Транзакции UDP также могут получить выгоду, так как управление числом потоков UDP может помочь избежать условий исчерпания и управлять использованием SNAT портов.
Изменение приложения для использования менее "жесткой" логики повторных попыток
Когда предварительно выделенные временные порты, используемые для PAT, исчерпаны или возникают сбои в приложениях, агрессивные или грубые методы повторных попыток без учёта логики угасания и отступа вызывают или поддерживают исчерпание. Вы можете уменьшить спрос на временные порты с помощью менее агрессивной логики повторных попыток.
Временные порты имеют 4-минутное время ожидания простоя (не настраивается). Если повторные попытки слишком интенсивны, усталость не имеет возможности исчезнуть самостоятельно. Таким образом, учитывая, как и как часто приложение повторяет транзакции, является важной частью разработки.
Назначение общедоступного IP-адреса уровня экземпляра каждой виртуальной машине
Назначение ILPIP изменяет сценарий на общедоступный IP-адрес уровня экземпляра к виртуальной машине. Все временные порты общедоступного IP-адреса, которые используются для каждой виртуальной машины, доступны виртуальной машине. (В отличие от сценариев, в которых временные порты общедоступного IP-адреса совместно используются для всех виртуальных машин, связанных с соответствующим развертыванием.) Существуют компромиссы, такие как потенциальное влияние на список разрешенных ip-адресов большого количества отдельных IP-адресов.
Замечание
Этот параметр недоступен для веб-работников.
Используйте keepalive для сброса времени ожидания простоя исходящих подключений.
Исходящие подключения имеют 4-минутное время ожидания простоя. Это время ожидания не настраивается. Однако можно использовать транспортные механизмы (например, TCP keepalive) или keepalive-данные на уровне приложения для обновления неактивного потока и сброса времени ожидания бездействия при необходимости. Обратитесь к поставщику любого упаковаемого программного обеспечения, чтобы узнать, поддерживается ли это или как включить его. Как правило, для сброса времени ожидания простоя необходимо создать только одну сторону.
Обнаружение общедоступного IP-адреса, который использует виртуальная машина
Существует много способов определить общедоступный исходный IP-адрес исходящего подключения. OpenDNS — это служба, которая может показать общедоступный IP-адрес виртуальной машины.
С помощью команды nslookup можно отправить к сопоставителю OpenDNS запрос DNS для имени myip.opendns.com. Служба возвращает исходный IP-адрес, который был использован для отправки запроса. При выполнении следующего запроса, поступившего с виртуальной машины, ответ будет содержать общедоступный IP-адрес, используемый для этой виртуальной машины.
nslookup myip.opendns.com resolver1.opendns.com
Дальнейшие действия
- Дополнительные сведения о Load Balancer , используемом в развертываниях Resource Manager.
- Узнайте больше о сценариях исходящих подключений, доступных в развертываниях Resource Manager.