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ą 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

ad37cfc003475b7c.png

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

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

55efc1aaa7a4d3ad.png

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:

7ffe5cbb04455448.png

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