Использование правил Cloud NAT NAT

1. Обзор

Cloud NAT — мощный инструмент: с его помощью рабочие нагрузки Compute Engine и Google Kubernetes Engine (GKE) могут получать доступ к интернет-ресурсам масштабируемым и безопасным образом, не подвергая выполняемые на них рабочие нагрузки внешнему доступу с использованием внешних IP-адресов.

Cloud NAT имеет конструкцию без прокси-сервера, реализующую NAT непосредственно на уровне SDN Andromeda. Таким образом, ваша рабочая нагрузка не влияет на производительность, и она легко масштабируется на множество виртуальных машин, регионов и VPC.

Правила NAT являются расширением Cloud NAT. Функция «Правила NAT» в Cloud NAT позволяет создавать правила доступа, которые определяют, как Cloud NAT используется для подключения к Интернету. В настоящее время правила NAT поддерживают выбор исходного адреса NAT на основе адреса назначения.

Без правил NAT виртуальная машина с включенным Cloud NAT использует один и тот же набор IP-адресов NAT для доступа ко всем адресам Интернета.

Иногда вариант использования NAT требует, чтобы Cloud NAT использовал разные исходные IP-адреса для определенных пунктов назначения. Правило NAT определяет совпадение и соответствующее действие. После указания правил NAT пакет сопоставляется с каждым правилом NAT. Если правило совпадает, происходит действие, соответствующее этому совпадению.

Для получения дополнительной информации ознакомьтесь с разделом документации о правилах NAT .

Что вы узнаете

  • Как настроить шлюз Cloud NAT при подготовке к правилам NAT.
  • Как разработать правила NAT с использованием общего языка выражений (CEL).
  • Как создать правила NAT и прикрепить их к шлюзу NAT.
  • Как протестировать правила NAT из экземпляра.
  • Как обновить правила шлюза NAT.
  • Как удалить правила NAT и вернуться к поведению Cloud NAT по умолчанию.

Что вам понадобится

  • Базовые знания Google Compute Engine.
  • Базовые знания сетевых технологий и TCP/IP.
  • Базовые знания командной строки Unix/Linux.
  • Полезно пройти экскурсию по сетям в GCP, например, по лаборатории «Сеть в Google Cloud» .
  • Понимание основ Cloud NAT.

2. Использование Google Cloud Console и Cloud Shell.

Для взаимодействия с GCP на протяжении всей лабораторной работы мы будем использовать как Google Cloud Console, так и Cloud Shell.

Облачная консоль Google

Доступ к облачной консоли можно получить по адресу https://console.cloud.google.com .

75eef5f6fd6d7e41.png

Самостоятельная настройка среды

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Название проекта — это ваш личный идентификатор этого проекта. Если вы соблюдаете соглашения об именах, вы можете использовать все, что захотите, и обновлять его в любое время.
  • Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ), поэтому, если он вам не нравится, создайте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он «замораживается» после создания проекта.
  1. Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.

Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.

3. Настройка лаборатории

В ходе этой лабораторной работы вы будете использовать проект и создадите два облака VPC с подсетью в каждом. Вы зарезервируете внешние IP-адреса, а затем создадите и настроите шлюз Cloud NAT (с облачным маршрутизатором), два экземпляра производителя, а также экземпляр потребителя. После проверки поведения Cloud NAT по умолчанию вы создадите собственные правила Cloud NAT и проверите их поведение.

Обзор сетевой архитектуры:

815147de3de0bd19.png

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-адресов «адрес производителя-1» и «адрес производителя-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, нам необходимо сначала создать экземпляр облачного маршрутизатора (мы используем частный номер 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"`

Затем попробуйте подключиться к обоим экземплярам производителя и наблюдать за возвращаемым исходным 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».

Аналогично, при обращении к любой внешней службе-отражателю 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 . Дополнительные сведения о языке выражений правил см. в разделе Язык выражений правил .

Вы также можете добавить правило 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, чтобы использовать nat-адрес-2 для связи с адресом-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"`

Затем попробуйте подключиться к обоим экземплярам производителя и наблюдать за возвращаемым исходным 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-адрес должен совпадать с поведением по умолчанию. После добавления нового правила NAT второй IP-адрес должен быть равен «nat-address-2».

Привязка к любой внешней службе-отражателю 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, чтобы проверить утечку адресов.

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-адрес-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 теперь используют правильные IP-адреса NAT.

Наконец, чтобы удалить правила 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.

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 с использованием общего языка выражений (CEL).
  • Как создать правила NAT и прикрепить их к шлюзу NAT.
  • Как протестировать правила NAT из экземпляра.
  • Как обновить правила шлюза NAT.
  • Как удалить правила NAT и вернуться к поведению Cloud NAT по умолчанию.

Следующие шаги

  • Поэкспериментируйте с созданием более сложных правил NAT, как в этом примере.
  • Изучите использование IP-адресов NAT и понаблюдайте за влиянием соединения.
  • Узнайте больше о сети на Google Cloud Platform.

©Google, Inc. или ее дочерние компании. Все права защищены. Не распространяйте.