1. Wprowadzenie
Private Service Connect pozwala producentowi usług oferować usługi konsumentom usług. Sieć VPC producenta usług może obsługiwać wielu konsumentów usług.
Istnieją 2 typy punktów końcowych Private Service Connect, które mogą łączyć się z opublikowaną usługą:
- Punkt końcowy Private Service Connect (na podstawie reguły przekierowania)
W przypadku tego typu punktu końcowego klienci łączą się z określonym przez siebie wewnętrznym adresem IP. Private Service Connect przeprowadza translację adresów sieciowych (NAT), aby kierować żądanie do producenta usługi.
- Punkt końcowy Private Service Connect z ustawieniami usługi HTTP(S) konsumenta (oparty na globalnym zewnętrznym systemie równoważenia obciążenia HTTP(S))
W przypadku tego typu punktów końcowych konsumenci łączą się z zewnętrznym adresem IP. Private Service Connect używa grupy punktów końcowych sieci do kierowania żądania do producenta usługi.
Stosowanie globalnego zewnętrznego systemu równoważenia obciążenia HTTP(S) jako punktu egzekwowania zasad ma następujące zalety:
- Możesz zmieniać nazwy usług i mapować je na wybrane adresy URL.
- Możesz skonfigurować system równoważenia obciążenia tak, aby rejestrował wszystkie żądania w Cloud Logging.
- Możesz używać certyfikatów TLS zarządzanych przez klienta. lub certyfikatami zarządzanymi przez Google.
Z tego ćwiczenia w Codelabs dowiesz się, jak utworzyć ustawienia usługi HTTP(S) konsumenta punktu końcowego usługi Private Service Connect za pomocą globalnego XLB do prywatnego dostępu do usługi w innej sieci. Ten wzorzec PSC można utworzyć za pomocą pojedynczego projektu lub osobnych projektów. Na potrzeby tego modułu użyjemy 1 projektu z 2 osobnymi środowiskami VPC.
Czego się nauczysz
- Utwórz punkt końcowy Private Service Connect z ustawieniami usługi HTTP(S) konsumenta za pomocą globalnego XLB
- Skonfiguruj usługę zarządzaną, która ma być udostępniana przez przyłącze usługi, aby akceptowała połączenia XLB L7.
- Utwórz certyfikat SSL i skonfiguruj serwer WWW Apache tak, aby kończył protokół TLS i akceptował ruch na porcie 443.
- Utwórz grupę punktów końcowych sieci w usłudze PSC.
Czego potrzebujesz
- Projekt Google Cloud
- Wiedza na temat wdrażania instancji i konfigurowania komponentów sieci
2. Środowisko testowe
Utworzone środowisko będzie się składać z zewnętrznego systemu równoważenia obciążenia HTTP(S) i grupy punktów końcowych sieci PSC w środowisku VPC konsumenta. Produkcyjna sieć VPC będzie hostować prostą usługę internetową Apache skonfigurowaną przy użyciu protokołu HTTPS. Utworzysz usługę backendu w usłudze internetowej Apache i przedstawisz jej usługę backendu z wewnętrznym systemem równoważenia obciążenia TCP skonfigurowanym z przyłączem usługi PSC.
3. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google i w każdej chwili możesz go zaktualizować.
- Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się
PROJECT_ID
), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy projekt lub wypróbuj swój własny identyfikator i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu. - Występuje trzecia wartość – numer projektu – używany przez niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, wykonaj czynności „wyczyść” znajdziesz na końcu tego ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na górnym pasku narzędzi:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.
4. Zanim zaczniesz
Włącz interfejsy API
Sprawdź w Cloud Shell, czy identyfikator projektu jest skonfigurowany
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
Włącz wszystkie niezbędne usługi
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com
5. Konfiguracja reguł zapory sieciowej producenta VPC, podsieci i reguł zapory sieciowej
Sieć VPC
Z Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Utwórz podsieci
Do wykonania translacji adresów sieciowych (NAT) dla PSC wymagana jest podsieć po stronie producenta. Pamiętaj, że cel to PRIVATE_SERVICE_CONNECT. Oznacza to, że tej podsieci nie można używać do wdrażania zadań.
Z Cloud Shell
gcloud compute networks subnets create producer-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
Wdrożymy 2 podsieci w producenta VPC. Pierwsza, która wdrożyła usługę producenta, i dodatkowa w innym regionie, która wdroży maszynę wirtualną klienta, aby przetestować połączenie z usługą przez dostęp globalny w wewnętrznym systemie równoważenia obciążenia TCP.
Z Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/24 \ --region=$region
Z Cloud Shell
gcloud compute networks subnets create client-subnet \ --network=producer-vpc \ --range=10.0.1.0/24 \ --region=us-east4
Utwórz Cloud NAT
Do instalowania odpowiednich pakietów dla naszych usług producenta wymagana jest usługa Cloud NAT.
Z Cloud Shell
gcloud compute routers create service-cr \ --region=$region --network=producer-vpc \ --asn=65501
Z Cloud Shell
gcloud compute routers nats create service-nat-gw \ --router=service-cr \ --router-region=$region \ --nat-custom-subnet-ip-ranges=service-subnet \ --auto-allocate-nat-external-ips
Utwórz reguły zapory sieciowej
W tym module do łączenia się z utworzonymi przez Ciebie instancjami będziesz używać IAP. Poniższa reguła zapory sieciowej pozwoli Ci łączyć się z instancjami przez IAP. Jeśli nie chcesz używać IAP, możesz pominąć ten krok i zamiast tego dodać publiczne adresy IP w instancji oraz utworzyć regułę zapory sieciowej, która zezwala na ruch przychodzący na porcie TCP 22 od 0.0.0.0/0.
Aby umożliwić IAP nawiązywanie połączeń z maszynami wirtualnymi, utwórz regułę zapory sieciowej, która:
- Dotyczy wszystkich instancji maszyn wirtualnych, które mają być dostępne za pomocą IAP.
- Zezwala na ruch przychodzący z zakresu adresów IP 35.235.240.0/20. Ten zakres zawiera wszystkie adresy IP używane przez IAP do przekierowywania TCP.
Z Cloud Shell
gcloud compute firewall-rules create allow-ssh-iap \ --network producer-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
Ruch klientów będzie pochodził z globalnego zewnętrznego systemu równoważenia obciążenia HTTP(S), dlatego należy utworzyć regułę zapory sieciowej, która przepuszcza ten ruch do otagowanych serwerów docelowych, które będą hostować naszą usługę internetową. W celach testowych otworzymy też regułę zapory sieciowej z client-subnet.
Z Cloud Shell
gcloud compute firewall-rules create allow-xlb-client \ --network=producer-vpc \ --direction=ingress \ --allow=tcp:443 \ --target-tags=psc-service \ --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24
Tworzenie usługi internetowej Apache
Utworzymy prostą usługę internetową Apache, która wyświetla „Usługa PSC”.
Utwórz szablon instancji
Z Cloud Shell
gcloud compute instance-templates create producer-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=psc-service \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
Tworzenie kontroli stanu zarządzanej grupy instancji
Z Cloud Shell
gcloud compute health-checks create https psc-service-mig-healthcheck \ --port=443 \ --global
Tworzenie zarządzanej grupy instancji
Z Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=producer-service-template \ --health-check=psc-service-mig-healthcheck
Konfigurowanie SSL na serwerach WWW Apache
Następnie trzeba skonfigurować protokół SSL na każdym z serwerów WWW Apache. Zrobimy to przez wygenerowanie certyfikatu i dodanie go do konfiguracji Apache.
Zakończenie SSL musi być skonfigurowane w usługach backendu, ponieważ dla tego konkretnego wzorca PSC usługa musi być poprzedzana przez wewnętrzny system równoważenia obciążenia TCP/UDP (L4). Wewnętrzny system równoważenia obciążenia TCP/UDP nie zamyka protokołu SSL w warstwie systemu równoważenia obciążenia.
Zacznij od połączenia się przez SSH z pierwszą maszyną wirtualną w zarządzanej grupie instancji. Strefa maszyny wirtualnej i nazwa maszyny wirtualnej będą przydzielane dynamicznie dla każdego środowiska. W konsoli przejdź do sekcji Compute Engine > Maszyny wirtualne, aby znaleźć nazwę i strefę instancji.
Z Cloud Shell
gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>" --tunnel-through-iap --project $project
Następnie utworzymy certyfikat w OpenSSL. Pojawi się prośba o podanie informacji o kraju, stanie, regionie, organizacji, nazwie jednostki organizacyjnej, powszechnej nazwie i adresie e-mail. Jedyne informacje, jakie musisz podać, to wspólna nazwa, która powinna być wybraną przez Ciebie wewnętrzną pełną i jednoznaczną nazwą domeny. Na potrzeby tego modułu wybierz domenę example.com.
Z Cloud Shell
sudo openssl genrsa -out private-key-file.pem 2048
Z Cloud Shell
cat <<'EOF' >config.txt [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements [extension_requirements] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @sans_list [dn_requirements] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (e.g. server FQDN or YOUR name) emailAddress = Email Address [sans_list] DNS.1 = example.com EOF
Z Cloud Shell
sudo openssl req -new -key private-key-file.pem \ -out csr.pem \ -config config.txt
Z Cloud Shell
sudo openssl x509 -req \ -signkey private-key-file.pem \ -in csr.pem \ -out cert.cert \ -extfile config.txt \ -extensions extension_requirements \ -days 10
Teraz zaktualizujmy informacje o konfiguracji Apache za pomocą szczegółów nowego certyfikatu.
sudo vi /etc/apache2/sites-enabled/default-ssl.conf
W sekcji ServerAdmin dodaj wiersz o treści
ServerName example.com
Zaktualizuj pola SSLCertificateFile i SSLCertificateKeyFile, aby określić lokalizację plików cert.cert i private-key-file.pem w maszynie wirtualnej. Przykład poniżej. Pamiętaj, aby zaktualizować <profil> nazwą Twojego katalogu.
SSLCertificateFile /home/<profile>/cert.cert SSLCertificateKeyFile /home/<profile>/private-key-file.pem
Zamknij edytor i ponownie uruchom Apache.
sudo a2enmod ssl sudo systemctl restart apache2
Wyjdź z instancji i powtórz te same czynności w przypadku drugiej instancji w zarządzanej grupie instancji.
6. Tworzenie usługi Producer
Następnie utworzymy komponenty systemu równoważenia obciążenia dla tej usługi.
Utwórz kontrolę stanu systemu równoważenia obciążenia.
Z Cloud Shell
gcloud compute health-checks create https service-lb-healthcheck \ --port=443 \ --region=$region
Utwórz usługę backendu.
Z Cloud Shell
gcloud compute backend-services create psc-backend-service \ --load-balancing-scheme=internal \ --protocol=TCP \ --region=$region \ --health-checks=service-lb-healthcheck \ --health-checks-region=$region gcloud compute backend-services add-backend psc-backend-service \ --region=$region \ --instance-group=psc-service-mig
Utwórz regułę przekierowania. Pamiętaj, że reguła przekierowania musi być skonfigurowana na porcie 443 i z dostępem globalnym. Jest to wymagane do działania tego wzorca PSC.
Z Cloud Shell
gcloud compute forwarding-rules create producer-fr \ --region=$region \ --load-balancing-scheme=internal \ --network=producer-vpc \ --subnet=service-subnet \ --address=10.0.0.100 \ --ip-protocol=TCP \ --ports=443 \ --backend-service=psc-backend-service \ --backend-service-region=$region \ --allow-global-access
7. Testowanie usługi
Zanim utworzymy przyłącze usługi, utworzymy w innym regionie klienta, aby przetestować system równoważenia obciążenia skonfigurowany z dostępem globalnym, a także usługę Apache skonfigurowany do wyłączania protokołu TLS.
Z Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=client-subnet \ --no-address
Połącz się z instancją przez SSH.
Z Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
Przetestuj usługę Apache, łącząc się przez serwer proxy 443 przez system równoważenia obciążenia.
curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443
OCZEKIWANY WYNIK
PSC Service
8. Utwórz przyłącze usługi
Z Cloud Shell
gcloud compute service-attachments create pscservice \ --region=$region \ --producer-forwarding-rule=producer-fr \ --connection-preference=ACCEPT-AUTOMATIC \ --nat-subnets=producer-nat-subnet
Zanotuj identyfikator URI przyłącza usługi, ponieważ będzie on potrzebny w następnym kroku konfigurowania punktu końcowego. Aby go uzyskać, wykonaj w Cloud Shell następujące polecenie
Z Cloud Shell
gcloud compute service-attachments describe pscservice --region $region
Skopiuj identyfikator URI, zaczynając od /projects
Przykład: /projects/<IDENTYFIKATOR_TWOJEGO_PROJEKTU>/regions/us-central1/serviceAttachments/pscservice
9. Konfiguracja sieci VPC i podsieci dla klientów indywidualnych
Sieć VPC
Z Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Utwórz podsieć
Po stronie konsumenta potrzebna jest podsieć, w której zostanie wdrożona grupa punktów końcowych sieci Private Service Connect (NEG).
Z Cloud Shell
gcloud compute networks subnets create psc-neg-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.100.200.0/24 \ --purpose=private
10. Tworzenie punktu końcowego i połączenia testowego Private Service Connect
Wykonamy proces tworzenia grupy punktów końcowych sieci w usłudze PSC, która zostanie powiązana z właśnie utworzonym przyłączem usługi, dołączymy grupę punktów końcowych sieci PSC do usługi backendu i powiążemy usługę backendu z regułą przekierowania.
Przygotuj identyfikator URI przyłącza usługi zanotowany w ostatnim kroku. Zastąp poniższy adres URL swoim identyfikatorem URI.
Z Cloud Shell
gcloud beta compute network-endpoint-groups create xlb-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \ --region=$region \ --network=consumer-vpc \ --subnet=psc-neg-subnet
Utwórz publiczny adres IP XLB i pobierz rzeczywisty adres IP przypisany do późniejszego testowania.
Z Cloud Shell
gcloud compute addresses create xlb-psc-address \ --ip-version=IPv4 --global gcloud compute addresses describe xlb-psc-address --format="get(address)" --global
Następnie utworzymy punkt końcowy PSC, w tym przypadku w zewnętrznym systemie równoważenia obciążenia.
Z Cloud Shell
gcloud beta compute backend-services create pscneg-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global
Z Cloud Shell
gcloud beta compute backend-services add-backend pscneg-backend-service \ --network-endpoint-group=xlb-psc-neg \ --network-endpoint-group-region=$region \ --global
Z Cloud Shell
gcloud beta compute url-maps create xlb-psc-map \ --default-service=pscneg-backend-service \ --global
Z Cloud Shell
gcloud beta compute target-http-proxies create psc-http-proxy \ --url-map=xlb-psc-map
Z Cloud Shell
gcloud beta compute forwarding-rules create xlb-psc-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=xlb-psc-address \ --target-http-proxy=psc-http-proxy \ --ports=80 \ --global
Odczekaj 5–7 minut, a następnie wpisz w pasku adresu przeglądarki adres IP powiązany z adresem xlb-psc.
Jeśli „Usługa PSC” oznacza to, że rozwiązanie jest skonfigurowane prawidłowo.
11. Procedura czyszczenia
Usuń komponenty modułu z jednego terminala Cloud Shell
gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet gcloud beta compute target-http-proxies delete psc-http-proxy --quiet gcloud beta compute url-maps delete xlb-psc-map --global --quiet gcloud beta compute backend-services delete pscneg-backend-service --global --quiet gcloud compute addresses delete xlb-psc-address --global --quiet gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet gcloud compute networks delete consumer-vpc --quiet gcloud compute service-attachments delete pscservice --region $region --quiet gcloud compute instances delete vm-client --zone=us-east4-a --quiet gcloud compute forwarding-rules delete producer-fr --region $region --quiet gcloud compute backend-services delete psc-backend-service --region $region --quiet gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet gcloud compute instance-templates delete producer-service-template --quiet gcloud compute firewall-rules delete allow-xlb-client --quiet gcloud compute firewall-rules delete allow-ssh-iap --quiet gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet gcloud compute routers delete service-cr --region $region --quiet gcloud compute networks subnets delete client-subnet --quiet gcloud compute networks subnets delete service-subnet --quiet gcloud compute networks subnets delete producer-nat-subnet --quiet gcloud compute networks delete producer-vpc --quiet
12. Gratulacje!
Gratulujemy ukończenia ćwiczeń z programowania.
Omówione zagadnienia
- Utwórz punkt końcowy Private Service Connect z ustawieniami usługi HTTP(S) konsumenta za pomocą globalnego XLB
- Skonfiguruj usługę zarządzaną, która ma być udostępniana przez przyłącze usługi, aby akceptowała połączenia XLB L7.
- Utwórz certyfikat SSL i skonfiguruj serwer WWW Apache tak, aby kończył protokół TLS i akceptował ruch na porcie 443.
- Utwórz grupę punktów końcowych sieci w usłudze PSC.