Korzystanie z reguł Cloud NAT

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.

75eef5f6fd6d7e41.png

Samodzielne konfigurowanie środowiska

  1. 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ć.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 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”.
  1. 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:

bce75f34b2c53987.png

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:

f6ef2b5f13479f3a.png

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:

815147de3de0bd19.png

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ć.