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 .
Самостоятельная настройка среды
- Войдите в 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 Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.
3. Настройка лаборатории
В ходе этой лабораторной работы вы будете использовать проект и создадите два облака VPC с подсетью в каждом. Вы зарезервируете внешние IP-адреса, а затем создадите и настроите шлюз Cloud NAT (с облачным маршрутизатором), два экземпляра производителя, а также экземпляр потребителя. После проверки поведения 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-адресов «адрес производителя-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. или ее дочерние компании. Все права защищены. Не распространяйте.