Mapowanie portów Private Service Connect dla producentów usług

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

ad37cfc003475b7c.png

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

  1. 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ć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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.
  1. 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:

55efc1aaa7a4d3ad.png

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:

7ffe5cbb04455448.png

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