Зачем нужно указывать подсети в Application Load Balancer?

Начну с описания архитектуры Application Load Balancer:

У нас есть Application Load Balancer, который содержит список одного или нескольких слушателей. Каждый прослушиватель связан с одним конкретным портом и протоколом, поэтому трафик, поступающий на балансировщик нагрузки с этого порта, будет обрабатываться этим прослушивателем. Затем каждый слушатель содержит список правил. Правило определяет условия и действия — в основном, куда направлять трафик. Слушатель также должен иметь действие по умолчанию, которое будет выполнено, если не будет выполнено никакое другое условие. Обычно это действие заключается в перенаправлении трафика в определенную целевую группу.

Целевая группа — это группа экземпляров EC2, IP-адресов, другого балансировщика нагрузки приложений или функции Lambda.

Кроме того, когда вы создаете Application Load Balancer, он просит вас указать VPC и список из 2 или более зон доступности, а также для каждой указать подсеть.

Теперь мой вопрос: почему AWS просит вас указать это? Насколько я понимаю, целевые группы и зарегистрированные цели — это то, где вы указываете бэкэнд балансировщика нагрузки, так зачем нам указывать подсети в конфигурации ALB?

РЕДАКТИРОВАТЬ

Поэкспериментировав, я обнаружил, что если у меня есть инстанс EC2, на котором запущен веб-сервер, например, в AZ 3, а теперь я создаю балансировщик нагрузки и выбираю AZ 1 и 2, то трафик не будет достигать веб-сервера в AZ 3, пока я не добавьте еще одну АЗ в настройках балансировщика нагрузки.

Итак, если уточнить мой вопрос: если эта настройка зон доступности в настройках балансировщика нагрузки означает: это те АЗ, в которые балансировщик нагрузки будет отправлять трафик, в каком случае я не должен выбирать ВСЕ имеющиеся зоны доступности?

Мой ответ сработал для вас?

Foo 25.10.2022 19:41

@ Паоло, не совсем, не очень понятно.

YoavKlein 25.10.2022 23:40

Что именно непонятно? Какие вопросы у вас остались?

Foo 25.10.2022 23:42

Это просто очень коротко и не очень понятно. Вы можете расширить его и быть более детальным.

YoavKlein 25.10.2022 23:59

Возьмите ответ Джона Ротенштейна в качестве примера

YoavKlein 25.10.2022 23:59

Что вам еще непонятно?

Foo 26.10.2022 00:03

Ваш вопрос был один, на который я ответил. Похоже, вы либо не поняли, что спросили, либо не поняли мой ответ.

Foo 26.10.2022 00:04

Балансировщик нагрузки может направлять трафик только в выбранные вами зоны доступности, поскольку в каждой из этих зон он создал сетевой интерфейс. Без сетевых интерфейсов балансировщик нагрузки не может работать

Foo 26.10.2022 00:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
186
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Когда вам нужен ALB, вы должны назначить ему IP-адрес. Подсеть — это не что иное, как диапазон IP-адресов. Размещая ALB внутри подсети, вы определяете, какой диапазон IP-адресов вы хотите назначить этому ресурсу. Более того, эти подсети позволяют настраивать различные уровни безопасности в отношении ресурса внутри подсети для управления трафиком.

Ваша целевая группа находится в другой подсети с другим диапазоном, тогда как вы можете поместить свой ALB в другую подсеть с другим диапазоном.

Я не спрашивал о подсети, в которой находится IP-адрес балансировщика нагрузки, я спрашивал о зонах доступности + подсетях серверной части, к которым он направляется.

YoavKlein 22.10.2022 20:05

Ааа, я думаю, что @john-rotenstein отвечает на вопрос

Ebi 23.10.2022 00:21

зачем нам указывать подсети в конфигурации ALB?

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

Ответ принят как подходящий

Application Load Balancer работает в инфраструктуре Amazon EC2. Думайте об этом как об инстансе Amazon EC2 с предварительно загруженным программным обеспечением, но на самом деле вы не видите инстанс EC2 в своей учетной записи.

Вместо этого вы увидите сетевые интерфейсы, через которые Load Balancer подключается к сети.

Трафик будет поступать в вашу сеть через интернет-шлюз, а затем направляться внутри VPC к балансировщику нагрузки. Затем балансировщик нагрузки определит цель для получения трафика и отправит запрос через сетевой интерфейс на ресурс в VPC.

Когда такой трафик проходит через VPC, на него распространяются обычные группы безопасности и списки контроля доступа к сети (NACL). Частные IP-адреса будут назначены для каждого сетевого интерфейса, используемого балансировщиком нагрузки.

Экземпляр Load Balancer работает в нескольких зонах доступности. Если в одной зоне доступности произошел сбой, экземпляр Load Balancer в остальных зонах доступности продолжит работу. Вот почему балансировщику нагрузки требуется подключение к VPC в нескольких подсетях.

Итог: хотя обычно вы можете думать о балансировщике нагрузки как о «службе черного ящика», это все же просто какое-то программное обеспечение, работающее на виртуальном компьютере, которому требуется логическое подключение к VPC, и оно подчиняется всем правилам сети внутри VPC.

Если я вас правильно понял, вы говорите, что когда я выбираю несколько AZ + подсети, в каждой AZ-подсети будет выделен экземпляр балансировщика нагрузки для обеспечения высокой доступности. Но технически, если я выберу, например, зоны доступности 1 и 2 и свяжу этот балансировщик нагрузки с целевой группой с одной целью в зоне доступности 3, балансировщик нагрузки не будет направлять трафик. Таким образом, выбор зон доступности как-то связан с бэкэнд-целями.

YoavKlein 25.10.2022 11:59

Это кажется правильным. Из Как работает Elastic Load Balancing: «Когда вы включаете зону доступности для балансировщика нагрузки, Elastic Load Balancing создает узел балансировщика нагрузки в зоне доступности. Если вы регистрируете цели в зоне доступности, но не включаете зону доступности , эти зарегистрированные цели не получают трафик."

John Rotenstein 25.10.2022 13:32

Однако я не понимаю, почему экземпляр балансировщика нагрузки может направлять трафик только к целям в своей собственной зоне доступности?

YoavKlein 26.10.2022 11:28

@yoavklein, потому что балансировщик нагрузки может маршрутизировать трафик только в зонах доступности, в которых он создал сетевой интерфейс.

Foo 26.10.2022 12:31

Интересно, что Балансировщики сетевой нагрузки, похоже, способны доставлять межзональный трафик: «По умолчанию каждый узел балансировщика нагрузки распределяет трафик между зарегистрированными целями только в своей зоне доступности. Если вы включите балансировку нагрузки между зонами, каждый узел балансировщика нагрузки распределяет трафик между зарегистрированными целями во всех включенных зонах доступности».

John Rotenstein 26.10.2022 12:40

@JohnRotenstein, на самом деле кажется, что балансировщики нагрузки приложений имеют межзональную балансировку нагрузки по умолчанию: в балансировщиках нагрузки приложений межзональная балансировка нагрузки всегда включена. При использовании балансировщиков сетевой нагрузки и балансировщиков нагрузки шлюза балансировка нагрузки между зонами отключена по умолчанию. После создания балансировщика нагрузки вы можете в любое время включить или отключить балансировку нагрузки между зонами.

YoavKlein 31.10.2022 13:19

Балансировка нагрузки между зонами позволит направлять трафик в другую зону, но цитата «Как работает эластичная балансировка нагрузки» предполагает, что цели будут получать трафик только в зонах, которые «включены». Я предлагаю вам провести некоторый мониторинг, чтобы убедиться, что все экземпляры получают трафик.

John Rotenstein 31.10.2022 21:44

@JohnRotenstein, последний вопрос, если хотите: есть ли у меня причина не включать балансировщик нагрузки во всех зонах доступности? Есть ли какое-то рассмотрение стоимости?

YoavKlein 07.11.2022 07:55

О, интересный вопрос! Цена , похоже, полностью связана с количеством подключений и обработанных байтов. Таким образом, больше AZ, кажется, не стоит больше. Однако вы можете захотеть добавить его только в зоны доступности, где у вас есть цели, потому что балансировщик нагрузки может отправлять трафик в зону доступности, который затем отправляется в цель в другой зоне доступности. За трафик между зонами доступности взимается плата в размере 1 цента/ГБ, поэтому это может стоить денег без особой выгоды. Я не уверен, что балансировщик нагрузки достаточно умен, чтобы избежать такого поведения, но выбор за вами!

John Rotenstein 07.11.2022 08:05

Другие вопросы по теме