Private Service Connect – używanie ustawień usługi HTTP(S) konsumenta dla globalnego XLB do usług zarządzanych

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.

bbca972cf488ece.png

3. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

55efc1aaa7a4d3ad.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

7ffe5cbb04455448.png

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.