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.
Samodzielne konfigurowanie środowiska
- 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ć.
- 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.
- 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:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:
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:
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ć.