AWS: VPC — введение, примеры

Автор: | 05/13/2016
 

aws-logo-square-02AWS VPC (Virtual Private Cloud) — виртуальная сеть, напоминающая традиционные сети, с которыми вы могли сталкиваться в дата-центрах или офисах, но с преимуществами, которые предлагает масштабируемая инфраструктура Amazon.

Общие понятия

VPC и подсети

VPC — это виртуальная сеть, выделенная вашему аккаунту и она отделена от всех других сетей в облаке AWS.

В этой сети вы можете запускать ваши сервисы AWS, такие как инстансы EC2 машин.

Вы имеете полный контроль для вашей сетью, и можете:

  • выбирать диапазон используемых IP-адресов;
  • создавать подсети;
  • настраивать маршрутизацию;
  • создавать сетевые шлюзы;
  • создавать Security groups и NACL (Network Access Control List).

Больше о убличных и приватных сетях — на странице Your VPC with Subnets.

Доступ в Интернет

Вы имеете полны контрль над тем, как сервисы в вашей VPC получают доступ к ресурсам вне этой сети.

Если у вас есть Default VPC (которая создаётся по умолчанию) — в неё включен сетевой шлюз (Internet Gateway), и каждая сеть по умолчанию является публичной сетью. Это значит, что каждый инстанс, запущенный в этой сети, получает приватный и публичный IP адреса, и может получать доступ в Интернет через Internet Gateway:

default-vpc-diagram

По умолчанию — каждый инстанс, запущенный не в сети по умолчанию (т.е. — из созданной вами VPC) получает приватный IP, но не публичный (если вы явно не указали другого при создании). Такие инстансы могут получать доступ друг к другу — но не в Интернет:

nondefault-vpc-diagram

Больше о приватных и публичных IP — на странице Public and Private IP Addresses.

Вы можете открыть доступ в Интернет для машин в такой сети, подключив к ней Internet Gateway и привязав Elastic IP к инстансу в этой сети:

internet-gateway-diagram

Больше об Internet Gateways — на странице Internet Gateways.

Либо — вы можете разрешить вашим машинам в VPC инициализирвоать исходящие соединения в Инетнет — но закрыть нежелательный доступ из него с помощью NAT-устройства.

NAT транслирует все приватные IP в один публичный. К самому NAT-устройсву привязывается публичный Elastic IP, и оно подключается к Инетрнету через Internet Gateway.

Подробнее про NATтут>>>.

Далее — мы вручную (без использования AWS VPC Wizard) создадим AWS VPC, подсеть в ней и добавим пару инстансов EC2.

Создание VPC

Переходим в Панель управления > VPC, и жмём Create VPC:

aws_vpc_1

Создаём сеть:

aws_vpc_2

  • Name tag: имя сети;
  • CIDR block: блок IP адресов, удобная утилита есть тут>>>;
  • Tenancy: запускать инстансы в этой сети на выделенных (dedicated) или общих серверах, подробнее — тут>>>.

Блок 10.1.0.1/16 — это наша «базовая» сеть VPC.

Далее — создаём в ней подсеть. Переходим в Subnets > Create subnet:

aws_vpc_4

  • Name tag: имя подсети;
  • VPC: «базовая» сеть, в которой будет создана новая подсеть;
  • Availability Zone: каждая VPC привязывается к определённому региону и реурсам в этом регионе, но при этом — доступна из любой «зоны доступности» (дата-центра) в этом регионе;
  • CIDR block: блок IP адресов, должен входить в блок адресов самой VPC.

Добавляем Internet Gateway, через который ресурсы в этой VPC и созданной подсети смогут «ходить в Интернет».

Переходим в Internet Gateways > Create Internet Gateway:

aws_vpc_5

aws_vpc_6

После создания — IGW будет в состоянии detached.

Выделяем шлюз, и жмём Attache to VPC:

aws_vpc_7

Теперь — у сети 10.1.0.1/16 имеется подключенный шлюз, но созданная подсеть — о нём не знает:

aws_vpc_8

Переходим в Route Tables, и добавляем новый маршрут для сети 0.0.0.0/0, т.е. весь интернет, через созданный ранее шлюз:

aws_vpc_9

aws_vpc_10

Проверяем маршрутизацию созданной подсети:

aws_vpc_11

Создание EC2

Переходим в EC2 > Launch Instance.

В настройках создаваемого инстанса — выбираем нашу подсеть:

aws_vpc_12

В настройках интерфейсов — можно указать IP из подсети вручную:

aws_vpc_13

После создания машины — её настройки выглядят так:

aws_vpc_14

У машины имеется один интерфейс — eth0, с IP 10.1.1.128, но нет публичного IP и, соответсвенно, доступа «снаружи».

Переходим в Elastic IPs > Allocate new Adress и добавляем Elastic IP.

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

Подключаем к интерфейсу:

aws_vpc_15

aws_vpc_16

Возвращаемся к EC2 машине:

aws_vpc_17

Теперь у ней есть доступ из мира.

Аналогично — создаём вторую машину, указав IP из подсети вручную, но без EIP:

aws_vpc_18

Теперь имеется два инстанса EC2 в одной подсети:

aws_vpc_19

В настройках Security Group разрешаем ICMP:

aws_vpc_20

aws_vpc_21

Подключаемся к первой созданной машине:

$ ssh ubuntu@52.51.175.186 -i Temp/rtfm_vpc_tests_env_1.pem

И проверяем доступ ко второй машине:

$ ping 10.1.1.11
PING 10.1.1.11 (10.1.1.11) 56(84) bytes of data.
64 bytes from 10.1.1.11: icmp_seq=1 ttl=64 time=0.697 ms
64 bytes from 10.1.1.11: icmp_seq=2 ttl=64 time=0.460 ms
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    0      0        0 eth0
10.1.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0

Получить SSH ко второй машине теперь можно только с первой.

В целом — этого достаточно, что бы начать работу с AWS VPC.

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