1. Обзор
Cloud NAT — это мощный инструмент: с его помощью рабочие нагрузки Compute Engine и Google Kubernetes Engine (GKE) могут получать доступ к интернет-ресурсам масштабируемым и безопасным способом, не предоставляя работающим на них рабочим нагрузкам доступ извне с использованием внешних IP-адресов.
Облачная NAT имеет беспрокси-серверную архитектуру, реализуя NAT непосредственно на уровне Andromeda SDN. Таким образом, это не влияет на производительность вашей рабочей нагрузки и легко масштабируется для множества виртуальных машин, регионов и VPC.
Правила NAT — это расширение функции Cloud NAT. Функция правил NAT в Cloud NAT позволяет создавать правила доступа, определяющие, как Cloud NAT используется для подключения к Интернету. В настоящее время правила NAT поддерживают выбор исходного NAT-адреса на основе адреса назначения.
Без правил NAT виртуальная машина с включенным облачным NAT использует один и тот же набор IP-адресов NAT для доступа ко всем интернет-адресам.
Иногда в сценарии использования NAT требуется, чтобы Cloud NAT использовал разные исходные IP-адреса для определенных адресов назначения. Правило NAT определяет соответствие и соответствующее действие. После указания правил NAT пакет сопоставляется с каждым правилом NAT. Если правило совпадает, выполняется действие, соответствующее этому совпадению.
Для получения более подробной информации ознакомьтесь с разделом «Документация» о правилах NAT .
Что вы узнаете
- Как настроить шлюз Cloud NAT для подготовки к использованию правил NAT.
- Как создавать правила NAT с использованием языка выражений Common Expression Language (CEL).
- Как создать правила NAT и привязать их к шлюзу NAT.
- Как проверить правила NAT из экземпляра системы.
- Как обновить правила NAT-шлюза.
- Как удалить правила NAT и вернуться к поведению Cloud NAT по умолчанию.
Что вам понадобится
- Базовые знания Google Compute Engine.
- Базовые знания сетевых технологий и протокола TCP/IP.
- Базовые знания командной строки Unix/Linux.
- Полезно предварительно ознакомиться с основами работы с сетями в GCP, например, пройти лабораторную работу «Сети в Google Cloud» .
- Понимание основ облачного NAT.
2. Использование консоли Google Cloud и Cloud Shell
Для взаимодействия с GCP в ходе этой лабораторной работы мы будем использовать как консоль Google Cloud, так и Cloud Shell.
Консоль Google Cloud
Доступ к консоли Cloud Console можно получить по адресу https://console.cloud.google.com .

Настройка среды для самостоятельного обучения
- Войдите в Cloud Console и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это ваш личный идентификатор для этого проекта. При условии соблюдения установленных правил именования, вы можете использовать любое название по своему усмотрению и изменять его в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта.
- Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.
Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

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

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории можно выполнять с помощью обычного браузера.
3. Подготовка лаборатории
Для этой лабораторной работы вы будете использовать проект и создадите две VPC с подсетью в каждой. Вы зарезервируете внешние IP-адреса, а затем создадите и настроите шлюз Cloud NAT (с Cloud Router), два экземпляра производителя, а также один экземпляр потребителя. После проверки поведения Cloud NAT по умолчанию вы создадите пользовательские правила Cloud NAT и проверите их работу.
Обзор сетевой архитектуры:

4. Резервирование внешних IP-адресов
Давайте зарезервируем все внешние IP-адреса для использования в этой лабораторной работе. Это поможет вам написать все необходимые правила NAT и брандмауэра как в потребительской, так и в исходящей VPC.
Из Cloud Shell:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
Заполните IP-адреса, зарезервированные в качестве переменных среды.
export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"` export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"` export natip3=`gcloud compute addresses list --filter name:nat-address-3 --format="get(address)"` export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"` export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`
Вывод не требуется, но необходимо подтвердить правильность заполнения адресов. Давайте выведем значения всех переменных окружения.
$ env | egrep '^(nat|producer)ip[1-3]'
Выход:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2> natip3=<NAT IP 3>
5. Настройка VPC и экземпляров производителя.
Теперь мы создадим ресурсы для производителя. Экземпляры, работающие в VPC производителя, будут предоставлять доступ к интернету, используя два публичных IP-адреса: «producer-address-1» и «producer-address-2».
Для начала создадим VPC. В Cloud Shell:
gcloud compute networks create producer-vpc --subnet-mode custom
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 producer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
Далее создадим подсеть в us-east4. Из Cloud Shell:
gcloud compute networks subnets create producer-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/producer-e4]. NAME REGION NETWORK RANGE producer-e4 us-east4 producer-vpc 10.0.0.0/24
Далее создадим правила брандмауэра VPC, чтобы разрешить IP-адресам NAT доступ к экземплярам производителя через порт 8080.
Первое правило взято из Cloud Shell:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
Выход:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED producer-allow-8080 producer-vpc INGRESS 1000 tcp:8080 False
Следующий шаг — создание двух экземпляров производителя.
Экземпляры-производители будут запускать службу эхо-ответа по IP-адресу в контейнере Docker, доступном на Docker Hub (исходный код доступен в репозитории GitHub автора сервиса).
Для быстрого развертывания экземпляров со всем необходимым программным обеспечением мы будем использовать функцию развертывания контейнеров на Compute Engine .
Для возможности написания правил NAT мы выделим каждому экземпляру свой собственный зарезервированный IP-адрес.
Создайте первый экземпляр. Из Cloud Shell:
gcloud compute instances create-with-container producer-instance-1 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-1 us-east4-a e2-medium 10.0.0.2 <producer IP 1> RUNNING
Затем создайте второй экземпляр. Из Cloud Shell:
gcloud compute instances create-with-container producer-instance-2 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-2 us-east4-a e2-medium 10.0.0.3 <producer IP 2> RUNNING
6. Настройка потребительской VPC, облачного NAT и экземпляра.
Теперь, когда вы создали службу производителя, пришло время создать VPC потребителя и его шлюз Cloud NAT.
После создания VPC и подсети мы добавим простое правило брандмауэра для входящего трафика, разрешающее доступ к IAP для диапазонов исходных IP-адресов TCP. Это позволит нам напрямую подключаться к экземплярам потребителей по SSH с помощью gcloud.
Затем мы создадим простой шлюз Cloud NAT в режиме ручного выделения и свяжем с ним зарезервированный адрес "nat-address-1". В последующих частях практического занятия мы обновим конфигурацию шлюза, добавив пользовательские правила.
Для начала создадим VPC. В Cloud Shell:
gcloud compute networks create consumer-vpc --subnet-mode custom
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/consumer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 consumer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
Далее создадим подсеть в us-east4. Из Cloud Shell:
gcloud compute networks subnets create consumer-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/consumer-e4]. NAME REGION NETWORK RANGE consumer-e4 us-east4 consumer-vpc 10.0.0.0/24
Далее создадим правила брандмауэра VPC, разрешающие адреса диапазонов IAP для доступа к экземплярам потребителей через порт 22.
Для первого правила брандмауэра выполните следующую команду в Cloud Shell:
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
Выход:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED consumer-allow-iap consumer-vpc INGRESS 1000 tcp:22 False
Перед созданием NAT-шлюза необходимо сначала создать экземпляр Cloud Router (мы используем частный номер ASN, но это не имеет значения для данной лабораторной работы). Из Cloud Shell:
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
Выход:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
Затем создайте экземпляр NAT-шлюза. Из Cloud Shell:
gcloud compute routers nats create consumer-nat-gw \
--router=consumer-cr \
--router-region=us-east4 \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=nat-address-1
Выход:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
Создайте экземпляр для тестирования потребителя. Здесь мы указываем зарезервированные IP-адреса производителя, чтобы иметь возможность ссылаться на них в дальнейшем внутри экземпляра. Из Cloud Shell:
gcloud compute instances create consumer-instance --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=consumer-e4,no-address \ --metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2
Выход:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/consumer-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance us-east4-a e2-medium 10.0.0.2 RUNNING
7. Проверьте поведение Cloud NAT по умолчанию.
На данном этапе экземпляр потребителя использует поведение Cloud NAT по умолчанию, которое использует один и тот же зарезервированный IP-адрес "nat-address-1" для связи со всеми внешними адресами.
Прежде чем использовать новую функцию правил NAT в Cloud NAT, давайте сначала проверим это поведение.
Подключитесь к экземпляру потребителя по SSH. Из Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Теперь вы должны находиться в командной оболочке экземпляра.
Пример выходных данных (полный вывод сокращен для краткости)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
Из экземпляра потребителя давайте сначала получим IP-адреса обоих производителей и заполним ими переменные окружения.
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
Затем попробуйте выполнить команду curl к обоим экземплярам производителя и посмотрите, какой IP-адрес источника будет возвращен.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
Для обеих конечных точек должен быть возвращен один и тот же IP-адрес, равный значению внешнего зарезервированного IP-адреса "nat-address-1".
Аналогично, команда curl к любому внешнему сервису IP-отражателя должна показывать тот же IP-адрес, например:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
Пока что завершим SSH-сессию с экземпляром, вернёмся по SSH после настройки правил NAT.
8. Создайте правила Cloud NAT.
Правила NAT пишутся с использованием синтаксиса Common Expression Language ( CMS). Дополнительную информацию о языке выражений правил см. в разделе «Язык выражений правил» .
Вы также можете добавить правило NAT к существующему шлюзу NAT, используя команды gcloud. Мы рассмотрим оба варианта создания правил Cloud NAT.
Для начала создадим YAML-файл с правилами NAT.
Из Cloud Shell:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
EOF
Теперь давайте обновим наш существующий NAT-шлюз, используя этот файл правил. Из Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Ожидаемый результат должен выглядеть следующим образом:
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Убедитесь, что правило успешно настроено. В Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
Ожидаемый результат должен выглядеть следующим образом:
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
Давайте попробуем воссоздать то же правило, используя только команды gcloud. Сначала удалите существующее правило. Из Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Ожидаемый результат должен выглядеть следующим образом:
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Затем создайте правило заново, используя следующую команду gcloud. В оболочке Cloud Shell:
gcloud alpha compute routers nats rules create 100 \ --match='destination.ip == "'$producerip2'"' \ --source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
Ожидаемый результат должен выглядеть следующим образом:
Creating Rule [100] in NAT [consumer-nat-gw]...done.
Чтобы еще раз убедиться в успешном создании правила, повторите предыдущую команду. На этот раз мы добавим параметр форматирования YAML, чтобы увидеть полную информацию о правиле.
Из Cloud Shell:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Ожидаемый результат должен выглядеть следующим образом:
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2 match: destination.ip == <actual IP for producer-IP 2> ruleNumber: 100
Наконец, обратите внимание, что теперь внешние адреса "nat-address1" и "nat-address-2" отображаются как "IN_USE". Чтобы убедиться в этом, выполните следующую команду в Cloud Shell:
$ gcloud compute addresses list
Ожидаемый результат должен выглядеть следующим образом (фактические IP-адреса должны совпадать с зарезервированными вами адресами):
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS nat-address-1 34.136.8.83 EXTERNAL us-east4 IN_USE nat-address-2 34.70.137.35 EXTERNAL us-east4 IN_USE nat-address-3 34.135.103.88 EXTERNAL us-east4 RESERVED producer-address-1 34.66.0.105 EXTERNAL us-east4 IN_USE producer-address-2 35.192.142.134 EXTERNAL us-east4 IN_USE
9. Проверьте поведение правил Cloud NAT.
На этом этапе экземпляр потребителя должен использовать созданное правило Cloud NAT для связи с адресом производителя 2 через nat-address-2.
Давайте проверим это поведение. Подключимся по SSH к экземпляру потребителя. Из Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Теперь вы должны находиться в командной оболочке экземпляра.
Пример выходных данных (полный вывод сокращен для краткости)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
Из экземпляра потребителя давайте сначала получим IP-адреса обоих производителей и заполним ими переменные окружения.
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
Затем попробуйте выполнить команду curl к обоим экземплярам производителя и посмотрите, какой IP-адрес источника будет возвращен.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
Теперь для обеих конечных точек должны возвращаться разные IP-адреса; первый IP-адрес должен совпадать с поведением по умолчанию. Второй IP-адрес после добавления нового правила NAT должен быть равен "nat-address-2".
При попытке подключения к любой внешней службе IP-отражателя с помощью команды curl должен отображаться тот же IP-адрес, что и при поведении по умолчанию, например:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
Пока что завершим SSH-сессию с экземпляром, затем вернёмся по SSH, чтобы проверить процесс опустошения адреса.
10. Обновление и удаление правил Cloud NAT
Вы можете обновлять существующие правила Cloud NAT. Например, вы можете связывать новые IP-адреса и удалять существующие IP-адреса, связанные с уже существующими правилами.
Давайте обновим файл правил NAT следующим образом.
Из Cloud Shell:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatDrainIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-3
EOF
Новый файл переводит параметр "nat-address-2" в состояние "опустошённый", а "nat-address-3" — в активное состояние. Это позволит существующим соединениям, использующим nat-address-2, корректно завершаться, а новым соединениям — только с использованием nat-address-3.
Теперь давайте обновим наш существующий NAT-шлюз, используя этот файл правил. Из Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Ожидаемый результат должен выглядеть следующим образом:
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Убедитесь, что правило успешно настроено. В Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Ожидаемый результат должен выглядеть следующим образом:
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3 sourceNatDrainIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2 match: destination.ip == '35.192.142.134' ruleNumber: 100
Обратите внимание, что "nat-address-2" теперь переведен в состояние "осушено". В качестве упражнения мы предлагаем вам проверить, что новые подключения из потребительской VPC теперь используют правильные NAT IP-адреса.
Наконец, чтобы удалить правила NAT из вашего шлюза Cloud NAT и вернуться к поведению по умолчанию, вы можете использовать следующую команду gcloud. В Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Ожидаемый результат должен выглядеть следующим образом:
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Чтобы убедиться, что больше нет правил NAT, воспользуемся командой `NAT gateway describe`.
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
Ожидаемый результат должен выглядеть следующим образом:
enableEndpointIndependentMapping: false name: consumer-nat-gw natIpAllocateOption: MANUAL_ONLY natIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1 sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES
Обратите внимание, что в выходном YAML-файле отсутствует раздел "rules:". Это указывает на отсутствие настроенных правил NAT.
11. Этапы очистки
Во избежание повторных списаний средств следует удалить все ресурсы, связанные с этим практическим заданием.
Сначала удалите все экземпляры.
Из Cloud Shell:
gcloud compute instances delete consumer-instance \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
Ожидаемый результат:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].
Далее удалите Cloud Router. В Cloud Shell:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
Ожидаемый результат должен выглядеть следующим образом:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
Освободите все внешние IP-адреса. Из Cloud Shell:
gcloud compute addresses delete nat-address-1 \ nat-address-2 nat-address-3 producer-address-1 \ producer-address-2 --region us-east4 --quiet
Ожидаемый результат должен выглядеть следующим образом:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
Удалите правила брандмауэра VPC. Из Cloud Shell:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
Ожидаемый результат должен выглядеть следующим образом:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-8080].
Удаление подсетей. Из Cloud Shell:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
Ожидаемый результат должен выглядеть следующим образом:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-e4].
Наконец, давайте удалим VPC. Из Cloud Shell:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
Ожидаемый результат должен выглядеть следующим образом:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].
12. Поздравляем!
Вы успешно завершили лабораторную работу по правилам Cloud NAT!
Что вы осветили
- Как настроить шлюз Cloud NAT для подготовки к использованию правил NAT.
- Как создавать правила NAT с использованием языка выражений Common Expression Language (CEL).
- Как создать правила NAT и привязать их к шлюзу NAT.
- Как проверить правила NAT из экземпляра системы.
- Как обновить правила NAT-шлюза.
- Как удалить правила NAT и вернуться к поведению Cloud NAT по умолчанию.
Следующие шаги
- Поэкспериментируйте с созданием более сложных правил NAT, подобных этому примеру.
- Изучите проблему перегрузки NAT IP-адресов и оцените влияние на соединение.
- Узнайте больше о сетевых технологиях на платформе Google Cloud.
©Google, Inc. или ее дочерние компании. Все права защищены. Распространение запрещено.