Лучшая практика AWS: у меня будет шлюз NAT в каждом AZ?
Поскольку у шлюза NAT есть избыточность только в пределах одного AZ, если я хочу иметь открытую / частную пару подсетей в каждом AZ с целью резервирования нескольких AZ, у меня должен быть шлюз NAT в каждом AZ, не так ли?
В противном случае, если у меня есть только один NAT, если AZ отключается, все подсети во всех AZ отключаются, что наносит ущерб цели развертывания нескольких AZ.
Я прав или нет?
4 ответа
Да, в идеале вы должны иметь один шлюз NAT на зону доступности (AZ).
AWS документирует этот совет в разделе Сравнение экземпляров NAT и шлюзов NAT. Один NAT-шлюз в одном AZ имеет избыточность только внутри этого AZ, поэтому, если бы были зональные проблемы, то экземпляры в других AZ не имели бы пути к Интернету.
Из официального документа AWS по шлюзу NAT:
Если у вас есть ресурсы в нескольких зонах доступности и они используют один шлюз NAT, в случае, если зона доступности шлюза NAT не работает, ресурсы в других зонах доступности теряют доступ в Интернет. Чтобы создать независимую от зоны доступности архитектуру, создайте шлюз NAT. в каждой зоне доступности и настройте маршрутизацию, чтобы ресурсы использовали шлюз NAT в одной и той же зоне доступности.
Шлюз NAT обеспечивает исходящее подключение к Интернету для частной подсети. Важно отметить, что вам необходимо создать шлюз NAT для каждой зоны доступности, в которой вы создали частные подсети, для достижения высокой доступности.
Описанная сетевая архитектура, состоящая из общедоступных подсетей, частных подсетей и шлюзов HA NAT.
Соображения
- Если минимизация затрат имеет важное значение, базовые затраты в размере 32,00 долларов США в месяц на шлюз NAT могут стать препятствием. При использовании трех зон доступности вы будете платить 96,00 долларов в месяц за три шлюза NAT.
- Шлюз NAT также увеличивает затраты на исходящий трафик. Вы должны заплатить надбавку в размере 0,045 доллара США за гигабайт, передаваемый из частной подсети в Интернет. Это увеличивает стоимость исходящего трафика на 50%.
Дополнительные очки!
- Terraform Infra as Code модуль простой пример VPC
...
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
single_nat_gateway = false # to get 1 NGW x AZ
...
Ссылка: https://cloudonaut.io/advanved-aws-networking-pitfalls-that-you-should-avoid/
Это вопрос 3-х факторов:
- Требования и последствия резервирования.
- Если в определенной зоне доступности произойдет сбой в работе службы NAT, насколько сильное воздействие может выдержать ваше приложение?
- Какова вероятность того, что сбой в работе более чем одной зоны доступности окажется чем-то иным, чем сбой, затронувший весь регион?
- Резервные NATGW не полностью изолируют вас от перебоев в обслуживании. Когда NATGW становится недоступным, все соединения через этот NATGW будут прекращены. Аналогичным образом, когда NATGW вернется, соединения будут снова разорваны, поскольку базовая маршрутизация изменится обратно.
- Стоимость за NATGW.
- Каждый NATGW в настоящее время стоит около 32,40 долларов США в месяц.
- Стоимость полосы пропускания внутри зоны доступности.
- Если вам необходимо вывести трафик через NATGW, который не находится в той же зоне доступности, вы понесете затраты на пропускную способность внутри зоны доступности в размере 0,01 доллара США/ГБ в дополнение к пропускной способности NATGW в размере 0,045 доллара США/ГБ.
Зависит от вашего варианта использования.
Прежде чем создавать NAT GTW в каждой зоне доступности, я бы рассмотрел конкретный вариант использования и объем используемого трафика.
Я предлагаю прочитать этот замечательный ответ SO :
Экземпляры Amazon EC2 в частных подсетях могут использовать шлюз NAT следующим образом:
- NAT Gateway запускается в публичной подсети в том же VPC.
- Таблица маршрутов для частных подсетей требует дополнительной записи, которая направляет весь интернет-трафик (0.0.0.0/0) на шлюз NAT.
...
(*) Основной и тривиальный вариант использования заключается в том, что для среды DEV вам не нужны 3 NAT GTW. Можно даже запускать в одной зоне доступности, потому что доступность более актуальна для Production (и для Staging, если решено, что они должны быть зеркалом друг друга).