1. Wprowadzenie
Dzięki Private Service Connect producenci usług mogą udostępniać usługi w środowisku VPC za pomocą przyłącza usługi i zezwalać konsumentom 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, z których każda udostępnia te same usługi na identycznych numerach portów. Wcześniej te projekty usług wymagały wdrożenia po stronie konsumenta wielu punktów końcowych usługi Private Service Connect lub użycia przekazywania IP po stronie producenta, aby mieć pewność, że docelowa maszyna wirtualna producenta jest prawidłowa.
Usługa Private Service Connect może teraz natywnie kierować ruch do właściwego miejsca docelowego za pomocą mapowania portów. Z tego modułu dowiesz się, w jakich przypadkach użycia ta funkcja jest wymagana oraz jak wdrożyć grupę punktów końcowych sieci z mapowaniem portów w przypadku obciążenia Private Service Connect.
Czego się nauczysz
- Przypadki użycia mapowania portów Private Service Connect
- Najważniejsze zalety mapowania portów PSC
- Wymagania związane z siecią
- Utwórz usługę producenta Private Service Connect za pomocą mapowania portów.
- Tworzenie punktu końcowego Private Service Connect
- Wykonywanie połączeń z usługą producenta przez punkt końcowy Private Service Connect
Czego potrzebujesz
- Projekt Google Cloud z uprawnieniami właściciela
2. Przypadki użycia mapowania portów Private Service Connect
Funkcja mapowania portów korzysta z grupy punktów końcowych sieci z mapowaniem portów, która jest przeznaczona do przypadków użycia PSC.
Najczęstsze typy producentów, którzy mogą skorzystać z mapowania portów, to producenci baz danych NoSQL i producenci Kafka. Jednak 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, może skorzystać z tej funkcji.
Producent definiuje mapowanie między portem klienta a maszyną wirtualną producenta i portem docelowym. Producent musi następnie udostępnić te informacje konsumentowi. Usługa korzysta z wstępnie zdefiniowanych portów, aby jednoznacznie określić, do której maszyny wirtualnej producenta i którego portu docelowego musi się połączyć. Port używany przez konsumenta jest inny niż port używany przez producenta.
Najważniejsze zalety mapowania portów PSC
- Proste: producenci wdrażają komponenty PSC z mapowaniem portów, a konsumenci wdrażają punkt końcowy PSC. PSC automatycznie obsługuje translację adresów sieciowych.
- Opłacalność: nie wymaga dodatkowych zasobów PSC ani cykli CPU maszyny wirtualnej producenta. Ceny są takie same jak w przypadku innych typów wdrożeń PSC.
- Wysoka wydajność: mapowanie portów zapewnia taką samą przepustowość i krótki czas oczekiwania jak inne tryby PSC.
- Skalowalność i efektywność wykorzystania adresów IP: jeden adres IP z sieci VPC konsumenta może uzyskać dostęp do maksymalnie 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.
- W przypadku 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.
- Sieciowe grupy punktów końcowych mapowania portów mogą być używane tylko w połączeniu PSC. Nie będą one działać, jeśli kliencka maszyna wirtualna wywoła bezpośrednio regułę przekierowania systemu równoważenia obciążenia producenta. Znajduje to odzwierciedlenie w sposobie testowania usługi producenta w tym laboratorium.
- Punkt końcowy PSC i stos usług producenta muszą znajdować się w różnych sieciach VPC.
4. Topologia ćwiczeń z programowania

W sieci VPC producenta zostaną utworzone 2 maszyny wirtualne, na których będą działać po 2 serwery WWW: jeden na porcie 1000, a drugi na porcie 2000. Przed skonfigurowaniem grupy NEG mapowania portów, wewnętrznego przekazującego sieciowego systemu równoważenia obciążenia i połączenia z usługą 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
Samodzielne konfigurowanie środowiska
- 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óry nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub 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
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli 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 zakończeniu powinno wyświetlić się coś takiego:

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce. Nie musisz niczego instalować.
6. Zanim zaczniesz
Włącz interfejsy API
W Cloud Shell sprawdź, czy identyfikator projektu jest skonfigurowany.
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łącz wszystkie niezbędne usługi
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
Podsieć PSC będzie powiązana z przyłączem usługi PSC na potrzeby translacji adresów sieciowych. W przypadku zastosowań produkcyjnych ta podsieć musi mieć odpowiedni rozmiar, aby obsługiwać ilość ruchu przychodzącego ze wszystkich dołączonych punktów końcowych PSC. Więcej informacji znajdziesz w dokumentacji dotyczącej rozmiaru podsieci NAT usługi PSC.
Tworzenie zasad 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
Ta 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
Ta reguła zapory sieciowej zezwala na cały ruch w podsieci usług na portach TCP 1000–2000. Ta reguła będzie używana do testowania, 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 portach 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. Usługa producenta testowego
Najpierw musimy uzyskać adresy IP instancji portmap. Zapisz oba 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 instancji testowej. W Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
Oczekiwane dane wyjściowe
portmap-vm1 1000
W Cloud Shell
curl [portmap-vm1 IP]:2000
Oczekiwane dane wyjściowe
portmap-vm1 2000
W Cloud Shell
curl [portmap-vm2 IP]:1000
Oczekiwane dane wyjściowe
portmap-vm2 1000
W Cloud Shell
curl [portmap-vm2 IP]:2000
Oczekiwane dane wyjściowe
portmap-vm2 2000
Zakończ pracę na maszynie wirtualnej test-client-vm
9. Tworzenie usługi producenta z grupą punktów końcowych sieci 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 NEG Portmap, aby utworzyć mapowanie z portu klienta na port producenta. Producent tworzy to mapowanie i ma własną metodę przekazywania tych informacji konsumentom. Konkretne mapowanie portów nie jest udostępniane za pomocą 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 tworzenie 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
Utwórz załącznik 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 zanotuj identyfikator URI przyłącza usługi, aby skonfigurować punkt końcowy PSC w środowisku klienta.
W Cloud Shell
gcloud compute service-attachments describe portmap-service-attachment --region=$region
Przykładowe oczekiwane dane wyjściowe
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 zasad 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 konsumenckiej wymagany jest tylko dostęp SSH z IAP.
11. Tworzenie maszyny wirtualnej, punktu końcowego PSC i testowanie połączenia
W tym momencie powinny być otwarte 3 okna Cloud Shell. Jeden z nich powinien mieć otwartą sesję z portmap-vm1. Jedna powinna być otwartą sesją z portmap-vm2, a druga – sesją roboczą.
Utwórz maszynę wirtualną testową
Z Cloud Shell
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
Utwórz punkt końcowy 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]
Sprawdź połączenie
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. Procedura czyszczenia
Zamykanie instancji 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 Private Service Connect
- Najważniejsze zalety mapowania portów PSC
- Wymagania związane z siecią
- Utwórz usługę producenta Private Service Connect za pomocą mapowania portów.
- Tworzenie punktu końcowego Private Service Connect
- Wykonywanie połączeń z usługą producenta przez punkt końcowy Private Service Connect