Thank you for reading this post, don't forget to subscribe!
Не имеет значения, сколько у вас серверов и каких - без сети они всё равно бесполезны. В этом занятии мы научимся создавать виртуальные частные облака и разворачивать сетевую инфраструктуру для многослойного проекта.
Для начала перейдём в AWS VPC - Virtual Private Cloud
Выберем вкладку Your VPCs и начнём создание нового:
В настройках подсети, в первую очередь, выберем название и блок айпи адресов. Здесь я использовал диапазон 10.42.0.0/16, для упрощения задачи предлагаю вам использовать его же. Для этого упражнения IPv6 нам не понадобятся, не включаем. В тэги не забудьте добавить название проекта - я использую AppDemo, а вы можете выбрать своё.
Готово
Для удобства работы с ресурсами выберите новую сеть в окне Filter by VPC слева сверху.
Сеть есть, будем продолжать! Перейдём в подсети (subnets) и создадим новые:
Для начала, привяжем их к нашей новой VPC
Затем зададим следующие параметры: название (вида ПРОЕКТ AZ1 Public), зону доступности (а), тэги и блок айпи адресов. Для упрощения демонстрации я использовал диапазон /24, если вы точно понимаете, что делаете, то можете взять более подходящий к реальной ситуации диапазон на ваше усмотрение (например /20). Таким образом, для первой подсети я использую адреса 10.42.0.0/24.
Сразу же создам и вторую подсеть для этой зоны, на этот раз уже приватную. Она будет выглядеть точно так же, кроме имени (Private) и диапазона -10.42.1.0/24
так же создадим ещё две подсети - они будут крайне похожи на первые две, но будут использовать вторую зону доступности региона (b) и другие диапазоны адресов: 10.42.2.0/24 и 10.42.3.0/24.
Подсети у нас есть, даже инстансы в них можно создать, но толку от этого пока немного - без доступа в интернет ничего не заработает. Для этого нам понадобится internet gateway, давайте создадим такой. Перейдём в Internet Gateways и запустим создание:
Сложной задачей это не назовёшь - по сути, мы только имя да тэги можем задать.
Теперь надо присоединить его к нашему VPC:
Выберите наш VPC и продолжим - Attach Internet Gateway
Теперь настроим автоматическую выдачу публичных айпи-адресов тем серверам, которые будут запущены в публичной подсети. Выберем первую публичную подсеть в списке подсетей
И, в списке действий, выберем Modify auto-assign IP settings.
Включим галку Enable auto-assign и сохраним изменения.
Так же включим эту настройку для второй публичной подсети.
Теперь настроим таблицы маршрутизации - без соответствующих маршрутов наш интернет-шлюз всё равно останется недоступен, а зачем мы его тогда создавали? Перейдём в Route Tables и создадим новую таблицу.
Эта таблица предназначена для публичных подсетей нашего облака. Так её и назовём: AppDemo Public RT. Обязательно выберите нужный VPC (не дефолтный, а новый)
Теперь подредактируем маршруты:
Добавьте новый: Он должен идти ПОСЛЕ локального и захватывать все адреса назначения (0.0.0.0/0). Точкой назначения выберите наш новый интернет-шлюз. Затем сохраните маршруты.
Сравните вашу новую таблицу маршрутов с приведённой на картинке отличаться должен только айди шлюза.
Таблица готова, но ей, увы, никто не пользуется. Добавим её подсетям, которым нужен доступ к интернет-шлюзу (то есть публичным). При назначении таблицы, она “вытеснит” дефолтную, заместив её.
Выберите в этом окне обе публичные (но не приватные) сети и сохраните изменения.
Ну что, публичные сети готовы! Давайте добавим пару серверов: перейдите в службу EC2.
Прежде чем добавлять сервера, придётся добавить группы безопасности - это упростит нам работу с серверами.
Создайте группу для веб-серверов доступных снаружи:
Их правила предельно просты: HTTP откуда угодно. Для упрощения задачи добавим также SSH и ICMP, пригодятся. Разумеется, в реальной жизни SSH доступ должен быть ограничен, но пока оставим так.
Затем добавим группу для серверов бэкенда, расположенных в приватной подсети.
Здесь оформим правила по другому - весь трафик, но только из первой группы безопасности (в текущем пример - AppDemo Web). Исходящий трафик в обоих случаях разрешим куда угодно.
Создайте kep pair, формата - pem, если его ещё нет. Используйте его при создании инстансов.
Теперь можно и сервера добавить, всё готово.
Выберем Amazon Linux 2
и T2.Micro
Поменяем настройки: во-первых, выберем правильную сеть и подсеть (AZ1 Public)
Во-вторых, добавим user data:
1 2 3 4 5 |
#!/bin/bash amazon-linux-extras install -y nginx1 systemctl start nginx echo "Hello from `hostname`" > /usr/share/nginx/html/index.html |
Ну и группу безопасности, конечно.
Про тэги тоже не забываем!
И key pair нужный, который создавали мы.
Пока этот инстанс создаётся, запустим следующий:
Выделив первый, нажмите на Actions - Image and templates - launch more like this
Создадим ещё один сервер со схожими настройками, но разместите его в другой публичной подсети (чтобы эти два веб-сервера были размещены в разных зонах доступности). Имя тоже придётся поменять, а вот остальное будет примерно таким же.
Откройте в браузере публичные айпи-адреса этих серверов - они оба должны вас приветствовать радостным “Hello!” - когда запустятся, конечно
Чтобы завершить эту часть работы, убедитесь, что вы можете подключиться к ним по SSH.
NAT Gateway
ничего не будет работать если сервера из приватной подсети не смогут подключится к интернету - ведь и им бывает нужно обновление скачать. Для того, чтобы помочь им это сделать, мы добавим два NAT Gateway - по одному в каждую публичную подсеть. В принципе, хватило бы и одного, но тогда при разрыве сетевого соединения между зонами доступности вторая зона (без NAT) осталась бы без интернета.
Итак, начнём: перейдём в VPC, NAT Gateways и приступим к созданию.
Назначим имя, подсеть (AZ1 Public) и запросим Elastic IP - без него NAT шлюз не заработает.
Подключение NAT шлюза займёт время
поднимем ещё один NAT шлюз в другой публичной сети
Как и в случае с обычными интернет-шлюзами, пользоваться сервера ими не смогут, пока мы не расскажем, как их найти, а значит - пришло время таблиц маршрутизации, да не одной, как в прошлый раз, а сразу двух - по одной на частную подсеть.
Создадим первую из них:
Назовём AppDemo Private AZ1 RT и привяжем к VPC
Отредактируем таблицу маршрутизации
И добавим новый маршрут: идея точно такая же, весь трафик (0.0.0.0/0), который не попадает в local, должен идти в NAT Gateway этой подсети (именно этой, не соседней)
Сохранили изменения? Тогда давайте привяжем эту таблицу к соответствующей приватной подсети
Выберите приватную сеть соответствующей зоны доступности:
Для завершения настройки нам придётся повторить эти действия, создав вторую приватную таблицу маршрутизации, добавив новый маршрут и подключив её к оставшейся подсети. Обратите внимание - и NAT-шлюз, и подсеть должны быть из второй зоны доступности.
В конце убедитесь, что ваш список ваших таблиц маршрутов выглядит примерно так же:
- Публичная RT привязана к обеим публичным подсетям
- Приватная RT AZ1 привязана к приватной подсети AZ1
- Приватная RT AZ2 привязана к приватной подсети AZ2
Теперь всё готово и можно запустить уже и бэкенд-сервера:
Важно: запустите его в нужной подсети (Private AZ1)
Задайте нужные тэги:
Секьюрити группы:
И key pair нужный, который создавали мы.
И подключите секьюрити группу бэкенда.
создайте сервер для второй приватной сети, используя те же настройки (кроме самой подсети и названия, они должны быть AZ2 Private)
Для проверки настроек, давайте выполним два действия:
Залогинившись на публичный сервер (как в прошлой части), выполните ping используя приватные адреса серверов бэкенда.
Если всё прошло благополучно и сетевое соединение есть, вторым шагом завершаем проверку и запрашиваем HTTP соединение на эти сервера посредством curl
Ответ вида “Hello from ip-10-42-…” однозначно говорит нам что всё ок