1. Przegląd
Cloud NAT to zaawansowane narzędzie, które umożliwia zadaniom Compute Engine i Google Kubernetes Engine (GKE) dostęp do zasobów internetowych w skalowalny i bezpieczny sposób, bez narażania zadań działających na tych platformach na dostęp z zewnątrz za pomocą zewnętrznych adresów IP.
Cloud NAT ma konstrukcję bez serwera proxy, która implementuje NAT bezpośrednio w warstwie Andromeda SDN. Dzięki temu nie ma to wpływu na wydajność Twojego zadania i możesz bez problemu skalować je do wielu maszyn wirtualnych, regionów i sieci VPC.
Reguły NAT są rozszerzeniem usługi Cloud NAT. Funkcja reguł NAT w Cloud NAT umożliwia tworzenie reguł dostępu, które określają sposób wykorzystania Cloud NAT do łączenia się z internetem. Obecnie reguły NAT obsługują wybór źródłowego adresu NAT na podstawie adresu docelowego.
Bez reguł NAT maszyna wirtualna z włączoną usługą Cloud NAT używa tego samego zestawu adresów IP NAT do uzyskiwania dostępu do wszystkich adresów internetowych.
Czasami w przypadku translacji NAT konieczne jest używanie przez Cloud NAT różnych źródłowych adresów IP dla określonych miejsc docelowych. Reguła NAT określa dopasowanie i odpowiednie działanie. Po określeniu reguł NAT pakiet jest dopasowywany do każdej z nich. Jeśli reguła zostanie dopasowana, zostanie wykonane działanie odpowiadające temu dopasowaniu.
Więcej informacji znajdziesz w sekcji dokumentacji dotyczącej reguł NAT .
Czego się nauczysz
- Jak skonfigurować bramę Cloud NAT w ramach przygotowań do reguł NAT.
- Jak projektować reguły NAT za pomocą języka Common Expression Language (CEL).
- Jak tworzyć reguły NAT i dołączać je do bramy NAT.
- Jak przetestować reguły NAT na instancji
- Jak zaktualizować reguły bramy NAT.
- Jak usunąć reguły NAT i przywrócić domyślne działanie Cloud NAT.
Czego potrzebujesz
- Podstawowa znajomość Google Compute Engine
- Podstawowa wiedza o sieciach i protokole TCP/IP
- Podstawowa znajomość wiersza poleceń w systemach Unix i Linux
- Warto wcześniej zapoznać się z sieciami w GCP, np. w module Networking in Google Cloud.
- Znajomość podstawowych informacji o Cloud NAT.
2. Korzystanie z konsoli Google Cloud i Cloud Shell
Aby korzystać z GCP, w tym module będziemy używać zarówno konsoli Google Cloud, jak i Cloud Shell.
Google Cloud Console
Konsola Cloud jest dostępna pod adresem https://console.cloud.google.com.

Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to Twój osobisty identyfikator tego projektu. Możesz użyć dowolnej nazwy, o ile przestrzegasz konwencji nazewnictwa. W każdej chwili możesz ją zmienić.
- Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości Codelabs musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako
PROJECT_ID), więc jeśli Ci się nie podoba, wygeneruj inny losowy identyfikator lub spróbuj użyć własnego i sprawdź, czy jest dostępny. Po utworzeniu projektu jest on „zamrażany”.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów Google Cloud.
Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym module możesz wykonać w przeglądarce.
3. Konfiguracja modułu
Na potrzeby tego modułu użyjesz projektu i utworzysz 2 sieci VPC z podsiecią w każdej z nich. Zarezerwujesz zewnętrzne adresy IP, a następnie utworzysz i skonfigurujesz bramę Cloud NAT (z routerem Cloud Router), 2 instancje producenta i 1 instancję konsumenta. Po sprawdzeniu domyślnego działania Cloud NAT utworzysz niestandardowe reguły Cloud NAT i sprawdzisz ich działanie.
Omówienie architektury sieci:

4. Rezerwowanie zewnętrznych adresów IP
Zarezerwujmy wszystkie zewnętrzne adresy IP, które będą używane w tym module. Pomoże Ci to napisać wszystkie odpowiednie reguły NAT i zapory sieciowej w sieciach VPC konsumenta i producenta.
W Cloud Shell:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4
Dane wyjściowe:
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].
Wypełnij zarezerwowane adresy IP jako zmienne środowiskowe.
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)"`
Nie oczekuje się żadnych danych wyjściowych, ale można sprawdzić, czy adresy zostały prawidłowo wypełnione. Wyświetlmy wartości wszystkich zmiennych środowiskowych.
$ env | egrep '^(nat|producer)ip[1-3]'
Dane wyjściowe:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2> natip3=<NAT IP 3>
5. Konfigurowanie sieci VPC producenta i instancji.
Teraz utworzymy zasoby dla zasobów producenta. Instancje działające w sieci VPC producenta będą oferować usługę dostępną z internetu za pomocą 2 publicznych adresów IP: „producer-address-1” i „producer-address-2”.
Najpierw utwórzmy sieć VPC. W Cloud Shell:
gcloud compute networks create producer-vpc --subnet-mode custom
Dane wyjściowe:
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
Następnie utwórz podsieć w regionie us-east4. W Cloud Shell:
gcloud compute networks subnets create producer-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
Dane wyjściowe:
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
Następnie utwórz reguły zapory sieciowej VPC, aby umożliwić adresom IP NAT dotarcie do instancji producenta na porcie 8080.
W przypadku pierwszej reguły w Cloud Shell:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
Dane wyjściowe:
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
Następnym krokiem jest utworzenie 2 instancji producenta.
Instancje producenta będą uruchamiać usługę echa IP w kontenerze Dockera dostępnym w Docker Hub (kod źródłowy jest dostępny w repozytorium GitHub autora usługi).
Aby szybko udostępnić instancje z wymaganym oprogramowaniem, użyjemy funkcji wdrażania kontenerów w Compute Engine.
Aby umożliwić pisanie reguł NAT, przypiszemy do każdej instancji inny zarezerwowany adres IP.
Utwórz pierwszą instancję. W 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
Dane wyjściowe:
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
Następnie utwórz drugą instancję. W 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
Dane wyjściowe:
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. Konfigurowanie sieci VPC konsumenta, Cloud NAT i instancji
Po utworzeniu usługi producenta możesz utworzyć sieć VPC konsumenta i jej bramę Cloud NAT.
Po utworzeniu sieci VPC i podsieci dodamy prostą regułę zapory sieciowej ruchu przychodzącego, aby zezwolić na zakresy adresów IP źródła IAP dla protokołu TCP. Umożliwi nam to bezpośrednie łączenie się z instancjami klienta przez SSH za pomocą gcloud.
Następnie utworzymy prostą bramę Cloud NAT w trybie ręcznej alokacji i powiązany z nią zarezerwowany adres „nat-address-1”. W kolejnych częściach tego laboratorium kodowania zaktualizujemy konfigurację bramy, aby dodać reguły niestandardowe. .
Najpierw utwórzmy sieć VPC. W Cloud Shell:
gcloud compute networks create consumer-vpc --subnet-mode custom
Dane wyjściowe:
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
Następnie utwórz podsieć w regionie us-east4. W Cloud Shell:
gcloud compute networks subnets create consumer-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
Dane wyjściowe:
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
Następnie utwórz reguły zapory sieciowej VPC, aby zezwolić zakresom adresów IAP na dostęp do instancji klienta na porcie 22.
W przypadku pierwszej reguły zapory sieciowej uruchom w Cloud Shell to polecenie:
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
Dane wyjściowe:
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
Zanim utworzymy bramę NAT, musimy najpierw utworzyć instancję routera Cloud Router (używamy prywatnego numeru ASN, ale nie ma to znaczenia w przypadku działań w tym laboratorium). W Cloud Shell:
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
Dane wyjściowe:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
Następnie utwórz instancję bramy NAT. W 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
Dane wyjściowe:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
Utwórz instancję testową konsumenta. Wypełniamy tutaj zarezerwowane adresy IP producenta, aby móc się do nich później odwoływać w ramach instancji. W 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
Dane wyjściowe:
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. Sprawdzanie domyślnego działania Cloud NAT
W tym momencie instancja klienta korzysta z domyślnego zachowania Cloud NAT, które używa tego samego zarezerwowanego adresu IP „nat-address-1” do komunikacji ze wszystkimi adresami zewnętrznymi.
Zanim zaczniesz korzystać z nowej funkcji reguł NAT w Cloud NAT, sprawdź, czy działa ona prawidłowo.
Połącz się z instancją klienta przez SSH. W Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Powinna teraz być widoczna powłoka instancji.
Przykładowe dane wyjściowe (pełne dane wyjściowe skrócone z uwagi na długość)
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:~$
Najpierw pobierzmy adresy IP producenta z instancji konsumenckiej i wypełnijmy je jako zmienne środowiskowe.
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"`
Następnie spróbuj użyć polecenia curl w przypadku obu instancji producenta i obserwuj zwrócony źródłowy adres IP.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
W przypadku obu punktów końcowych powinien zostać zwrócony ten sam adres IP, który jest równy wartości zewnętrznego zarezerwowanego adresu IP „nat-address-1”.
Podobnie polecenie curl do dowolnej zewnętrznej usługi odbijającej adres IP powinno wyświetlać ten sam adres IP, np.:
<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
Na razie zakończ sesję SSH instancji. Po skonfigurowaniu reguł NAT ponownie nawiążemy połączenie SSH.
8. Tworzenie reguł Cloud NAT
Reguły NAT są zapisywane przy użyciu składni języka Common Expression Language. Więcej informacji o języku wyrażeń reguł znajdziesz w artykule Język wyrażeń reguł.
Regułę NAT możesz też dodać do istniejącej bramy NAT za pomocą poleceń gcloud. Omówimy obie opcje tworzenia reguł Cloud NAT.
Najpierw utwórzmy plik YAML reguły NAT.
W 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
Następnie zaktualizujmy istniejącą bramę NAT za pomocą tego pliku reguł. W Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Powinny się wyświetlić te dane wyjściowe :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Sprawdź, czy reguła została prawidłowo skonfigurowana. W Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
Powinny się wyświetlić te dane wyjściowe :
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
Spróbujmy ponownie utworzyć tę samą regułę, używając tylko poleceń gcloud. Najpierw usuń istniejącą regułę. W Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Powinny się wyświetlić te dane wyjściowe :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Następnie utwórz regułę ponownie za pomocą tego polecenia gcloud. W 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
Powinny się wyświetlić te dane wyjściowe :
Creating Rule [100] in NAT [consumer-nat-gw]...done.
Aby sprawdzić, czy reguła została utworzona, powtórz poprzednie polecenie. Tym razem dodamy przełącznik formatowania YAML, aby wyświetlić pełne szczegóły reguły.
W Cloud Shell:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Powinny się wyświetlić te dane wyjściowe :
--- 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
Zwróć uwagę, że teraz oba zewnętrzne adresy „nat-address1” i „nat-address-2” mają stan „IN_USE”. Aby to sprawdzić, uruchom to polecenie w Cloud Shell:
$ gcloud compute addresses list
Powinny się wyświetlić te dane wyjściowe (rzeczywiste adresy IP powinny być zgodne z zarezerwowanymi adresami) :
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. Sprawdzanie działania reguł Cloud NAT
W tym momencie instancja klienta powinna używać utworzonej reguły Cloud NAT, aby używać adresu nat-address-2 do komunikacji z adresem producer-address-2.
Sprawdźmy to zachowanie. Połącz się z instancją klienta przez SSH. W Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Powinna teraz być widoczna powłoka instancji.
Przykładowe dane wyjściowe (pełne dane wyjściowe skrócone z uwagi na długość)
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:~$
Najpierw pobierzmy adresy IP producenta z instancji konsumenckiej i wypełnijmy je jako zmienne środowiskowe.
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"`
Następnie spróbuj użyć polecenia curl w przypadku obu instancji producenta i obserwuj zwrócony źródłowy adres IP.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
Teraz w przypadku obu punktów końcowych powinien być zwracany inny adres IP. Pierwszy adres IP powinien być taki sam jak w przypadku domyślnego działania. Po dodaniu nowej reguły NAT drugi adres IP powinien być równy „nat-address-2”.
Polecenie curl do dowolnej zewnętrznej usługi odbijającej adres IP powinno nadal wyświetlać ten sam adres IP co działanie domyślne, np.:
<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
Zakończ teraz sesję SSH instancji. Wrócimy do niej, aby przetestować opróżnianie adresów.
10. Aktualizowanie i usuwanie reguł Cloud NAT
Możesz aktualizować istniejące reguły Cloud NAT. Możesz na przykład powiązać nowe adresy IP i opróżnić istniejące adresy IP powiązane z dotychczasowymi regułami.
Zaktualizujmy plik reguł NAT w ten sposób:
W 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
Ten nowy plik powoduje, że adres „nat-address-2” przechodzi w stan wyczerpania. Dodaj „nat-address-3” w stanie aktywnym. Powinno to umożliwić prawidłowe zakończenie istniejących połączeń korzystających z nat-address-2, a jednocześnie tworzenie nowych połączeń tylko przy użyciu nat-address-3.
Następnie zaktualizujmy istniejącą bramę NAT za pomocą tego pliku reguł. W Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Powinny się wyświetlić te dane wyjściowe :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Sprawdź, czy reguła została prawidłowo skonfigurowana. W Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Powinny się wyświetlić te dane wyjściowe :
--- 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
Zwróć uwagę, że „nat-address-2” jest teraz w stanie wyczerpania. Sprawdzenie, czy nowe połączenia z sieci VPC klienta korzystają teraz z prawidłowych adresów IP NAT, pozostawiamy Tobie jako ćwiczenie.
Na koniec usuń reguły NAT z bramy Cloud NAT i przywróć domyślne działanie. Możesz użyć tego polecenia gcloud. W Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Powinny się wyświetlić te dane wyjściowe :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Aby sprawdzić, czy nie ma już żadnych reguł NAT, użyj polecenia opisu bramy NAT.
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
Powinny się wyświetlić te dane wyjściowe :
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
Zwróć uwagę, że w wyjściowym pliku YAML nie ma sekcji „rules:”. Oznacza to, że nie skonfigurowano żadnych reguł NAT.
11. Procedura czyszczenia
Aby uniknąć naliczania opłat, usuń wszystkie zasoby powiązane z tym ćwiczeniem.
Najpierw usuń wszystkie instancje.
W Cloud Shell:
gcloud compute instances delete consumer-instance \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
Oczekiwane dane wyjściowe :
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].
Następnie usuń router Cloud Router. W Cloud Shell:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
Powinny się wyświetlić te dane wyjściowe :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
Zwolnij wszystkie zewnętrzne adresy IP. W 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
Powinny się wyświetlić te dane wyjściowe :
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].
Usuń reguły zapory sieciowej VPC. W Cloud Shell:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
Powinny się wyświetlić te dane wyjściowe :
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].
Usuń podsieci. W Cloud Shell:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
Powinny się wyświetlić te dane wyjściowe :
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].
Na koniec usuńmy sieci VPC. W Cloud Shell:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
Powinny się wyświetlić te dane wyjściowe :
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. Gratulacje!
Laboratorium dotyczące reguł Cloud NAT zostało ukończone.
Omówione tematy
- Jak skonfigurować bramę Cloud NAT w ramach przygotowań do reguł NAT.
- Jak projektować reguły NAT za pomocą języka Common Expression Language (CEL).
- Jak tworzyć reguły NAT i dołączać je do bramy NAT.
- Jak przetestować reguły NAT na instancji
- Jak zaktualizować reguły bramy NAT.
- Jak usunąć reguły NAT i przywrócić domyślne działanie Cloud NAT.
Następne kroki
- Eksperymentuj z tworzeniem bardziej złożonych reguł NAT, takich jak ten przykład.
- Sprawdź wyczerpywanie się adresów IP NAT i obserwuj wpływ na połączenie.
- Więcej informacji o sieciach w Google Cloud Platform
© Google, Inc. lub jej podmioty stowarzyszone. Wszelkie prawa zastrzeżone. Nie rozpowszechniać.