1. מבוא
קבוצת נקודות קצה של רשת מסוג Private Service Connect (PSC) (NEG) תומכת ביצירת שרשור של מאזן עומסים פנימי מסוג HTTPS בעזרת מאזן עומסים חיצוני של HTTPS. כך מתקבלים בדיקות תקינות מבוזרות ותנועה ברמת הנתונים לחשבון המקומי באמצעות טווחים בהגדרת הלקוח. בנוסף, הטופולוגיה הזו תומכת גם במספר רשתות VPC שמתחברים לארגון מקומי דרך כמה רשתות InterConnect אזוריות.
ב-Codelab הזה נדגים איך להגדיר את ניתוח מקצה לקצה על סמך הטופולוגיה שבהמשך. משמאל לימין, ללקוחות בארגון יש מכונה וירטואלית כדי לדמות שירותי HTTP, להשתמש בקישוריות היברידית (HA-VPN או InterConnect) וב-NEG היברידי כדי לחשוף דרך מאזן עומסים פנימי מסוג HTTPS. PSC משתמש ב-HTTPS LB פנימי כקבצים מצורפים לשירות. PSC NEG משתמש בקבצים המצורפים בתור שירות לקצה העורפי, והם נחשפים ל-HTTPS LB חיצוני. משתמשי אינטרנט יכולים להשתמש ברשת הגלובלית של Google כדי להאיץ את הגישה לשירותי HTTP מקומיים.
איור 1. Private Service Connect משתמש בקבוצת נקודות קצה ברשת ובקבצים מצורפים של שירותים כדי לחבר מאזן עומסים חיצוני של HTTPS למאזן עומסים פנימי של HTTPS, ולהרחיב את הקצה העורפי ל-On-Prem.
מה תלמדו
- מאזן עומסים פנימי של HTTPS עם NEG היברידי ובדיקת תקינות מבוזרת
- קובץ מצורף לשירות PSC עם מאזן עומסים פנימי של HTTPS
- הגדרת קבוצה של נקודות קצה לרשת PSC
- חשיפת PSC NEG באמצעות מאזן עומסים חיצוני של HTTPS
מה צריך להכין
- ידע בקישוריות היברידית, כמו HA-VPN
- ידע על איזון עומסים של HTTPS פנימי/חיצוני
- הידע של Private Service Connect
2. לפני שמתחילים
הערה: ב-Codelab יש שלבי הגדרה ואימות שמבוססים על הטופולוגיה המודגמת. אפשר לשנות את התהליך לפי הצורך כדי לעמוד בדרישות הארגון. ה-Codelab לא חל על הרשאות IAM.
המערכת של Codelab תשתמש בפרויקט אחד כדי לדמות את התהליך כולו. יש תמיכה גם בפרויקטים מרובים.
פרויקט יחיד – עדכון הפרויקט לתמיכה ברשת של היצרן והצרכן
ב-Inside 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"
ממסוף VM 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
קישוריות היברידית
עליכם לפעול לפי מסמכי התיעוד של Cloud VPN כדי להטמיע קישוריות HA-VPN בין On-Prem לבין Producer VPC. משאירים את הגדרות ברירת המחדל ב-Cloud Router, אנחנו לא צריכים להוסיף 130.211.0.0/22, 35.191.0.0/16 למודעות של BGP.
6. יצירת NEG משולב של מפיקים
יוצרים קבוצת נקודות קצה של רשת היברידית ומוסיפים ל-NEG VM מסוג IP:PORT ממקור מקומי.
מ-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 יוצרים את השירות לקצה העורפי ומוסיפים 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
יצירת מפת כתובות ה-URL ב-Cloud Shell
gcloud compute url-maps create on-premise-url \ --default-service on-premise-service-backend \ --region=asia-southeast1
יוצרים את אישורי ה-SSL האזוריים ב-Cloud Shell. מתבצעת הורדה של שני קובצי אישורים מה-VM.
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 של המפיק
יוצרים מכונה וירטואלית (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. יצירת תת-רשת של PSC NAT
מ-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
יוצרים את הקובץ המצורף לשירות HTTP מ-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, בממשק המשתמש, מתבצע מעקב אחרי 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 וקישוריות היברידית לא כלולה.
ממעטפת אחת של ענן בטרמינל, למחוק את רכיבי שיעור ה-Lab
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 NEG באמצעות מאזן עומסים חיצוני של HTTPS