Соединение нескольких VPC#

Если вам необходимо соединить два и более VPC, то вы можете сделать это с помощью транзитного шлюза. В приводимом примере показано, как соединить два VPC, vpc-1 (10.0.0.0/16) и vpc-2 (172.31.0.0/16), которые находятся в одном проекте. При необходимости вы можете подключить к транзитному шлюзу VPC из других проектов, в том числе из проектов других компаний, предоставив доступ к шлюзу.

Общая схема действий следующая:

Пример прохождения трафика#

В данном примере предполагается, что в vpc-1 запущен экземпляр с адресом 10.0.0.4 в подсети 10.0.0.0/20 в зоне доступности az-1, а в vpc-2 запущен экземпляр с адресом 172.31.16.4 в подсети 172.31.16.0/20 в зоне доступности az-2. И с экземпляра 10.0.0.4 выполняется ping экземпляра 172.31.16.4. Кроме того, мы предполагаем, что подсети 10.0.0.0/20 назначена основная таблица vpc-rtb-1 для vpc-1, а подсети 172.31.16.0/20 — основная таблица vpc-rtb-2 для vpc-2.

  1. Экземпляр 10.0.0.4 отправляет эхо-запрос ICMP на адрес 172.31.16.4 на виртуальный маршрутизатор vpc-1.

  2. Виртуальный маршрутизатор vpc-1 проверяет адрес назначения по связанной с подсетью таблице маршрутизации vpc-rtb-1 и направляет пакет на виртуальный интерфейс подключения vpc-1 к транзитному шлюзу в зоне доступности az-1.

    ../../../../_images/echo-step-2.png

    Маршрутизатор vpc-1 получает пакет, предназначенный для 172.31.16.4. В соответствии с таблицей маршрутизации он отправляет его на подключение транзитного шлюза к vpc-1.#

  3. Транзитный шлюз в соответствии со своей таблицей маршрутизации направляет пакет на виртуальный интерфейс подключения к vpc-2 в той же зоне доступности — az-1.

    ../../../../_images/echo-step-3.png

    Транзитный шлюз получает пакет, предназначенный для 172.31.16.4, от подключения к vpc-1. В соответствии со своей таблицей маршрутизации он отправляет его на подключение к vpc-2.#

  4. Виртуальный маршрутизатор vpc-2 отправляет поступивший пакет от транзитного шлюза в подсеть 172.31.16.0 в зоне доступности az-2, где находится экземпляр 172.31.16.4.

    ../../../../_images/echo-step-4.png

    Маршрутизатор VPC-2 получает пакет, предназначенный экземпляру, находящемуся в подключённой к нему подсети.#

  5. Пакет доставлен.

Эхо-пакет проделывает схожий путь обратно от экземпляра 172.31.16.4 до экземпляра 10.0.0.4, однако основная часть маршрута — до стыковочной подсети в vpc-1 — пролегает внутри зоны доступности az-2.

../../../../_images/echo-backward.png

Создайте транзитный шлюз#

  1. Перейдите в раздел Сетевые соединения Транзитные шлюзы и откройте одноимённый подраздел.

  2. Нажмите Создать.

  3. Оставьте без изменений опции Создать таблицу маршрутизации и назначить основной для:

    • подключений;

    • распространения маршрутов.

    При их выборе всем новым подключениям назначается созданная основная таблица маршрутизации и включается распространение маршрутов из этих подключений. Это освобождает от необходимости вручную задавать статические маршруты к каждому VPC в таблицах маршрутизации транзитного шлюза.

  4. Нажмите Создать для завершения создания шлюза.

Создайте стыковочные подсети#

В каждой из зон доступности рекомендуется создать стыковочную подсеть (attachment subnet), к которой будет подключаться транзитный шлюз. Если подсеть с экземплярами подключить напрямую к транзитному шлюзу, то трафик из шлюза будет поступать к экземплярам, минуя Network ACL. При наличии стыковочной подсети трафик между транзитным шлюзом и остальными подсетями в этом VPC всегда проходит через виртуальный маршрутизатор VPC и, как следствие, фильтруется Network ACL.

Примечание

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

В стыковочной подсети не рекомендуется размещать другие ресурсы. Она служит только для связи с транзитным шлюзом, поэтому в целях экономии адресного пространства стыковочной подсети можно выделить IP-подсеть наименьшего возможного размера (/28).

  1. Перейдите в раздел Виртуальные машины Сеть Подсети и нажмите Создать.

  2. В диалоге создания подсети задайте следующие параметры:

    • vpc-1.

    • (Опционально) Тег Name.

    • Адрес подсети 10.0.255.0/28.

    • Зону доступности, к которой необходимо подключить транзитный шлюз.

  3. Если необходимо назначить дополнительные теги, перейдите на следующий шаг, нажав Добавить теги.

  4. После задания всех необходимых параметров нажмите Создать подсеть.

Аналогично создайте подсети 10.0.255.16/28 и 10.0.255.32/28 в остальных зонах доступности (при наличии в регионе) в vpc-1 и подсети 172.31.255.0/28, 172.31.255.16/28 и 172.31.255.32/28 в трёх зонах доступности (при наличии в регионе) в vpc-2. В этом примере значение 255 в третьем октете адресов стыковочных подсетей выбрано так, чтобы адресное пространство VPC оставалось целостным и непрерывным и было доступно для создания подсетей, в которых будут размещаться экземпляры.

Вы можете выбрать, в скольких зонах доступности создавать подсети — одной, двух или трёх. Однако для продуктивных инфраструктур рекомендуем заранее создавать стыковочные подсети во всех зонах доступности, так как потом изменить этот выбор будет невозможно — инфраструктуру транзитного шлюза придётся создавать с нуля заново.

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

Создайте подключения#

Подключения необходимо создать в каждом из соединяемых VPC (см. подробнее о подключении транзитных шлюзов).

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

../../../../_images/AttachmentSubnets.png

В этом примере используются подключения в двух зонах доступности.#

При этом обмен трафиком возможен между любыми подсетями в этих VPC, не только непосредственно подключёнными к транзитному шлюзу — необходимо лишь задать маршруты через транзитный шлюз в таблицах маршрутизации этих подсетей.

Примечание

После создания к подключению нельзя привязать другие подсети.

  1. Перейдите в раздел Сетевые соединения Транзитные шлюзы Подключения.

  2. Нажмите Создать.

  3. В открывшемся окне укажите следующие параметры:

    • Тег Name для идентификации подключения, например vpc-1 (опционально).

    • Созданный транзитный шлюз.

    • vpc-1.

    • Стыковочные подсети в vpc-1, к которым будет подключён транзитный шлюз:

      • 10.0.255.0/28;

      • 10.0.255.16/28.

      В каждой из этих подсетей будет создан виртуальный интерфейс подключения.

  4. Нажмите Создать для завершения создания подключения.

Аналогичные подключения необходимо создать для vpc-2.

Задайте маршруты в таблице маршрутизации транзитного шлюза#

Если вы не отключали опцию Создать таблицу маршрутизации и назначить основной для: распространения маршрутов у основной таблицы маршрутизации транзитного шлюза, то маршруты в vpc-1 и vpc-2 будут установлены в неё автоматически. В противном случае для каждого подключаемого VPC необходимо задать маршрут к нему через соответствующие подключения:

../../../../_images/TgwRoutes.png
  1. Перейдите в раздел Сетевые соединения Транзитные шлюзы Таблицы маршрутизации.

  2. Выберите в таблице ресурсов таблицу маршрутизации созданного транзитного шлюза и нажмите на идентификатор таблицы для перехода на её страницу.

  3. На вкладке Маршруты нажмите Добавить.

  4. В открывшемся окне:

    • В поле Сеть укажите сеть, которая соответствует vpc-1 (10.0.0.0/16). Вы можете указать CIDR-блок любой подсети в vpc-1, если трафик необходимо пересылать в конкретную подсеть.

    • Подключение, через которое vpc-1 подключается к транзитному шлюзу.

  5. Нажмите Создать.

  6. Повторите шаги 3-5 для задания маршрута к vpc-2.

Задайте маршруты в таблице маршрутизации VPC#

В каждом VPC необходимо задать маршрут до другого VPC через транзитный шлюз. Ниже предполагается, что всем подсетям в VPC, из которых надо передавать трафик в другое VPC, назначена основная таблица маршрутизации этого VPC. Если какой-либо подсети назначена другая таблица маршрутизации, то, чтобы трафик из неё передавался в другое VPC, необходимо также задать в ней маршрут через транзитный шлюз.

../../../../_images/RoutesToVpc.png
  1. Перейдите в раздел Виртуальные машины Сеть Таблицы маршрутизации.

  2. Выберите в таблице ресурсов основную таблицу маршрутизации vpc-1 и нажмите на идентификатор таблицы для перехода на её страницу.

  3. Перейдите на вкладку Маршруты и нажмите Добавить.

  4. В открывшемся окне:

    • В поле Сеть укажите целевую сеть в vpc-2. В данном примере это сеть 172.31.0.0/16, соответствующая vpc-2.

    • В поле Тип шлюза выберите Транзитный шлюз.

    • В поле Шлюз выберите созданный транзитный шлюз.

  5. Нажмите Добавить для создания маршрута.

  6. Повторите шаги 2-4 для vpc-2.

Разрешите необходимый трафик#

Чтобы экземпляры виртуальных машин в разных VPC могли обмениваться трафиком друг с другом, его необходимо разрешить в группах безопасности, которые назначены этим экземплярам.

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

  1. Перейдите в раздел Виртуальные машины Безопасность Группы безопасности.

  2. В таблице ресурсов найдите группу безопасности по умолчанию для vpc-1 и нажмите на её ID для перехода на страницу группы.

  3. На вкладке Входящие правила нажмите Добавить.

  4. В открывшемся окне:

    • В поле Протокол выберите ICMP.

    • Для опции Разрешить доступ выберите Из сети.

    • В поле Сеть введите подсеть в vpc-2, в которой находится экземпляр из vpc-2, например, 172.31.16.0/20 как в примере прохождения трафика. Либо укажите CIDR-блок для всего vpc-2, в данном случае 172.31.0.0/16.

  5. Повторите шаги 2-4 для vpc-2.

Проверьте, что связь есть. На экземпляре в vpc-2 запустите ping экземпляра в vpc-1 по внутреннему IP-адресу. Ту же проверку выполните для экземпляра в vpc-1.