1. Wprowadzenie
Dzięki Private Service Connect producenci usług mogą udostępniać usługi w środowisku VPC za pomocą załącznika usługi i zezwalać użytkownikom w innym środowisku VPC na dostęp do tych usług za pomocą punktu końcowego Private Service Connect. Czasami usługi producenta są projektowane jako klastry maszyn wirtualnych, a każda z nich udostępnia te same usługi na identycznych numerach portów. Wcześniej te projekty usług wymagały wdrożenia wielu punktów końcowych Private Service Connect po stronie konsumenta lub użycia przekierowania adresów IP po stronie producenta, aby upewnić się, że kierowanie jest kierowane na odpowiednią maszynę wirtualną producenta.
Usługa Private Service Connect może teraz domyślnie kierować ruch do odpowiedniego miejsca docelowego za pomocą mapowania portów. Z tego laboratorium dowiesz się, w jakich przypadkach ta funkcja jest wymagana i jak wdrożyć NEG port mappingu do obciążenia Private Service Connect.
Czego się nauczysz
- Przypadki użycia mapowania portów usługi Private Service Connect
- Główne zalety mapowania portów PSC
- Wymagania związane z siecią
- Utwórz usługę producenta Private Service Connect, korzystając z mapowania portów.
- Tworzenie punktu końcowego Private Service Connect
- Wykonywanie wywołań przez punkt końcowy Private Service Connect do usługi producenta
Czego potrzebujesz
- Projekt Google Cloud z uprawnieniami właściciela
2. Przypadki użycia mapowania portów usługi Private Service Connect
Funkcja mapowania portów korzysta z grupy punktów końcowych sieci z mapowaniem portów (NEG), która jest przeznaczona do konkretnych zastosowań PSC.
Najczęstsze typy producentów, którzy mogą korzystać z mapowania portów, to producenci baz danych NoSQL i producenci Kafka. Z tej funkcji może jednak korzystać każdy producent, który potrzebuje klastra maszyn wirtualnych udostępniających te same usługi na identycznych portach z określonymi wymaganiami dotyczącymi mapowania maszyn wirtualnych.
Producent definiuje mapowanie między portem klienta a VM producenta i portem docelowym. Producent musi następnie udostępnić te informacje konsumentowi. Użytkownik korzysta z wstępnie zdefiniowanych portów, aby jednoznacznie określić, do którego portu docelowego i maszyny wirtualnej producenta ma się dostać. Port używany przez konsumenta jest inny niż port używany przez producenta.
Najważniejsze zalety mapowania portów PSC
- Prosta: producenci wdrażają komponenty PSC za pomocą mapowania portów, a konsumenci wdrażają punkt końcowy PSC. PSC automatycznie obsługuje translację adresów sieciowych.
- Opłaca się: nie wymaga dodatkowych zasobów PSC ani cykli procesora VM producenta. Cena jest taka sama jak w przypadku innych typów wdrożeń PSC.
- Wysoka wydajność: mapowanie portów zapewnia taką samą przepustowość i niskie opóźnienia jak inne tryby PSC.
- Skuteczne skalowanie i wykorzystanie adresów IP: jeden adres IP z VPC konsumenta może mieć dostęp do 1000 maszyn wirtualnych producenta i 1000 mapowań portów.
3. Wymagania związane z siecią
- Mapowanie portów wymaga użycia wewnętrznego przekazującego sieciowego systemu równoważenia obciążenia jako systemu równoważenia obciążenia producenta.
- Do mapowania portów można używać tylko punktów końcowych PSC (nie backendów PSC ani interfejsu PSC).
- Grupy punktów końcowych sieci z mapowaniem portów są konstrukcjami regionalnymi.
- Grupy punktów końcowych sieci z mapowaniem portów mogą być używane tylko w połączeniu PSC. Nie będą działać, jeśli kliencka maszyna wirtualna wywołuje regułę przekierowania systemu równoważenia obciążenia producenta bezpośrednio. W tym przypadku usługa producenta jest testowana w ten sam sposób.
- Punkt końcowy PSC i pakiet usług producenta muszą znajdować się w różnych sieciach VPC.
4. Topologia ćwiczeń z programowania
W VPC producenta zostaną utworzone 2 maszyny wirtualne, na których będą działać 2 serwery WWW: jeden na porcie 1000, a drugi na porcie 2000. Przed skonfigurowaniem mapowania portów NEG, wewnętrznego przekazującego sieciowego systemu równoważenia obciążenia i załącznika usługi przetestujemy każdą usługę.
W sieci VPC konsumenta skonfigurujemy punkt końcowy PSC i przetestujemy połączenie z usługą producenta z klienckiej maszyny wirtualnej.
5. Konfiguracja i wymagania
Konfiguracja środowiska w samodzielnym tempie
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google. Zawsze możesz ją zaktualizować.
- Identyfikator projektu jest niepowtarzalny w ramach wszystkich projektów Google Cloud i nie można go zmienić (po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem trzeba podać identyfikator projektu (zwykle oznaczony jako
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego adresu e-mail, aby sprawdzić, czy jest on dostępny. Nie można go zmienić po wykonaniu tego kroku. Pozostanie on do końca projektu. - Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten samouczek nie będzie kosztowne, a być może nawet bezpłatne. Aby wyłączyć zasoby i uniknąć obciążenia opłatami po zakończeniu samouczka, możesz usunąć utworzone zasoby lub usunąć projekt. 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
Google Cloud można obsługiwać zdalnie z laptopa, ale w tym ćwiczeniu będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po jego zakończeniu powinno wyświetlić się coś takiego:
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie poprawia wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym CodeLab możesz wykonać w przeglądarce. Nie musisz niczego instalować.
6. Zanim zaczniesz
Włącz interfejsy API
W Cloud Shell sprawdź, czy masz skonfigurowany identyfikator projektu.
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
Włączanie wszystkich niezbędnych usług
gcloud services enable compute.googleapis.com
7. Tworzenie sieci VPC producenta
Sieć VPC
Z Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Tworzenie podsieci
Z Cloud Shell
gcloud compute networks subnets create producer-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT
Podsieci PSC zostaną powiązane z przyłączem usługi PSC na potrzeby tłumaczenia adresów sieciowych. W przypadku zastosowań produkcyjnych rozmiar tej podsieci musi być odpowiednio dobrany, aby obsługiwać ilość przychodzącego ruchu ze wszystkich podłączonych punktów końcowych PSC. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją dotyczącą rozmiaru podłączenia PSC NAT.
Tworzenie zasady zapory sieciowej i reguł zapory sieciowej
Z Cloud Shell
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy producer-vpc-policy --network producer-vpc --name network-producer-vpc --global-firewall-policy
Aby umożliwić IAP połączenie z instancjami maszyn wirtualnych, utwórz regułę zapory sieciowej, która:
- dotyczy wszystkich instancji maszyn wirtualnych, które mają być dostępne przez IAP;
- Zezwala na ruch przychodzący z zakresu adresów IP 35.235.240.0/20. Ten zakres zawiera wszystkie adresy IP, których IAP używa do przekierowywania TCP.
Z Cloud Shell
gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy producer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
Poniższa reguła zapory sieciowej zezwala na ruch na portach TCP 1000–2000 z podsieci PSC do wszystkich instancji w sieci. W środowisku produkcyjnym ta reguła zapory sieciowej powinna być ograniczona tylko do instancji powiązanych z konkretną usługą producenta.
Z Cloud Shell
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
Poniższa reguła zapory sieciowej zezwala na cały ruch w podsieci usług na portach TCP 1000–2000. Ta reguła będzie służyć do sprawdzania, czy usługa producenta działa prawidłowo.
Z Cloud Shell
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
Tworzenie i konfigurowanie maszyn wirtualnych producenta
Tworzenie maszyn wirtualnych
Z Cloud Shell
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
W następnej sekcji uruchom serwer HTTP na porcie 1000 i 2000 na każdej maszynie wirtualnej producenta.
Konfigurowanie maszyn wirtualnych
Z Cloud Shell
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
W Cloud Shell z sesji portmap-vm1
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
Otwieranie nowego okna Cloud Shell
Zacznij od zresetowania zmiennych. W Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
W Cloud Shell z sesji portmap-vm2
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
8. Test producenta usług
Najpierw musimy uzyskać adresy IP instancji portmap. Zanotuj oba te adresy IP.
Otwieranie nowego okna Cloud Shell
Zacznij od zresetowania zmiennych. W Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
Zaloguj się w testowej instancji. W Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
Oczekiwany wynik
portmap-vm1 1000
W Cloud Shell
curl [portmap-vm1 IP]:2000
Oczekiwany wynik
portmap-vm1 2000
W Cloud Shell
curl [portmap-vm2 IP]:1000
Oczekiwany wynik
portmap-vm2 1000
W Cloud Shell
curl [portmap-vm2 IP]:2000
Oczekiwany wynik
portmap-vm2 2000
Zakończ pracę z test-client-vm
9. Tworzenie usługi producenta z NEG Portmap
Tworzenie komponentów systemu równoważenia obciążenia
Z Cloud Shell
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
Dodaj punkty końcowe do grupy punktów końcowych Portmap, aby utworzyć mapowanie portu klienta na port producenta. Producent tworzy to mapowanie i ma własną metodę przekazywania tych informacji konsumentom. Szczegółowy mapowania portów nie jest udostępniane przez PSC.
W Cloud Shell
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
Dokończ konfigurowanie systemu równoważenia obciążenia.
W Cloud Shell
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
Tworzenie załącznika usługi
Z Cloud Shell
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet
Następnie pobierz i zapisz URI załącznika usługi, aby skonfigurować punkt końcowy PSC w środowisku konsumenta.
W Cloud Shell
gcloud compute service-attachments describe portmap-service-attachment --region=$region
Przykład oczekiwanego wyniku
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr
10. Tworzenie sieci VPC konsumenta
Sieć VPC
Z Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Utwórz podsieć
Z Cloud Shell
gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
Tworzenie zasady zapory sieciowej i reguł zapory sieciowej
Z Cloud Shell
gcloud compute network-firewall-policies create consumer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
W przypadku sieci dla konsumentów potrzebny jest tylko dostęp SSH z IAP.
11. Tworzenie maszyny wirtualnej, punktu końcowego PSC i testowanie połączeń
W tym momencie powinny być otwarte 3 okna Cloud Shell. Jedna z nich powinna mieć otwartą sesję z portmap-vm1. Jedna powinna mieć otwartą sesję z portmap-vm2, a druga powinna być sesją roboczą.
Utwórz testową maszynę wirtualną.
Z Cloud Shell
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
Tworzenie punktu końcowego PSC
Z Cloud Shell
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
Testowanie połączenia
Z Cloud Shell
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
Oczekiwane dane wyjściowe
portmap-vm1 1000
Z Cloud Shell
curl 10.0.0.10:1002
Oczekiwane dane wyjściowe
portmap-vm1 2000
Z Cloud Shell
curl 10.0.0.10:1003
Oczekiwane dane wyjściowe
portmap-vm2 1000
Z Cloud Shell
curl 10.0.0.10:1004
Oczekiwane dane wyjściowe
portmap-vm2 2000
12. Czyszczenie
Zamknij instancję maszyny wirtualnej (wszystkie okna)
exit
Usuwanie komponentów laboratorium z jednego terminala Cloud Shell
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy=consumer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy --name=network-consumer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q gcloud compute networks subnets delete consumer-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
13. Gratulacje!
Gratulujemy ukończenia ćwiczenia.
Omówione zagadnienia
- Przypadki użycia mapowania portów usługi Private Service Connect
- Główne zalety mapowania portów PSC
- Wymagania związane z siecią
- Utwórz usługę producenta Private Service Connect, korzystając z mapowania portów.
- Tworzenie punktu końcowego Private Service Connect
- Wykonywanie wywołań przez punkt końcowy Private Service Connect do usługi producenta