Настройка доступа в интернет через NAT Gateway из двух VPC

В этом сценарии описано, как развернуть виртуальную инфраструктуру с двумя или более VPC, среди которых один VPC — центральный с NAT-шлюзом для доступа в интернет, а другие — с сервисами, связанными с центральным VPC с помощью VPC peering connection. Такая схема может использоваться для публикации множества сервисов с публичными адресами в интернет.

../../_images/schm__recommendations__adv__network-api__two-vpc.svg

Для связи VPC между собой используется VPC peering connection. Весь трафик по умолчанию из vpc-nat-article-2 попадает в vpc-nat-article-1, где происходит SNAT-трансляция source-адресов виртуальных машин ecs-demo-3 и ecs-demo-4, а также DNAT-трансляция публичных адресов EIP для доступа к сервисам, развернутым в ВМ ecs-demo-3 и ecs-demo-4 из публичной сети.

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

  1. Перед началом работы выполните сценарий с одним VPC.

  2. Создайте вторую сеть vpc-nat-article-2 с тем же CIDR-блоком, что и vpc-nat-article-1.

  3. В сети vpc-nat-article-2 создайте две подсети — 192.168.3.0/24 и 192.168.4.0/24.

  4. В консоли Advanced создайте две виртуальные машины ecs-demo-3 и ecs-demo-4 с ОС Linux в подсетях subnet-servers-3 и subnet-servers-4 соответственно без назначения EIP.

  5. С помощью Postman создайте VPC peering connection для связи двух VPC:

    https : // vpc . ru - moscow - 1. hc . sbercloud . ru / v2 .0 / vpc / peerings

    В теле запроса укажите параметры соединения:

    {
    "peering" :{
    "name" : "article1-2" ,
    "request_vpc_info" :{
    "vpc_id" : "22fc4e0a-2cce-4f8c-9838-633f9da5acc2"
    },
    "accept_vpc_info" :{
    "vpc_id" : "7753e2db-7b2d-4c50-9ba3-aad204415037"
    }
    }
    }

    Где vpc_id — ID двух VPC, которые нужно соединить.

    Для создания соединения VPC peering между VPC в разных IAM-проектах нужно получить согласование.

  6. Чтобы в дальнейшем маршрутизировать весь трафик в сторону NAT-шлюза в сети vpc-nat-article-1, в таблице маршрутизации по умолчанию создайте статический маршрут в сторону vpc-nat-article-1:

    https : // vpc . ru - moscow - 1. hc . sbercloud . ru / v2 .0 / vpc / routes

    В теле запроса укажите параметры маршрута:

    {
    "route" :{
    "type" : "peering" ,
    "nexthop" : "71c7b007-f0f9-476c-b2d1-64883066bd8d" ,
    "destination" : "0.0.0.0/0" ,
    "vpc_id" : "22fc4e0a-2cce-4f8c-9838-633f9da5acc2"
    }
    }

    Где:

    • type — тип маршрута.

    • next-hop — ID соединения VPC peering.

    • destination — все возможные source-подсети.

    • vpc_id — ID VPC, в котором создается маршрут.

  7. Создайте маршрут из сети vpc-nat-article-1 в сторону vpc-nat-article-2 для подсетей 192.168.3.0/24 и 192.168.4.0/24 с телом запроса:

    {
    "route" :{
    "type" : "peering" ,
    "nexthop" : "71c7b007-f0f9-476c-b2d1-64883066bd8d" ,
    "destination" : "192.168.3.0/24" ,
    "vpc_id" : "7753e2db-7b2d-4c50-9ba3-aad204415037"
    }
    }
  8. Для доступа ВМ из vpc-nat-article-2 в интернет добавьте SNAT-правило:

    https : // nat . ru - moscow - 1. hc . sbercloud . ru / v2 / { project_id } / snat_rules

    В теле запроса укажите:

    {
    "snat_rule" :{
    "nat_gateway_id" : "c9997f19-217b-44de-b5e2-72fd6f1ad153" ,
    "cidr" : "192.168.3.0/24" ,
    "source_type" : 1 ,
    "floating_ip_id" : "2c5863da-53ce-4e88-b3b1-cb88b1104160" ,
    "description" : "subnet-servers-3 snat rule"
    }
    }

    Где:

    • nat_gateway_id — ID NAT-шлюза, для которого нужно создать SNAT-правило.

    • network_id — ID подсети NAT-шлюза.

    • floating_ip_id — ID EIP, который будет использоваться для NAT-трансляций.

    • source_type — 1 подразумевает сценарий DirectConnect и позволяет указать произвольный CIDR-блок из любого VPC вместо network_id, которые есть только в том же VPC, где развернут NAT-шлюз.

  9. В консоли Advanced подключитесь к ВМ ecs-demo-3 и проверьте доступ в интернет:

    ping cloud.ru
  10. Чтобы сделать ВМ ecs-demo-3 доступной из интернета, с помощью Postman создайте DNAT-правило:

    https : // nat . ru - moscow - 1. hc . sbercloud . ru / v2 / { project_id } / dnat_rules

    В теле запроса укажите:

    {
    "dnat_rule" :{
    "floating_ip_id" : "6ebc0a8f-fee1-4020-be34-336ab1221c1f" ,
    "nat_gateway_id" : "c9997f19-217b-44de-b5e2-72fd6f1ad153" ,
    "private_ip" : "192.168.3.25" ,
    "internal_service_port" : 80 ,
    "protocol" : "tcp" ,
    "external_service_port" : 8090 ,
    "description" : "DNAT rule to access web on ecs-demo-3"
    }
    }

    Где:

    • floating_ip_id — ID EIP. В этом примере используется новый EIP.

    • nat_gateway_id — ID NAT-шлюза.

    • private_ip — приватный IP-адрес виртуальной машины, к которой нужен доступ из интернета.

    • internal_service_port — порт, на котором развернут сервис на машине.

    • protocol — транспортный протокол, для которого выполняется трансляция.

    • external_service_port — внешний порт, по которому производится обращение для получения доступа к сервису.

  11. Чтобы проверить работу DNAT-правила, в консоли Advanced подключитесь к ВМ ecs-demo-3 и установите nginx на ecs-demo-3:

    apt-get install -y nginx
  12. Проверьте статус nginx:

    systemctl status nginx.service
  13. Чтобы проверить доступность ВМ, в браузере перейдите по IP-адресу виртуальной машины с указанием порта 8090:

../../_images/recommendations__adv__network-api.png

Соединение установлено. Правила настроены корректно.

Evolution