1. מבוא
קבוצה של נקודות קצה ברשת (NEG) מסוג Private Service Connect (PSC) תומכת בשרשור של מאזן עומסים פנימי של HTTPS עם מאזן עומסים חיצוני של HTTPS. ההגדרה הזו מאפשרת לבצע בדיקות תקינות מבוזרות ולנהל תעבורה של מישור נתונים למיקום מקומי באמצעות טווחים שהוגדרו על ידי הלקוח. בנוסף, הטופולוגיה הזו תומכת גם בכמה רשתות VPC שמחוברות ל-On-Prem באמצעות כמה חיבורי Interconnect אזוריים.
ב-Codelab הזה נדגים איך להגדיר את התהליך מקצה לקצה על סמך הטופולוגיה שמוצגת בהמשך. מימין לשמאל, ללקוחות מקומיים יש VM לסימול שירותי HTTP, הם משתמשים בקישוריות היברידית (HA-VPN או InterConnect) וב-NEG היברידי כדי לחשוף דרך מאזן עומסים פנימי של HTTPS. PSC משתמש במאזן עומסים פנימי של HTTPS כצירופי שירות. ה-NEG של PSC צורך את הקבצים המצורפים כשירות לקצה העורפי, שחשוף למאזן עומסים חיצוני של HTTPS. משתמשי אינטרנט יכולים להשתמש ברשת הגלובלית של Google כדי להאיץ את הגישה לשירותי HTTP מקומיים.

איור 1. Private Service Connect משתמש בקבוצה של נקודות קצה ברשת ובקבצים מצורפים של שירותים כדי לחבר מאזן עומסים חיצוני של HTTPS למאזן עומסים פנימי של HTTPS, ולהרחיב את הקצה העורפי למיקום מקומי.
מה תלמדו
- מאזן עומסים פנימי של HTTPS עם NEG היברידי ובדיקת תקינות מבוזרת
- צירוף שירות PSC עם מאזן עומסים פנימי מסוג HTTPS
- הגדרת קבוצת נקודות קצה ברשת של PSC
- חשיפת PSC NEG באמצעות מאזן עומסים חיצוני מסוג HTTPS
מה תצטרכו
- ידע בקישוריות היברידית, כמו HA-VPN
- ידע באיזון עומסים של תוספי HTTPS פנימיים/חיצוניים
- ידע ב-Private Service Connect
2. לפני שמתחילים
הערה: ב-Codelab מוצעים שלבי הגדרה ואימות על סמך הטופולוגיה המאוירת. אפשר לשנות את התהליך לפי הצורך כדי לעמוד בדרישות של הארגון. הרשאות IAM לא נכללות בהיקף של ה-codelab.
ב-Codelab ייעשה שימוש בפרויקט אחד כדי לדמות את התהליך כולו. יש תמיכה גם במספר פרויקטים.
פרויקט יחיד – עדכון הפרויקט כדי לתמוך ברשת של יצרנים וצרכנים
ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. יצירת משאבים מקומיים
בקטע הבא נגדיר רשת VPC ומכונות וירטואליות מקומיות כדי לדמות שירותים מקומיים של לקוחות.
רשת VPC
מ-Cloud Shell
gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom
יצירת רשת משנה
מ-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
יוצרים כללים לחומת האש.
מאזן עומסים פנימי מסוג HTTPS תומך בבדיקת תקינות מבוזרת, וכללי חומת האש צריכים לאפשר רק את טווח כתובות ה-IP של תת-רשת ה-proxy. פועלים לפי ההוראות במאמר כדי להוסיף את הפרויקטים לרשימת ההיתרים.
מ-Cloud Shell יוצרים כלל חומת אש כדי להפעיל בדיקות תקינות של קצה עורפי ותעבורת נתונים ממישורי נתונים של תת-רשתות של שרתי 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
מ-Cloud Shell יוצרים כלל חומת אש שמאפשר ל-IAP להתחבר למכונות הווירטואליות,
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. יצירת מכונות וירטואליות מקומיות
המכונה הווירטואלית הזו מדמה שירותים מקומיים, וצריך לחשוף אותה באמצעות מאזן עומסים פנימי מסוג HTTPS באמצעות NEG היברידי.
מ-Cloud Shell, יוצרים את המכונה 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'
בקטע הבא נשתמש ב-letsencrypt כדי ליצור אישורים ולהתקין אותם ב-Nginx. מורידים את קובץ המפתח הציבורי והפרטי לשלב הבא. כדי ליצור אישור, צריך לפתוח באופן זמני את יציאת TCP 80 לאינטרנט.
מוודאים שלמכונה הווירטואלית הזו יש שם דומיין שניתן לפתרון באופן ציבורי. לדוגמה, ב-Cloud DNS מוסיפים רשומת A [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) ומפנים לכתובת ה-IP הציבורית של מכונת ה-VM.
gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"
ממסוף המכונה הווירטואלית www01, פועלים לפי ההנחיות כדי להתקין אישורים ב-Nginx וליצור עותק של fullchain.pem ו-private.pem לשלבים הבאים.
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. יצירת רשת VPC של ספקי תוכן
הערה: הגדרת רשת היברידית לא נכללת בהגדרה הזו.
רשת VPC
מ-Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
יצירת רשת משנה
מ-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
יצירת תת-רשת של שרת proxy
מ-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
Hybrid Connectivity
פועלים לפי המסמכים בנושא Cloud VPN כדי להטמיע קישוריות HA-VPN בין רשת מקומית לבין רשת VPC של יצרן. שומרים על הגדרת ברירת המחדל ב-Cloud Router, אין צורך להוסיף את 130.211.0.0/22, 35.191.0.0/16 להודעות BGP.
6. יצירת NEG היברידית של מפיקים
יוצרים קבוצת נקודות קצה היברידית ברשת ומוסיפים ל-NEG את כתובת ה-IP:PORT של המכונה הווירטואלית (VM) ב-on-prem.
מ-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. יצירת מאזן עומסים פנימי מסוג HTTPS של ספקי שירות
בשלב הזה, מאזן עומסים חיצוני מסוג HTTPS תומך רק בפרוטוקול HTTPS ל-PSC NEG( מסמכים). כשמפרסמים שירותים, צריך להשתמש במאזן עומסים פנימי של HTTPS ולהפעיל גישה גלובלית לכללי העברה.
יוצרים את בדיקת התקינות האזורית מ-Cloud Shell.
gcloud compute health-checks create https on-prem-service-hc \
--region=asia-southeast1 \
--use-serving-port
יוצרים את שירות הקצה העורפי מ-Cloud Shell ומוסיפים Hybrid NEG.
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
מ-Cloud Shell יוצרים את מפת ה-URL
gcloud compute url-maps create on-premise-url \
--default-service on-premise-service-backend \
--region=asia-southeast1
יוצרים את אישורי ה-SSL האזוריים מ-Cloud Shell. שני קובצי אישור יורדו מהמכונה הווירטואלית.
gcloud compute ssl-certificates create www01 \
--certificate=fullchain.pem \
--private-key=private.pem \
--region=asia-southeast1
מ-Cloud Shell יוצרים את ה-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
מ-Cloud Shell, שומרים כתובת IP פנימית סטטית ויוצרים את כלל ההעברה
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. יצירת מופע של מכונה וירטואלית של Producer
יוצרים מכונת VM של מפיק לצורך אימות.
מ-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
כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, צריך ליצור כלל חומת אש ש:
מ-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
ממסוף המכונה הווירטואלית של היצרן, ניגשים אל [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) ומפענחים את כתובת ה-IP של מאזן העומסים הפנימי מסוג HTTPS. תגובת HTTP 200 מציינת שההגדרה פעלה כמצופה.
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
הערה: אי אפשר לגשת ישירות לשירותי HTTPS של מכונה וירטואלית 10.0.0.2, כי חומת האש המקומית מאפשרת גישה רק לרשת המשנה של שרת ה-proxy 10.0.3.0/24.
9. יצירת תת-רשת NAT של PSC
מ-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. יצירת קובץ מצורף של שירות HTTPs
מ-Cloud Shell, יוצרים את קובץ ה-HTTPs service attachment.
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
אימות של קובץ מצורף לשירות HTTPs
gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1
שם הקובץ המצורף של הרשומה:
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. יצירת רשת VPC של צרכנים
בקטע הבא, ה-VPC של הצרכן מוגדר באותו פרויקט, אבל יש תמיכה גם בפרויקטים שונים. התקשורת בין רשת הצרכן לרשת הבעלים של השירות מתבצעת דרך קובץ השירות המצורף שמוגדר ברשת הבעלים של השירות.
רשת VPC
מ-Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom
יצירת רשת משנה
מ-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. יצירת קבוצה של נקודות קצה ברשת מסוג PSC
יצירת PSC NEG
מעתיקים את השם של הקובץ המצורף של שירותי https הקודמים ומדביקים אותו בפרמטרים --psc-target-service
מ-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
אחרי שהגדרתם את PSC NEG בהצלחה, בממשק המשתמש עוברים אל Private Service Connect -> Published Services -> שימו לב שהחיבור שפורסם ilbserviceattach מציין עכשיו כלל העברה אחד.

13. יצירת מאזן עומסים חיצוני מסוג HTTPS לצרכן
יצירת מאזן עומסים חיצוני ב-HTTPS ושימוש ב-PSC NEG כשירותי בק-אנד( מסמכים).
מ-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
מעדכנים את רשומת ה-DNS של www01.yinghli.demo.altostrat.com ומפנים אותה לכתובת ה-IP הציבורית של מאזן העומסים החיצוני מסוג 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. אימות
במחשב הנייד, ניגשים לכתובת https://www01.yinghli.demo.altostrat.com באמצעות 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. שלבי הניקוי
שלבים לניקוי רשת המפיקים
הערה: שלבי הניקוי מציגים רק הגדרות שקשורות למאזן עומסים (LB) ול-PSC, ולא כוללים VPC וקישוריות היברידית.
מחיקת רכיבי מעבדה ממסוף Cloud Shell יחיד
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. מעולה!
כל הכבוד, סיימתם את ה-Codelab.
מה נכלל
- מאזן עומסים פנימי של HTTPS עם NEG היברידי ובדיקת תקינות מבוזרת
- צירוף שירות PSC עם מאזן עומסים פנימי מסוג HTTPS
- הגדרת קבוצת נקודות קצה ברשת של PSC
- חשיפת קצה עורפי מסוג PSC באמצעות מאזן עומסים חיצוני מסוג HTTPS