1. מבוא
קבוצה של נקודות קצה ברשת (NEG) מסוג Private Service Connect (PSC) תומכת בשרשרת של מאזן עומסים פנימי של HTTPS עם מאזן עומסים חיצוני של HTTPS. כך מתקבלים בדיקות תקינות מבוזרות ותנועה ברמת הנתונים לחשבון המקומי באמצעות טווחים בהגדרת הלקוח. בנוסף, אפשר להשתמש בתצורה הזו כדי לחבר כמה רשתות VPC ל-On-Prem דרך כמה קישורי InterConnect אזוריים.
ב-Codelab הזה נדגים איך להגדיר את ניתוח מקצה לקצה על סמך הטופולוגיה שבהמשך. משמאל לימין: ללקוחות בארגון יש מכונה וירטואלית כדי לדמות שירותי HTTP, לנצל קישוריות היברידית (HA-VPN או InterConnect) ו-NEG היברידי כדי לחשוף דרך מאזן עומסים פנימי של HTTPS. PSC משתמש ב-Internal HTTPS LB כקבצים מצורפים לשירות. PSC NEG צורך את הקבצים המצורפים כשירות לקצה עורפי, שנחשף למאזן העומסים החיצוני מסוג HTTPS. משתמשי אינטרנט יכולים להשתמש ברשת הגלובלית של Google כדי לזרז את הגישה לשירותי HTTP מקומיים.
איור 1. Private Service Connect משתמש בקבוצה של נקודות קצה ברשת ובקבצים מצורפים של שירותים כדי לחבר את מאזן העומסים החיצוני מסוג HTTPS למאזן העומסים הפנימי מסוג HTTPS, ולהרחיב את הקצה העורפי לארגון.
מה תלמדו
- מאזן עומסים פנימי של HTTPS עם NEG היברידי ובדיקת תקינות מבוזרת
- קובץ מצורף לשירות PSC עם מאזן עומסים פנימי של HTTPS
- הגדרה של קבוצת נקודות קצה ברשת ב-PSC
- חשיפת NEG של PSC באמצעות מאזן עומסים חיצוני מסוג HTTPS
מה צריך להכין
- ידע בקישוריות היברידית, כמו HA-VPN
- ידע באיזון עומסים של תוספי HTTPS פנימיים/חיצוניים
- הידע של Private Service Connect
2. לפני שמתחילים
הערה: ב-Codelab מפורטים שלבי ההגדרה והאימות על סמך הטופולוגיה שמוצגת באיור. אפשר לשנות את התהליך לפי הצורך כדי לעמוד בדרישות של הארגון. ה-Codelab לא חל על הרשאות IAM.
ב-Codelab נשתמש בפרויקט אחד כדי לדמות את התהליך כולו. יש תמיכה גם בפרויקטים מרובים.
פרויקט יחיד – עדכון הפרויקט כך שיתמוך ברשת של יצרנים ושל צרכנים
ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. יצירת משאבים בארגון
בקטע הבא נגדיר VPC ומכונות VM מקומיים כדי לדמות שירותים אצל הלקוח.
רשת 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 בין On-Prem לבין Producer VPC. משאירים את הגדרת ברירת המחדל ב-Cloud Router, אין צורך להוסיף את 130.211.0.0/22, 35.191.0.0/16 למודעות BGP.
6. יצירת NEG משולב של מפיקים
יוצרים קבוצה של נקודות קצה ברשת היברידית ומוסיפים ל-NEG את כתובת ה-IP:PORT של המכונה הווירטואלית (VM) בארגון.
מ-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
יוצרים את שירות הקצה העורפי ומוסיפים NEG היברידי ב-Cloud Shell.
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
יצירת מפת כתובות ה-URL מ-Cloud Shell
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
יצירת https-target-proxy מ-Cloud Shell
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. יצירת מופע 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
ממסוף ה-VM של היצרן, נכנסים לכתובת [
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
הערה: לא ניתן לגשת ישירות לשירותי VM 10.0.0.2 HTTPS כי חומת אש מקומית מאפשרת גישה רק לרשת משנה של שרת 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
יוצרים את צירוף השירות של HTTPs מ-Cloud Shell
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
אימות הקובץ המצורף לשירות HTTP
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 בהצלחה, תוכלו לבדוק את החיבור ilbserviceattach
שפורסם דרך ממשק המשתמש, לפי השלבים הבאים: 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. שלבי הניקוי
פעולות הניקוי ברשת של היצרן
הערה: שלבי הניקוי כוללים רק הגדרות שקשורות למאזן העומסים ול-PSC, ולא כוללים את VPC ואת Hybrid Connectivity.
מחיקת רכיבי המעבדה מתוך מעטפת cloud אחת במסוף
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
- חשיפת NEG של PSC באמצעות מאזן עומסים חיצוני מסוג HTTPS