1. Wprowadzenie
Grupa punktów końcowych sieci Private Service Connect (PSC) obsługuje łańcuch między wewnętrznym systemem równoważenia obciążenia HTTPS a zewnętrznym systemem równoważenia obciążenia HTTPS. Umożliwia to przeprowadzanie rozproszonych kontroli stanu i przesyłanie ruchu na poziomie danych do lokalnego środowiska przy użyciu zakresów zdefiniowanych przez klienta. W tej topologii obsługiwane są też liczne VPC łączące się z siecią lokalną za pomocą wielu połączeń międzykontynentalnych.
W tym ćwiczeniu w Codelabs pokażemy, jak skonfigurować tę kompleksową konfigurację w oparciu o poniższą topologię. Od lewej do prawej klienci lokalni mają do dyspozycji maszynę wirtualną do symulowania usług HTTP, wykorzystują połączenia hybrydowe (HA-VPN lub InterConnect) oraz hybrydową grupę punktów końcowych sieci do udostępniania za pomocą wewnętrznego systemu równoważenia obciążenia HTTPS. PSC używa wewnętrznego systemu równoważenia obciążenia HTTPS jako przyłącza usługi. Grupa punktów końcowych sieci w usłudze PSC korzysta z załączników jako usługi backendu, która jest dostępna dla zewnętrznego systemu równoważenia obciążenia HTTPS. Użytkownicy internetu mogą korzystać z globalnej sieci Google, aby przyspieszyć dostęp do lokalnych usług HTTP.
Rysunek 1. Private Service Connect wykorzystuje grupę punktów końcowych sieci i przyłącza usługi do połączenia zewnętrznego systemu równoważenia obciążenia HTTPS z wewnętrznym systemem równoważenia obciążenia HTTPS oraz rozszerzenie backendu do lokalnego systemu równoważenia obciążenia.
Czego się nauczysz
- Wewnętrzny system równoważenia obciążenia HTTPS z hybrydową grupą punktów końcowych sieci i rozproszoną kontrolą stanu
- Przyłącze usługi PSC z wewnętrznym systemem równoważenia obciążenia HTTPS
- Konfiguracja grupy punktów końcowych sieci PSC
- Udostępnianie grupy punktów końcowych sieci w usłudze PSC za pomocą zewnętrznego systemu równoważenia obciążenia HTTPS
Czego potrzebujesz
- Znajomość połączeń hybrydowych, takich jak HA-VPN
- Znajomość wewnętrznego i zewnętrznego równoważenia obciążenia HTTPS
- Wiedza na temat usługi Private Service Connect
2. Zanim zaczniesz
Uwaga: w Codelabs dostępne są kroki konfiguracji i weryfikacji na podstawie zilustrowanej topologii. Zmodyfikuj procedurę odpowiednio do potrzeb organizacji. Uprawnienia dotyczące uprawnień nie są objęte zakresem tego Codelab.
Ćwiczenia z programowania będą symulować cały proces w ramach jednego projektu. Obsługiwane jest też wiele projektów.
Pojedynczy projekt – zaktualizuj projekt, aby obsługiwał sieć producentów i konsumentów
W Cloud Shell sprawdź, czy identyfikator projektu jest skonfigurowany.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Tworzenie lokalnych zasobów
W następnej sekcji skonfigurujemy lokalną sieć VPC i maszyny wirtualne, aby symulować usługi lokalne klienta.
sieć VPC,
Z Cloud Shell
gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom
Utwórz podsieć
Z Cloud Shell
gcloud compute networks subnets create vpc-demo-onprem-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=vpc-demo-onprem --region=asia-southeast1
Utwórz reguły zapory sieciowej.
Wewnętrzny system równoważenia obciążenia HTTPS obsługuje rozproszoną kontrolę stanu, a reguły zapory sieciowej muszą zezwalać tylko na zakres adresów IP podsieci serwera proxy. Aby dodać projekty do listy dozwolonych, postępuj zgodnie z dokumentem.
W Cloud Shell utwórz regułę zapory sieciowej, aby włączyć kontrole stanu backendu i ruch na platformie danych pochodzący z podsieci serwera proxy.
gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-onprem --source-ranges 10.0.3.0/24 --enable-logging
W Cloud Shell utwórz regułę zapory sieciowej, aby umożliwić IAP połączenie z instancjami maszyn wirtualnych.
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-onprem --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. Tworzenie instancji maszyn wirtualnych na potrzeby lokalnych środowisk
Ta maszyna wirtualna symuluje usługi lokalne i musi być udostępniana za pomocą wewnętrznego systemu równoważenia obciążenia HTTPS przy użyciu hybrydowego NEG.
W Cloud Shell utwórz instancję www01
gcloud compute instances create www01 \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-onprem-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install nginx -y vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" filter="{print \$NF}" vm_zone="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/zone \ | awk -F/ "${filter}")" echo "Page on $vm_hostname in $vm_zone" | \ tee /var/www/html/index.nginx-debian.html sudo systemctl restart nginx'
W następnej sekcji użyjemy metody letsencrypt do wygenerowania certyfikatów i ich instalacji na Nginx. Pobierz plik z kluczem publicznym i prywatnym do wykonania w następnym kroku. Aby wygenerować certyfikat, musisz tymczasowo otworzyć połączenie z internetem na porcie TCP 80.
Upewnij się, że ta maszyna wirtualna ma publicznie rozpoznawaną nazwę domeny. Na przykład w Cloud DNS dodaj rekord A [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com)
i skieruj go na publiczny adres IP maszyny wirtualnej.
gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"
W konsoli maszyny wirtualnej www01 postępuj zgodnie z instrukcjami instalacji certyfikatów w Nginx i utwórz kopię plików fullchain.pem i private.pem na potrzeby kolejnych kroków.
sudo apt install snapd sudo snap install core; sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo certbot --nginx
5. Utwórz sieć VPC producenta
Uwaga: ta konfiguracja NIE obejmuje konfiguracji sieci hybrydowej.
Sieć VPC
Z Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Utwórz podsieć
Z Cloud Shell
gcloud compute networks subnets create vpc-demo-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1
Utwórz podsieć serwera proxy
Z Cloud Shell
gcloud compute networks subnets create proxy-subnet-asia-southeast1 \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=asia-southeast1 \ --network=vpc-demo-producer \ --range=10.0.3.0/24
Połączenia hybrydowe
Aby zaimplementować połączenie sieci VPN o wysokiej dostępności między VPC lokalnym a VPC producenta, postępuj zgodnie z instrukcjami podanymi w dokumentacji Cloud VPN. Zachowaj domyślną konfigurację routera Cloud Router. Nie musimy dodawać 130.211.0.0/22, 35.191.0.0/16 do reklam BGP.
6. Tworzenie grupy punktów końcowych sieci hybrydowej dla producentów
Utwórz hybrydową grupę punktów końcowych sieci i dodaj do niej adres IP:PORT maszyny wirtualnej na potrzeby lokalnych usług.
Z Cloud Shell
gcloud compute network-endpoint-groups create on-prem-service-neg \ --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \ --zone=asia-southeast1-b \ --network=vpc-demo-producer gcloud compute network-endpoint-groups update on-prem-service-neg \ --zone=asia-southeast1-b \ --add-endpoint="ip=10.0.0.2,port=443"
7. Tworzenie wewnętrznego systemu równoważenia obciążenia HTTPS dla producentów
Obecnie zewnętrzny system równoważenia obciążenia HTTPS obsługuje tylko protokół HTTPS do PSC NEG (dokumenty). W przypadku opublikowanych usług musimy użyć wewnętrznego systemu równoważenia obciążenia HTTPS i włączyć globalny dostęp do reguł przekierowania.
W Cloud Shell utwórz regionalną kontrolę stanu.
gcloud compute health-checks create https on-prem-service-hc \ --region=asia-southeast1 \ --use-serving-port
Utwórz w Cloud Shell usługę backendu i dodaj hybrydową grupę punktów końcowych sieci.
gcloud compute backend-services create on-premise-service-backend \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=asia-southeast1 \ --health-checks=on-prem-service-hc \ --health-checks-region=asia-southeast1 gcloud compute backend-services add-backend on-premise-service-backend \ --network-endpoint-group=on-prem-service-neg \ --network-endpoint-group-zone=asia-southeast1-b \ --region=asia-southeast1 \ --balancing-mode=RATE \ --max-rate-per-endpoint=100
Tworzenie mapy URL w Cloud Shell
gcloud compute url-maps create on-premise-url \ --default-service on-premise-service-backend \ --region=asia-southeast1
W Cloud Shell utwórz regionalne certyfikaty SSL. Z maszyny wirtualnej pobierane są 2 pliki certyfikatów.
gcloud compute ssl-certificates create www01 \ --certificate=fullchain.pem \ --private-key=private.pem \ --region=asia-southeast1
W Cloud Shell utwórz adres https-target-proxy
gcloud compute target-https-proxies create on-premise-httpsproxy \ --ssl-certificates=www01 \ --url-map=on-premise-url \ --url-map-region=asia-southeast1 \ --region=asia-southeast1
Zarezerwuj wewnętrzny statyczny adres IP w Cloud Shell i utwórz regułę przekierowania
gcloud compute addresses create ilbaddress \ --region=asia-southeast1 \ --subnet=vpc-demo-asia-southeast1 \ --addresses=10.0.2.100 gcloud compute forwarding-rules create https-ilb-psc \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=vpc-demo-producer \ --subnet=vpc-demo-asia-southeast1 \ --address=ilbaddress \ --ports=443 \ --region=asia-southeast1 \ --target-https-proxy=on-premise-httpsproxy \ --target-https-proxy-region=asia-southeast1 --allow-global-access
8. Tworzenie instancji maszyny wirtualnej Producer
Utwórz maszynę wirtualną producenta na potrzeby weryfikacji.
Z Cloud Shell
gcloud compute instances create test01 \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
Aby umożliwić IAP połączenie z instancjami maszyn wirtualnych, utwórz regułę zapory sieciowej, która:
Z Cloud Shell
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
W konsoli maszyny wirtualnej producenta otwórz adres [
www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com)
i rozwiąż adres IP wewnętrznego systemu równoważenia obciążenia HTTPS. Błąd HTTP 200 wskazuje, że konfiguracja działa zgodnie z oczekiwaniami.
curl -v --resolve www01.yinghli.demo.altostrat.com:443:10.0.2.100 https://www01.yinghli.demo.altostrat.com * Added www01.yinghli.demo.altostrat.com:443:10.0.2.100 to DNS cache * Hostname www01.yinghli.demo.altostrat.com was found in DNS cache * Trying 10.0.2.100:443... * Connected to www01.yinghli.demo.altostrat.com (10.0.2.100) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * Using HTTP2, server supports multi-use * Connection state changed (HTTP/2 confirmed) * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * Using Stream ID: 1 (easy handle 0x55865ef982e0) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/7.74.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing * Connection state changed (MAX_CONCURRENT_STREAMS == 100)! < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:29:38 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
Uwaga: nie możesz uzyskać bezpośredniego dostępu do usług HTTPS maszyny wirtualnej 10.0.0.2, ponieważ lokalna zapora sieciowa zezwala tylko na dostęp do podsieci serwera proxy 10.0.3.0/24.
9. Tworzenie podsieci NAT PSC
Z Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \ --network=vpc-demo-producer \ --region=asia-southeast1 \ --range=10.0.5.0/24 \ --purpose=private-service-connect
10. Tworzenie załącznika usługi HTTPs
W Cloud Shell utwórz przyłącze usługi HTTPs
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
Zweryfikuj przyłącze usługi HTTPs
gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1
Rejestruj nazwę przyłącza usługi:
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. Tworzenie sieci VPC dla konsumentów
W poniższej sekcji środowisko VPC klienta jest skonfigurowane w tym samym projekcie, ale obsługiwane są też różne projekty. Komunikacja między siecią konsumenta a siecią producenta odbywa się za pomocą załącznika usługi zdefiniowanego w sieci producenta.
Sieć VPC
Z Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom
Utwórz podsieć
Z Cloud Shell
gcloud compute networks subnets create consumer-subnet --project=$prodproject --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1
12. Tworzenie grupy punktów końcowych sieci PSC
Tworzenie grupy punktów końcowych sieci PSC
Skopiuj nazwę poprzedniego przyłącza usług https i wklej parametry --psc-target-service
Z Cloud Shell
gcloud beta compute network-endpoint-groups create consumerpscneg \ --project=$prodproject \ --region=asia-southeast1 \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach \ --network=vpc-demo-consumer \ --subnet=consumer-subnet
Po skonfigurowaniu grupy punktów końcowych sieci w usłudze PSC, w interfejsie wykonaj następujące czynności: Private Service Connect
-> Published Services
-> Uwaga: opublikowane połączenie ilbserviceattach
wskazuje teraz 1 regułę przekierowania.
13. Tworzenie zewnętrznego systemu równoważenia obciążenia HTTPS dla konsumenta
Utwórz zewnętrzny system równoważenia obciążenia HTTPS i użyj grupy punktów końcowych sieci w PSC jako usług backendu( dokumentacja).
Z Cloud Shell
gcloud compute addresses create httpspsclb \ --ip-version=IPV4 --global gcloud compute backend-services create consumer-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend consumer-bs \ --network-endpoint-group=consumerpscneg \ --network-endpoint-group-region=asia-southeast1 \ --global gcloud compute url-maps create consumer-url \ --default-service=consumer-backend-service \ --global gcloud compute ssl-certificates create wwwglobal \ --certificate=fullchain.pem \ --private-key=private.pem \ --global gcloud compute target-https-proxies create consumer-url-target-proxy \ --url-map=consumer-url \ --ssl-certificates=wwwglobal gcloud compute forwarding-rules create consumer-url-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=httpspsclb \ --target-https-proxy=consumer-url-target-proxy \ --ports=443 \ --global
Zaktualizuj rekord DNS dla domeny www01.yinghli.demo.altostrat.com i wskaż publiczny adres IP zewnętrznego systemu równoważenia obciążenia HTTPS
gcloud dns --project=$prodproject record-sets update www01.yinghli.demo.altostrat.com. --type="A" --zone="yinghli-demo" --rrdatas="34.102.178.214" --ttl="300"
14. Weryfikacja
Na laptopie otwórz stronę https://www01.yinghli.demo.altostrat.com, korzystając z curl.
curl -v https://www01.yinghli.demo.altostrat.com * Trying 34.102.178.214:443... * Connected to www01.yinghli.demo.altostrat.com (34.102.178.214) port 443 (#0) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN: server accepted h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * using HTTP/2 * h2h3 [:method: GET] * h2h3 [:path: /] * h2h3 [:scheme: https] * h2h3 [:authority: www01.yinghli.demo.altostrat.com] * h2h3 [user-agent: curl/8.0.0] * h2h3 [accept: */*] * Using Stream ID: 1 (easy handle 0x149019a00) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/8.0.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:48:43 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google, 1.1 google < alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
15. Czyszczenie
Kroki czyszczenia sieci producenta
Uwaga: kroki czyszczenia pokazują tylko konfigurację związaną z systemem równoważenia obciążenia i PSC. Nie uwzględniają one sieci VPC ani połączeń hybrydowych.
Usuwanie komponentów z pojedynczego terminala w chmurze
gcloud compute forwarding-rules delete consumer-url-forwarding-rule --global gcloud compute target-https-proxies delete consumer-url-target-proxy gcloud compute ssl-certificates delete wwwglobal --global gcloud compute url-maps delete consumer-url gcloud compute backend-services delete consumer-bs --global gcloud compute addresses delete httpspsclb --global gcloud beta compute network-endpoint-groups delete consumerpscneg --region=asia-southeast1 gcloud compute service-attachments delete ilbserviceattach --region=asia-southeast1 gcloud compute networks subnets delete psc-nat-subnet --region=asia-southeast1 gcloud compute forwarding-rules delete https-ilb-psc --region=asia-southeast1 gcloud compute addresses delete ilbaddress --region=asia-southeast1 gcloud compute target-https-proxies delete on-premise-httpsproxy --region=asia-southeast1 gcloud compute ssl-certificates delete www01 --region=asia-southeast1 gcloud compute url-maps delete on-premise-url --region=asia-southeast1 gcloud compute backend-services delete on-premise-service-backend --region=asia-southeast1 gcloud compute health-checks delete on-prem-service-hc --region=asia-southeast1 gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=asia-southeast1-b gcloud compute networks subnets delete proxy-subnet-asia-southeast1 --region=asia-southeast1
16. Gratulacje!
Gratulujemy ukończenia ćwiczeń z programowania.
Omówione zagadnienia
- Wewnętrzny system równoważenia obciążenia HTTPS z hybrydowym NEG i rozproszoną usługą sprawdzania stanu
- Przyłącze usługi PSC z wewnętrznym systemem równoważenia obciążenia HTTPS
- Konfiguracja grupy punktów końcowych sieci PSC
- Udostępnianie grupy punktów końcowych sieci w usłudze PSC za pomocą zewnętrznego systemu równoważenia obciążenia HTTPS