1. Wprowadzenie
Statyczne niestandardowe trasy wpływają na domyślne działanie routingu w sieci VPC. Trasy niestandardowe IPv6 obsługują teraz nowe atrybuty następnego przeskoku: next-hop-gateway, next-hop-instance i next-hop-address. Z tego ćwiczenia z programowaniem dowiesz się, jak używać niestandardowych tras IPv6 z tymi nowymi opcjami następnego przeskoku przy użyciu 2 sieci VPC połączonych za pomocą instancji maszyny wirtualnej z wieloma kartami NIC. Zobaczysz też demonstrację łączenia adresowania ULA i GUA oraz uzyskiwania dostępu do sieci VPC ULA z internetu publicznego za pomocą nowej funkcji niestandardowej trasy.
Czego się nauczysz
- Jak utworzyć trasę niestandardową IPv6 z następnym przeskokiem ILB, podając nazwę wewnętrznego systemu równoważenia obciążenia
- Jak utworzyć trasę niestandardową IPv6 z następnym przeskokiem ILB, podając adres IPv6 ILB
Czego potrzebujesz
- Projekt Google Cloud
2. Zanim zaczniesz
Zaktualizuj projekt, aby obsługiwał kodlab
Ten samouczek Codelab wykorzystuje zmienne $variables, aby ułatwić implementację konfiguracji gcloud w Cloud Shell.
W Cloud Shell wykonaj te czynności:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export projectname=$(gcloud config list --format="value(core.project)")
Ogólna architektura modułu
Aby zademonstrować oba typy następnego przeskoku niestandardowej trasy, utworzysz 2 sieci VPC: klienta i serwera, które korzystają z adresowania ULA.
Aby umożliwić klientowi VPC dostęp do serwera, użyjesz niestandardowej trasy z użyciem następnego przeskoku ILB, która wskazuje na ILB (przy użyciu nazwy ILB) przed grupą instancji bramy z wieloma kartami NIC, które są umieszczone między dwoma ILB. Aby zapewnić przekierowywanie z powrotem do instancji klienta (po usunięciu domyślnej trasy ::/0), użyj trasy niestandardowej z następnym przeskokum ILB (korzystając z adresu ILB), która wskazuje na ILB.
3. Konfiguracja VPC klienta
Tworzenie VPC klienta
W Cloud Shell wykonaj te czynności:
gcloud compute networks create client-vpc \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional \
--enable-ula-internal-ipv6
Tworzenie podsieci klienta
W Cloud Shell wykonaj te czynności:
gcloud compute networks subnets create client-subnet \
--network=client-vpc \
--project=$projectname \
--range=192.168.1.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=internal \
--region=us-central1
Zapisz przypisaną podsieć IPv6 w zmiennej środowiskowej za pomocą tego polecenia
export client_subnet=$(gcloud compute networks subnets \
describe client-subnet \
--project $projectname \
--format="value(internalIpv6Prefix)" \
--region us-central1)
Uruchamianie instancji klienta
W Cloud Shell wykonaj te czynności:
gcloud compute instances create client-instance \
--subnet client-subnet \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Dodawanie reguły zapory sieciowej dla ruchu VPC klienta
W Cloud Shell wykonaj te czynności:
gcloud compute firewall-rules create allow-gateway-client \
--direction=INGRESS --priority=1000 \
--network=client-vpc --action=ALLOW \
--rules=tcp --source-ranges=$client_subnet \
--project=$projectname
Dodawanie reguły zapory sieciowej zezwalającej na IAP dla instancji klienta
W Cloud Shell wykonaj te czynności:
gcloud compute firewall-rules create allow-iap-client \
--direction=INGRESS --priority=1000 \
--network=client-vpc --action=ALLOW \
--rules=tcp:22 --source-ranges=35.235.240.0/20 \
--project=$projectname
Potwierdź dostęp SSH do instancji klienta
W Cloud Shell zaloguj się w instancji klienta:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Jeśli się powiedzie, zobaczysz okno terminala z instancją klienta. Aby kontynuować pracę z tym ćwiczeniem, zakończ sesję SSH.
4. Konfiguracja VPC serwera
Tworzenie VPC serwera
W Cloud Shell wykonaj te czynności:
gcloud compute networks create server-vpc \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional \
--enable-ula-internal-ipv6
Tworzenie podsieci serwera
W Cloud Shell wykonaj te czynności:
gcloud compute networks subnets create server-subnet \
--network=server-vpc \
--project=$projectname \
--range=192.168.0.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=internal \
--region=us-central1
Zapisz przypisaną podsieć w zmiennej środowiskowej za pomocą tego polecenia
export server_subnet=$(gcloud compute networks subnets \
describe server-subnet \
--project $projectname \
--format="value(internalIpv6Prefix)" \
--region us-central1)
Uruchamianie maszyny wirtualnej serwera
W Cloud Shell wykonaj te czynności:
gcloud compute instances create server-instance \
--subnet server-subnet \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Dodawanie reguły zapory sieciowej, aby zezwolić na dostęp do serwera z klienta
W Cloud Shell wykonaj te czynności:
gcloud compute firewall-rules create allow-client-server \
--direction=INGRESS --priority=1000 \
--network=server-vpc --action=ALLOW \
--rules=tcp --source-ranges=$client_subnet \
--project=$projectname
Dodawanie reguły zapory sieciowej zezwalającej na IAP
W Cloud Shell wykonaj te czynności:
gcloud compute firewall-rules create allow-iap-server \
--direction=INGRESS --priority=1000 \
--network=server-vpc --action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20 \
--project=$projectname
Instalowanie Apache na instancji serwera ULA
W Cloud Shell zaloguj się w instancji klienta:
gcloud compute ssh server-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
W powłoce maszyny wirtualnej serwera uruchom to polecenie:
sudo apt update && sudo apt -y install apache2
Sprawdź, czy serwer Apache działa.
sudo systemctl status apache2
Zastąp domyślną stronę internetową
echo '<!doctype html><html><body><h1>Hello World! From Server Instance!</h1></body></html>' | sudo tee /var/www/html/index.html
Aby kontynuować pracę z tym ćwiczeniem, zakończ sesję SSH.
5. Tworzenie instancji bramy
Tworzenie szablonu instancji bramy z wieloma kartami NIC
W Cloud Shell wykonaj te czynności:
gcloud compute instance-templates create gateway-instance-template \
--project=$projectname \
--instance-template-region=us-central1 \
--region=us-central1 \
--network-interface=stack-type=IPV4_IPV6,subnet=client-subnet,no-address \
--network-interface=stack-type=IPV4_IPV6,subnet=server-subnet,no-address \
--can-ip-forward \
--metadata=startup-script='#! /bin/bash
sudo sysctl -w net.ipv6.conf.ens4.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens5.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens4.accept_ra_defrtr=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1'
Tworzenie grupy instancji bramy z wieloma kartami NIC
W Cloud Shell wykonaj te czynności:
gcloud compute instance-groups managed create gateway-instance-group \
--project=$projectname \
--base-instance-name=gateway-instance \
--template=projects/$projectname/regions/us-central1/instanceTemplates/gateway-instance-template \
--size=2 \
--zone=us-central1-a
Weryfikowanie instancji bramy
Aby sprawdzić, czy skrypt uruchamiający został przekazany prawidłowo i czy tabela routingu v6 jest poprawna. Nawiązywanie połączenia SSH z jedną z instancji bramy
Aby wyświetlić listę instancji bramy w Cloud Shell, uruchom to polecenie:
gcloud compute instances list \
--project=$projectname \
--zones=us-central1-a \
--filter name~gateway \
--format 'csv(name)'
Zanotuj nazwę jednej instancji i użyj jej w następnym poleceniu, aby nawiązać połączenie SSH.
Zaloguj się w Cloud Shell na jednym z wystąpień bramy.
gcloud compute ssh gateway-instance-<suffix> \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Aby sprawdzić przekierowanie IPv6, uruchom w powłoce maszyny wirtualnej bramy to polecenie:
sudo sysctl net.ipv6.conf.all.forwarding
Polecenie powinno zwrócić wartość 1, która wskazuje, że przekierowanie IPv6 jest włączone.
Sprawdź tabelę routingu IPv6 na instancji.
ip -6 route show
Przykładowe dane wyjściowe zawierające trasy podsieci ULA i GUA, w tym trasę domyślną wskazującą interfejs GUA.
::1 dev lo proto kernel metric 256 pref medium
2600:1900:4000:7a7f:0:1:: dev ens4 proto kernel metric 256 expires 83903sec pref medium
2600:1900:4000:7a7f::/65 via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium
fd20:3df:8d5c::1:0:0 dev ens5 proto kernel metric 256 expires 83904sec pref medium
fd20:3df:8d5c::/64 via fe80::4001:c0ff:fea8:1 dev ens5 proto ra metric 1024 expires 84sec pref medium
fe80::/64 dev ens5 proto kernel metric 256 pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium
Aby kontynuować pracę z tym ćwiczeniem, zakończ sesję SSH.
6. Tworzenie komponentów systemu równoważenia obciążenia
Zanim będziemy mogli utworzyć trasy w obu sieciach VPC, musimy utworzyć wewnętrzne przekazujące systemy równoważenia obciążenia po obu stronach instancji bramy, aby przekierowywać ruch.
Systemy równoważenia obciążenia utworzone w tym ćwiczeniu obejmują:
- Kontrola stanu: w tym laboratorium programistycznym utworzymy proste kontrole stanu, które będą kierować na port 22. Pamiętaj, że kontrole stanu nie będą działać w rozmieszczonej konfiguracji (wymagałoby to dodania reguł zapory sieciowej, aby umożliwić kontrole stanu, oraz utworzenia specjalnych tras w instancjach bramy). Ponieważ ten warsztat kodowania koncentruje się na przekierowywaniu IPv6, będziemy polegać na domyślnym zachowaniu dystrybucji ruchu wewnętrznych systemów równoważenia obciążenia typu passthrough, gdy wszystkie backendy nie będą działać prawidłowo. Oznacza to, że w ostateczności ruch będzie przekierowywany do wszystkich backendów.
- Usługa backendu: do obsługi usługi backendu użyjemy protokołu TCP. Ponieważ jednak systemy równoważenia obciążenia są tworzone na potrzeby routingu, wszystkie protokoły są przekierowywane niezależnie od protokołu usługi backendu.
- Reguła przekierowania: tworzymy regułę przekierowania na VPC .
- Wewnętrzny adres IPv6: w tym laboratorium kodu zezwolimy, aby reguła przekierowania automatycznie przydzielała adresy IPv6 z podsieci.
Tworzenie kontroli stanu
W Cloud Shell wykonaj te czynności:
gcloud compute health-checks create tcp tcp-hc-22 \
--project=$projectname \
--region=us-central1 \
--port=22
Tworzenie usług backendu
W Cloud Shell wykonaj te czynności:
gcloud compute backend-services create bes-ilb-clientvpc \
--project=$projectname \
--load-balancing-scheme=internal \
--protocol=tcp \
--network=client-vpc \
--region=us-central1 \
--health-checks=tcp-hc-22 \
--health-checks-region=us-central1
gcloud compute backend-services create bes-ilb-servervpc \
--project=$projectname \
--load-balancing-scheme=internal \
--protocol=tcp \
--network=server-vpc \
--region=us-central1 \
--health-checks=tcp-hc-22 \
--health-checks-region=us-central1
Dodawanie grupy instancji do usługi backendu
W Cloud Shell wykonaj te czynności:
gcloud compute backend-services add-backend bes-ilb-clientvpc \
--project=$projectname \
--region=us-central1 \
--instance-group=gateway-instance-group \
--instance-group-zone=us-central1-a
gcloud compute backend-services add-backend bes-ilb-servervpc \
--project=$projectname \
--region=us-central1 \
--instance-group=gateway-instance-group \
--instance-group-zone=us-central1-a
Tworzenie reguł przekierowania
W Cloud Shell wykonaj te czynności:
gcloud compute forwarding-rules create fr-ilb-clientvpc \
--project=$projectname \
--region=us-central1 \
--load-balancing-scheme=internal \
--network=client-vpc \
--subnet=client-subnet \
--ip-protocol=TCP \
--ip-version=IPV6 \
--ports=ALL \
--backend-service=bes-ilb-clientvpc \
--backend-service-region=us-central1
gcloud compute forwarding-rules create fr-ilb-servervpc \
--project=$projectname \
--region=us-central1 \
--load-balancing-scheme=internal \
--network=server-vpc \
--subnet=server-subnet \
--ip-protocol=TCP \
--ip-version=IPV6 \
--ports=ALL \
--backend-service=bes-ilb-servervpc \
--backend-service-region=us-central1
Zanotuj adresy IPv6 obu reguł przekierowania, wykonując w Cloud Shell te polecenia:
export fraddress_client=$(gcloud compute forwarding-rules \
describe fr-ilb-clientvpc \
--project $projectname \
--format="value(IPAddress)" \
--region us-central1)
export fraddress_server=$(gcloud compute forwarding-rules \
describe fr-ilb-servervpc \
--project $projectname \
--format="value(IPAddress)" \
--region us-central1)
7. Tworzenie i testowanie tras do systemów równoważenia obciążenia (przy użyciu adresu systemu równoważenia obciążenia)
W tej sekcji dodasz trasy do VPC klienta i serwera, używając jako następnego przeskoku adresów IPv6 równoważników obciążenia.
Zapisz adresy serwerów
W Cloud Shell wykonaj te czynności:
gcloud compute instances list \
--project $projectname \
--zones us-central1-a \
--filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address)'
Powinny zostać wyświetlone nazwy instancji serwera i ich prefiksy IPv6. Przykładowe dane wyjściowe
server-instance,fd20:3df:8d5c:0:0:0:0:0
Zapisz adres serwera, ponieważ będzie on potrzebny później w poleceniach curl z klienta. Niestety zmiennych środowiskowych nie można łatwo wykorzystać do przechowywania tych danych, ponieważ nie są one przenoszone podczas sesji SSH.
Wykonywanie polecenia curl z klienta do instancji serwera ULA
Aby sprawdzić działanie przed dodaniem nowych tras. Uruchom polecenie curl z klienta do instancji serwera1.
W Cloud Shell zaloguj się w instancji klienta:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
W instancji klienta wykonaj curl przy użyciu adresu ULA IPv6 instancji serwer1 (polecenie ustawia krótki limit czasu 5 s, aby uniknąć zbyt długiego oczekiwania curl).
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Polecenie curl powinno się zakończyć niepowodzeniem, ponieważ sieć VPC klienta nie ma jeszcze trasy do sieci VPC serwera.
Spróbujmy to naprawić. Zakończ sesję SSH.
Dodawanie trasy niestandardowej w VPC klienta
W sieci VPC klienta brakuje trasy do prefiksu ULA. Dodajmy teraz tę trasę, tworząc ją w ten sposób, aby wskazywała na ILB po stronie klienta według adresu.
Uwaga: wewnętrzne przekazujące systemy równoważenia obciążenia IPv6 mają przypisane adresy /96. Przed przekazaniem adresu do następnego polecenia należy usunąć z niego maskę /96. (poniżej użyto zastępowania w miejscu w bash)
W Cloud Shell wykonaj te czynności:
gcloud compute routes create client-to-server-route \
--project=$projectname \
--destination-range=$server_subnet \
--network=client-vpc \
--next-hop-ilb=${fraddress_client//\/96}
Połącz się z instancją klienta przez SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
W instancji klienta ponownie spróbuj użyć funkcji curl do instancji serwera. (polecenie ustawia krótki limit czasu wynoszący 5 s, aby uniknąć zbyt długiego oczekiwania przez curl)
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
To polecenie curl nadal kończy się błędem czasu oczekiwania, ponieważ sieć VPC serwera nie ma jeszcze trasy powrotnej do sieci VPC klienta przez instancję bramy.
Aby kontynuować pracę z tym ćwiczeniem, zakończ sesję SSH.
Dodawanie niestandardowej trasy w sieci VPC serwera
W Cloud Shell wykonaj te czynności:
gcloud compute routes create server-to-client-route \
--project=$projectname \
--destination-range=$client_subnet \
--network=server-vpc \
--next-hop-ilb=${fraddress_server//\/96}
Połącz się z instancją klienta przez SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
W kliencie spróbuj jeszcze raz użyć funkcji curl do serwera.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
To polecenie curl jest teraz wykonywane pomyślnie, co oznacza, że masz pełną łączność od instancji klienta do instancji serwera ULA. Obecnie taka łączność jest możliwa tylko przy użyciu niestandardowych tras IPv6 z wartością next-hop-ilb jako następnym przeskoku.
Przykładowe dane wyjściowe
<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[fd20:3df:8d5c:0:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server Instance!</h1></body></html>
Aby kontynuować pracę z tym ćwiczeniem, zakończ sesję SSH.
8. tworzyć i testować trasy do systemów równoważenia obciążenia (korzystając z nazwy systemu równoważenia obciążenia),
Zamiast adresu IPv6 systemu równoważenia obciążenia można też użyć jego nazwy. W tej sekcji omawiamy procedurę wykonywania tej czynności i sprawdzamy, czy połączenie między klientem a serwerem nadal jest aktywne.
Usuwanie poprzednich tras
Przywróćmy środowisko do stanu sprzed dodania niestandardowych tras, usuwając niestandardowe trasy, które używają nazwy instancji.
W Cloud Shell wykonaj te czynności:
gcloud compute routes delete client-to-server-route --quiet --project=$projectname
gcloud compute routes delete server-to-client-route --quiet --project=$projectname
Wykonywanie polecenia curl z klienta do instancji serwera ULA
Aby sprawdzić, czy poprzednie trasy zostały usunięte, uruchom polecenie curl z instancji klienta do instancji serwera1.
W Cloud Shell zaloguj się w instancji klienta:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
W instancji klienta wykonaj curl przy użyciu adresu ULA IPv6 instancji serwer1 (polecenie ustawia krótki limit czasu 5 s, aby uniknąć zbyt długiego oczekiwania curl).
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Polecenie curl powinno się zakończyć niepowodzeniem, ponieważ sieć VPC klienta nie ma już trasy do sieci VPC serwera.
Dodawanie niestandardowych tras w VPC klienta i serwera
Dodaj ponownie trasy niestandardowe w VPC klienta i serwera, ale zamiast adresu ILB użyj w tym poleceniu nazwy i regionu ILB.
W Cloud Shell wykonaj te czynności:
gcloud compute routes create client-to-server-route \
--project=$projectname \
--destination-range=$server_subnet \
--network=client-vpc \
--next-hop-ilb=fr-ilb-clientvpc \
--next-hop-ilb-region=us-central1
gcloud compute routes create server-to-client-route \
--project=$projectname \
--destination-range=$client_subnet \
--network=server-vpc \
--next-hop-ilb=fr-ilb-servervpc \
--next-hop-ilb-region=us-central1
Połącz się z instancją klienta przez SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
W instancji klienta ponownie spróbuj użyć curl do instancji serwera. (polecenie ustawia krótki limit czasu wynoszący 5 s, aby uniknąć zbyt długiego oczekiwania przez curl)
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
To polecenie curl zakończyło się sukcesem, co oznacza, że masz pełną łączność od instancji klienta do instancji serwera ULA.
9. Czyszczenie danych
Czyszczenie tras niestandardowych
W Cloud Shell wykonaj te czynności:
gcloud compute routes delete client-to-server-route --quiet --project=$projectname
gcloud compute routes delete server-to-client-route --quiet --project=$projectname
Czyszczenie komponentów LB
W Cloud Shell wykonaj te czynności:
gcloud compute forwarding-rules delete fr-ilb-clientvpc --region us-central1 --quiet --project=$projectname
gcloud compute forwarding-rules delete fr-ilb-servervpc --region us-central1 --quiet --project=$projectname
gcloud compute backend-services delete bes-ilb-clientvpc --region us-central1 --quiet --project=$projectname
gcloud compute backend-services delete bes-ilb-servervpc --region us-central1 --quiet --project=$projectname
gcloud compute health-checks delete tcp-hc-22 --region us-central1 --quiet --project=$projectname
Czyszczenie instancji i szablonu instancji
W Cloud Shell wykonaj te czynności:
gcloud compute instances delete client-instance --zone us-central1-a --quiet --project=$projectname
gcloud compute instances delete server-instance --zone us-central1-a --quiet --project=$projectname
gcloud compute instance-groups managed delete gateway-instance-group --zone us-central1-a --quiet --project=$projectname
gcloud compute instance-templates delete gateway-instance-template --region us-central1 --quiet --project=$projectname
Czyszczenie podsieci
W Cloud Shell wykonaj te czynności:
gcloud compute networks subnets delete client-subnet --region=us-central1 --quiet --project=$projectname
gcloud compute networks subnets delete server-subnet --region=us-central1 --quiet --project=$projectname
Oczyszczanie reguł zapory sieciowej
W Cloud Shell wykonaj te czynności:
gcloud compute firewall-rules delete allow-iap-client --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server --quiet --project=$projectname
gcloud compute firewall-rules delete allow-gateway-client --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server --quiet --project=$projectname
Czyszczenie sieci VPC
W Cloud Shell wykonaj te czynności:
gcloud compute networks delete client-vpc --quiet --project=$projectname
gcloud compute networks delete server-vpc --quiet --project=$projectname
10. Gratulacje
Udało Ci się użyć niestandardowych statycznych tras IPv6 z ustawionym na next-hop-ilb następnym przeskoku. Użytkownik musi też sprawdzić, czy komunikacja IPv6 jest w pełni obsługiwana przez te trasy.
Co dalej?
Zapoznaj się z tymi ćwiczeniami z programowania
- Dostęp do interfejsów API Google z hostów lokalnych przy użyciu adresów IPv6
- Opcje adresowania IP IPv4 i IPv6
- Używanie instancji tras statycznych IPv6, adresu następnego przeskoku i bramy następnego przeskoku