Korzystanie z reguł Cloud NAT

1. Omówienie

Cloud NAT jest zaawansowanym narzędziem: dzięki nim zadania Compute Engine i Google Kubernetes Engine (GKE) mogą uzyskiwać dostęp do zasobów internetowych w skalowalny i bezpieczny sposób bez narażania uruchomionych zbiorów zadań na dostęp z zewnątrz za pomocą zewnętrznych adresów IP.

Cloud NAT działa bez proxy i implementuje NAT bezpośrednio w warstwie SDN Andromeda. Nie ma więc wpływu na wydajność zadania i można go bez wysiłku skalować do wielu maszyn wirtualnych, regionów i sieci VPC.

Reguły NAT są rozszerzeniem Cloud NAT. Funkcja reguł NAT w Cloud NAT pozwala tworzyć reguły dostępu określające, jak Cloud NAT jest używana 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 w celu dotarcia do wszystkich adresów internetowych.

Czasami w przypadku użycia NAT usługa Cloud NAT wymaga, aby używała różnych źródłowych adresów IP na potrzeby określonych miejsc docelowych. Reguła NAT definiuje dopasowanie i odpowiednie działanie. Gdy określisz reguły NAT, pakiet będzie dopasowywany do każdej reguły NAT. Jeśli reguła zostanie dopasowana, wykonywane jest odpowiednie działanie.

Więcej informacji znajdziesz w sekcji dokumentacji reguł NAT .

Czego się nauczysz

  • Jak skonfigurować bramę Cloud NAT w ramach przygotowań do stosowania reguł NAT.
  • Jak projektować reguły NAT w języku CEL (Common Expression Language).
  • Jak utworzyć reguły NAT i podłączyć je do bramy NAT.
  • Jak przetestować reguły NAT z instancji.
  • Jak zaktualizować reguły bramy NAT.
  • Jak usunąć reguły NAT i przywrócić domyślne zachowanie Cloud NAT.

Czego potrzebujesz

  • Podstawowa znajomość Google Compute Engine
  • Podstawowa wiedza o sieciach i TCP/IP
  • Podstawowa wiedza na temat wiersza poleceń systemu Unix/Linux.
  • Warto zapoznać się z prezentacją sieci w GCP, na przykład z modułem Sieć w Google Cloud.
  • Informacje o podstawach Cloud NAT.

2. Korzystanie z konsoli Google Cloud i Cloud Shell

W tym module będziemy używać zarówno konsoli Google Cloud, jak i Cloud Shell.

Konsola Google Cloud

Konsola Cloud jest dostępna na stronie https://console.cloud.google.com.

75eef5f6fd6d7e41.png

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. 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. Jeśli przestrzegasz jej konwencji nazewnictwa, możesz używać dowolnych nazw i w każdej chwili ją zmienić.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po ustawieniu nie można go zmienić). Konsola Cloud automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się PROJECT_ID), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy projekt lub wypróbuj swój własny identyfikator i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.

Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.

W konsoli GCP kliknij ikonę Cloud Shell na górnym pasku narzędzi:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.

3. Konfiguracja modułu

W tym module wykorzystasz projekt i utworzysz 2 sieci VPC z podsiecią w każdym z nich. Zarezerwujesz zewnętrzne adresy IP, a następnie utworzysz i skonfigurujesz bramę Cloud NAT (z routerem Cloud Router), 2 instancje producenta oraz instancję klienta. Po sprawdzeniu domyślnego działania Cloud NAT utworzysz reguły niestandardowe Cloud NAT i sprawdzisz ich działanie.

Omówienie architektury sieci:

815147de3de0bd19.png

4. Zarezerwuj zewnętrzne adresy IP

Zarezerwujmy wszystkie zewnętrzne adresy IP do wykorzystania w tym module. Pomoże Ci to napisać wszystkie istotne reguły NAT i zapory sieciowej w sieciach VPC klienta 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 adresy IP, które zostały zarezerwowane 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 oczekujemy żadnych danych wyjściowych, ale chcemy sprawdzić, czy adresy zostały prawidłowo wypełnione. Teraz możemy wyświetlić 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. Konfiguracja sieci VPC i instancji producenta.

Teraz utworzymy zasoby dla zasobów producenta. Instancje działające w produkcyjnej sieci VPC będą oferować usługę dostępną z internetu przy użyciu 2 publicznych adresów IP „producent-adres-1” i „adres-producenta-2” ,

Najpierw utwórzmy 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

Utwórzmy 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

Teraz utworzymy reguły zapory sieciowej VPC, które umożliwią adresom IP NAT dotarcie do instancji producenta na porcie 8080.

W przypadku pierwszej reguły z 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 uruchomią 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 odpowiednim oprogramowaniem, użyj funkcji Wdrażanie kontenera w Compute Engine.

Aby możliwe było pisanie reguł NAT, każda instancja będzie miała 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. Skonfiguruj konsumencką sieć VPC, Cloud NAT i instancję

Po utworzeniu usługi producenta czas utworzyć sieć VPC klienta i jej bramę Cloud NAT.

Po utworzeniu sieci VPC i podsieci dodamy prostą regułę zapory sieciowej dla ruchu przychodzącego, aby zezwolić na IAP dla zakresów źródłowych adresów IP TCP. Pozwoli nam to bezpośrednio połączyć się z instancjami konsumenta za pomocą gcloud.

Następnie utworzymy prostą bramę Cloud NAT w trybie alokacji ręcznej i zarezerwowany adres „nat-address-1”. i powiązane z nią. W kolejnych częściach ćwiczeń w Codelabs zaktualizujemy konfigurację bramy, aby dodać reguły niestandardowe. .

Najpierw utwórzmy 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

Utwórzmy 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

Teraz utworzymy reguły zapory sieciowej VPC, które pozwolą na dotarcie adresów zakresów IAP do instancji konsumenta 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 utworzysz bramę NAT, musimy najpierw utworzyć instancję Cloud Router (używamy prywatnego numeru ASN, ale nie ma on znaczenia w przypadku działań w tym module). 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ą klienta. Tutaj wypełniamy zarezerwowane adresy IP producenta, aby można było odwołać się do nich później w 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. Sprawdź domyślne działanie Cloud NAT

W tym momencie instancja konsumenta używa domyślnego zachowania Cloud NAT, które korzysta z tego samego zarezerwowanego adresu IP „nat-address-1” komunikacji ze wszystkimi adresami zewnętrznymi.

Zweryfikujmy to zachowanie, zanim użyjesz nowej funkcji reguł NAT w Cloud NAT.

Połącz się z instancją konsumenta przez SSH. W Cloud Shell:

gcloud compute ssh consumer-instance --zone=us-east4-a

Powinno być teraz w powłoce instancji.

Przykładowe dane wyjściowe (pełne dane wyjściowe obcięte dla zwięzłości)

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:~$

Z poziomu instancji konsumenta pobierz najpierw oba adresy IP producenta i uzupełnij 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 utworzyć curl do obu instancji producenta i zobacz 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

Dla 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 przekierowanie do dowolnej zewnętrznej usługi reflektora adresów IP powinno pokazywać ten sam adres IP, na przykład:

<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. Spróbujemy połączyć się ponownie po skonfigurowaniu reguł NAT.

8. Tworzenie reguł Cloud NAT

Reguły NAT są napisane w składni Common Expression Language. Więcej informacji o języku wyrażeń reguł znajdziesz w sekcji Język wyrażeń reguł.

Możesz też dodać regułę NAT 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 naszą istniejącą bramę NAT przy użyciu tego pliku reguły. W Cloud Shell:

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

Możesz spodziewać się następujących danych wyjściowych :

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

Sprawdź, czy reguła została skonfigurowana. W Cloud Shell:

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4

Możesz spodziewać się następujących danych wyjściowych :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

Spróbujmy odtworzyć tę samą regułę tylko za pomocą 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

Możesz spodziewać się następujących danych wyjściowych :

Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]

Następnie utwórz regułę ponownie, używając 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

Możesz spodziewać się następujących danych wyjściowych :

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

Możesz spodziewać się następujących danych wyjściowych :

---
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 zarówno „nat-address1”, i „nat-address-2” adresy zewnętrzne są wyświetlane jako „IN_USE”. Aby to sprawdzić, uruchom to polecenie w Cloud Shell:

$ gcloud compute addresses list

Możesz oczekiwać następujących wyników (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 konsumenta powinna użyć utworzonej reguły Cloud NAT, aby komunikować się z adresem producenta-2 za pomocą adresu nat-address-2.

Zweryfikujmy to zachowanie. Połącz się z instancją konsumenta przez SSH. W Cloud Shell:

gcloud compute ssh consumer-instance --zone=us-east4-a

Powinno być teraz w powłoce instancji.

Przykładowe dane wyjściowe (pełne dane wyjściowe obcięte dla zwięzłości)

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:~$

Z poziomu instancji konsumenta pobierz najpierw oba adresy IP producenta i uzupełnij 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 utworzyć curl do obu instancji producenta i zobacz 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 dla obu punktów końcowych powinien być zwracany inny adres IP. Pierwszy adres IP powinien być taki sam jak działanie domyślne. Drugi adres IP powinien być równy „nat-address-2” po dodaniu nowej reguły NAT.

Przejście do dowolnej zewnętrznej usługi reflektora adresów IP powinno w dalszym ciągu wyświetlać ten sam adres IP co domyślne działanie, na przykład:

<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 sesję SSH instancji. Wrócimy przez SSH, aby przetestować opróżnianie adresów.

10. Aktualizuj & Usuń reguły Cloud NAT

Możesz aktualizować istniejące reguły Cloud NAT. Można na przykład powiązać nowe adresy IP i opróżnić istniejące adresy IP powiązane z istniejącymi regułami.

Zaktualizujmy plik reguł NAT w następujący 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

Nowy plik to „nat-address-2”. nie są już całkowicie wyczerpane. I dodaj „nat-address-3”. w stanie aktywnym. Powinno to umożliwić płynne zakończenie istniejących połączeń korzystających z adresu nat-address-2, a jednocześnie tworzenie nowych połączeń tylko przy użyciu adresu nat-address-3.

Następnie zaktualizujmy naszą istniejącą bramę NAT przy użyciu tego pliku reguły. W Cloud Shell:

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

Możesz spodziewać się następujących danych wyjściowych :

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

Sprawdź, czy reguła została skonfigurowana. W Cloud Shell:

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4 --format=yaml

Możesz spodziewać się następujących danych wyjściowych :

---
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” znajduje się teraz w stanie osuszenia. Pozostawiamy Ci ćwiczenie w zakresie sprawdzania, czy nowe połączenia z konsumenta VPC korzystają teraz z prawidłowych adresów IP NAT.

Na koniec usuń reguły NAT z bramy Cloud NAT i przywróć domyślne zachowanie. 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

Możesz spodziewać się następujących danych wyjściowych :

Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]

Aby sprawdzić, czy nie ma więcej reguł NAT, użyj polecenia „Opisz bramy NAT”

gcloud alpha compute routers nats describe consumer-nat-gw \
 --router=consumer-cr --router-region=us-east4

Możesz spodziewać się następujących danych wyjściowych :

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 nie ma tu żadnych „reguł:” w wyjściowym pliku YAML. Wskazuję brak skonfigurowanych reguł NAT.

11. Etapy czyszczenia

Aby uniknąć opłat cyklicznych, usuń wszystkie zasoby powiązane z tym ćwiczeniem z programowania.

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

Możesz spodziewać się następujących danych wyjściowych :

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

Możesz spodziewać się następujących danych wyjściowych :

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

Możesz spodziewać się następujących danych wyjściowych :

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

Możesz spodziewać się następujących danych wyjściowych :

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

Możesz spodziewać się następujących danych wyjściowych :

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!

Udało Ci się ukończyć laboratorium reguł Cloud NAT.

Omawiane tematy

  • Jak skonfigurować bramę Cloud NAT w ramach przygotowań do stosowania reguł NAT.
  • Jak projektować reguły NAT w języku CEL (Common Expression Language).
  • Jak utworzyć reguły NAT i podłączyć je do bramy NAT.
  • Jak przetestować reguły NAT z instancji.
  • Jak zaktualizować reguły bramy NAT.
  • Jak usunąć reguły NAT i przywrócić domyślne zachowanie Cloud NAT.

Następne kroki

  • Poeksperymentuj z tworzeniem bardziej złożonych reguł NAT, jak w tym przykładzie.
  • Sprawdź opróżnianie adresów IP NAT i obserwuj wpływ połączeń.
  • Dowiedz się więcej o sieci w Google Cloud Platform

©Google, Inc. lub jej podmioty stowarzyszone. Wszelkie prawa zastrzeżone. Nie rozpowszechniać.