1. מבוא
Private Service Connect מאפשר ליוצרי שירותים לחשוף שירותים באופן פרטי מרשת VPC אחת לרשת VPC אחרת. צרכנים יכולים לגשת לשירותים של בעלי שירותים מנוהלים דרך נקודות קצה של PSC או קצוות עורפי של PSC.
הקודלאב הזה מתמקד בקצוות עורפי של PSC. קצות עורפי מסוג PSC משמשים בשילוב עם מאזני עומסים בשרת proxy של Google Cloud (Application או Network). שימוש בקצוות עורפי של PSC מספק אמצעי בקרה מפורטים יותר בצד הצרכן, כמו:
- ניראות מעמיקה יותר ורישום ביומן
- שילוב עם Cloud Armor
- כתובות אתרים מותאמות אישית
- ניהול מתקדם של תעבורת נתונים
- אישורי TLS בהתאמה אישית
ב-codelab הזה תלמדו איך ליצור קצה עורפי של Private Service Connect באמצעות מאזן העומסים החיצוני הגלובלי של אפליקציות, כדי לגשת באופן פרטי לשירות הפקה ברשת אחרת.
מה תלמדו
- יצירת קצה עורפי מסוג PSC ושיוך שלו למאזן העומסים החיצוני הגלובלי של אפליקציות
- הגדרת שירות אינטרנט מנוהל של Apache וחשיפה שלו כשירות PSC באמצעות Service Attachment
- יצירת אישורי SSL לסיום SSL במאזני עומסים פנימיים וחיצוניים של אפליקציות
- הגדרת תחום ציבורי ב-Cloud DNS כדי לגשת לשירות PSC
מה צריך להכין
- פרויקט ב-Google Cloud עם הרשאות בעלים
2. סביבת בדיקה
הסביבה שתיצרו תכלול VPC של צרכן ו-VPC של יצרן. ב-VPC של הבעלים, תפרסו קבוצת מכונות מנוהלות מתבנית של מכונה שמפתחת שירות אינטרנט של Apache בקוד פתוח. תצטרכו גם לפרוס מכונה וירטואלית לבדיקה כדי לוודא שהשירות פועל בצורה תקינה באופן מקומי. תחשפו את שירות Apache כשירות מנוהל של PSC באמצעות קובץ מצורף לשירות.
ב-VPC של הצרכן, תפרסו מאזן עומסים חיצוני גלובלי של אפליקציות (ALB) עם שירות קצה עורפי של PSC שמצביע על שירות Apache. לאחר מכן תגדירו תחום DNS ציבורי כדי לגשת לשירות PSC באינטרנט הציבורי.
3. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט. זוהי מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן אותו.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שמגדירים אותו. מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי. בדרך כלל לא משנה מה המחרוזת הזו. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט (בדרך כלל מזהים אותו בתור
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות כתובת משלכם ולבדוק אם היא זמינה. לא ניתן לשנות את השם אחרי השלב הזה, והוא יישאר למשך כל פרק הזמן של הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שמשתמשים בו בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי העזרה.
- בשלב הבא, כדי להשתמש במשאבים או ב-API של Cloud, תצטרכו להפעיל את החיוב במסוף Cloud. השלמת הקודלאב הזה לא תעלה הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים אחרי סיום המדריך, אפשר למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
הפעלת Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת ב-Cloud.
במסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:
תהליך ההקצאה והחיבור לסביבת העבודה אמור להימשך רק כמה רגעים. בסיום, אמור להופיע משהו כזה:
המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, משפרת מאוד את ביצועי הרשת ואת האימות. אתם יכולים לבצע את כל העבודה בקודלאב הזה בדפדפן. אין צורך להתקין שום דבר.
4. לפני שמתחילים
הפעלת ממשקי API
ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
מפעילים את כל השירותים הנדרשים
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com
5. הגדרת VPC של ה-Producer
יצירת רשת VPC
מ-Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
יצירת תת-רשתות
שתי תת-רשתות למטרות כלליות יפורסו ב-VPC של היוצר. תת-הרשת של השירות ישמש לפריסה של מכונות הווירטואליות של שירות האינטרנט של Apache, וגם של כלל ההעברה של מאזן העומסים. תת-הרשת test-client-subnet תהיה באזור אחר, והיא תשמש לפריסה של מכונה וירטואלית לבדיקה של שירות Apache עם גישה גלובלית מופעלת.
מ-Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region
מ-Cloud Shell
gcloud compute networks subnets create test-client-subnet \ --network=producer-vpc \ --range=10.0.1.0/28 \ --region=us-east4
אנחנו צריכים גם לפרוס תת-רשת של שרת proxy בלבד לשימוש עם מאזן העומסים הפנימי האזורי של האפליקציות.
מ-Cloud Shell
gcloud compute networks subnets create central-proxy-subnet \ --network=producer-vpc \ --range=10.100.101.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE
כשפורסים שירות PSC, לכל שירות ייחודי צריך רשת משנה מתאימה של NAT ב-PSC שתשוייך ל-Service Attachment. צריך לקבוע את הגודל של תת-הרשת הזו בהתאם למספר נקודות הקצה הצפויות שתתחברו אליה.
מ-Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
יצירת Cloud NAT
צריך Cloud NAT כדי להתקין את החבילות המתאימות לשירותי הבעלים שלנו.
מ-Cloud Shell
gcloud compute routers create central-cr \ --network=producer-vpc \ --region=$region
מ-Cloud Shell
gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
יצירת מדיניות וכללים של חומת אש לרשת
מ-Cloud Shell
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create \ --firewall-policy producer-vpc-policy \ --network producer-vpc \ --name network-producer-vpc \ --global-firewall-policy
כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, יוצרים כלל של חומת אש שמאפשר:
- רלוונטי לכל מכונות ה-VM שרוצים לגשת אליהן באמצעות IAP.
- הכלל מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-IP 35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP ש-IAP משתמש בהן להעברת TCP.
מ-Cloud Shell
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "SSH with IAP" \ --direction INGRESS \ --src-ip-ranges 35.235.240.0/20 \ --layer4-configs tcp:22 \ --global-firewall-policy
נדרשים שני כללי חומת אש נוספים כדי לאפשר תעבורת נתונים נכנסת (ingress) לקצוות העורפי של מאזן העומסים שמקורה בתת-הרשת של שרת ה-proxy בלבד של מאזן העומסים (2000), וכן כלל שמאפשר בדיקות תקינות של מאזן העומסים במכונות הקצה העורפי (2001).
מ-Cloud Shell
gcloud compute network-firewall-policies rules create 2000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow traffic from load balancer proxy subnet" \ --direction INGRESS \ --src-ip-ranges 10.100.101.0/24 \ --layer4-configs tcp:443 \ --global-firewall-policy gcloud compute network-firewall-policies rules create 2001 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow load balancer health checks" \ --direction INGRESS \ --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \ --layer4-configs tcp:443 \ --global-firewall-policy
6. יצירת שירות אינטרנט של Apache
נוצר שירות אינטרנט פשוט של Apache שיציג את הכיתוב 'PSC Service'.
יצירת תבנית למכונה
מ-Cloud Shell
gcloud compute instance-templates create apache-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2enmod ssl sudo a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
יצירת בדיקת תקינות ל-MIG
מ-Cloud Shell
gcloud compute health-checks create https service-mig-healthcheck \ --port=443 \ --global
יצירת קבוצה של מופעי מכונה מנוהלים
מ-Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=apache-service-template \ --health-check=service-mig-healthcheck gcloud compute instance-groups managed set-named-ports psc-service-mig \ --named-ports=https:443 \ --region=$region
7. יצירת אישור בחתימה עצמית
כדי ליצור אישור עם חתימה עצמית, מבצעים את שלב 1 בהוראות כאן. אפשר להריץ את כל הפקודות ב-Cloud Shell. חוזרים לכאן אחרי השלמת שלב 1. צריך להגדיר את השם הנפוץ עם example.com.
יוצרים משאב אישור שמשוייך למאזן העומסים. מחליפים את הפרמטרים של האישור והמפתח הפרטי בשמות הקבצים הספציפיים שלכם.
מ-Cloud Shell
gcloud compute ssl-certificates create producer-service-cert \ --certificate=<your-producer-certfile.cert> \ --private-key=<your-producer-keyfile.pem> \ --region=$region
8. יצירת מאזן עומסי האפליקציות האזורי הפנימי
בשלב הבא נוצר את הרכיבים של מאזן העומסים לשירות. אנחנו משתמשים במאזן העומסים האזורי הפנימי של אפליקציות (Internal Regional Application Load Balancer), אבל אתם יכולים להשתמש בכל מאזן עומסים פנימי של Google Cloud. פועלים לפי התיעוד המתאים של מאזן העומסים לטיפול ב-TLS.
יוצרים את כתובת ה-IP הפנימית שתשמש את כלל ההעברה של מאזן העומסים, ומתעדים את כתובת ה-IP שתשמש מאוחר יותר כשתבצעו קריאת בדיקה לשירות.
מ-Cloud Shell
gcloud compute addresses create apache-service-ip \ --region=$region \ --subnet=service-subnet gcloud compute addresses describe apache-service-ip \ --format="get(address)" \ --region=$region
יוצרים את בדיקת התקינות של מאזן העומסים.
מ-Cloud Shell
gcloud compute health-checks create https lb-apache-service-hc \ --region=$region \ --port-name=https
יוצרים את השירות לקצה העורפי.
מ-Cloud Shell
gcloud compute backend-services create apache-bes\ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --port-name=https \ --health-checks=lb-apache-service-hc \ --health-checks-region=$region \ --region=$region gcloud compute backend-services add-backend apache-bes \ --balancing-mode=UTILIZATION \ --instance-group=psc-service-mig \ --region=$region
יוצרים את מפת כתובות ה-URL.
מ-Cloud Shell
gcloud compute url-maps create producer-url-map \ --default-service=apache-bes \ --region=$region
יוצרים את שרתי ה-proxy של HTTPS היעד.
מ-Cloud Shell
gcloud compute target-https-proxies create https-proxy \ --url-map=producer-url-map \ --region=$region \ --ssl-certificates=producer-service-cert
יוצרים את כלל ההעברה.
מ-Cloud Shell
gcloud compute forwarding-rules create apache-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=service-subnet \ --address=apache-service-ip \ --ports=443 \ --region=$region \ --target-https-proxy=https-proxy \ --target-https-proxy-region=$region \ --allow-global-access
9. יצירת מכונה וירטואלית לבדיקה ובדיקה של השירות באופן מקומי
לפני שנוצר את Service Attachment, נוצר מכונה וירטואלית של לקוח לבדיקה באזור אחר כדי לבדוק שמאזן העומסים מוגדר בצורה נכונה עם גישה גלובלית ו-TLS.
מ-Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --subnet=test-client-subnet \ --no-address
ממתינים כ-60 שניות עד להשלמת ההקצאה, ואז מתחברים למכונה באמצעות SSH.
מ-Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
כדי לבדוק את שירות Apache, מתחברים דרך 443 דרך מאזן העומסים. כתובת ה-IP הפנימית היא זו ששמורה ורשמתם קודם.
curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443
התוצאה הצפויה
PSC Service
יוצאים מהמכונה הווירטואלית.
מ-vm-client
exit
10. יצירת צירוף השירות
בדוגמה הזו, אנחנו מגדירים את Service Attachment כך שיאפשר רק חיבורי PSC מהפרויקט הזה. אפשר להגדיר את האפשרות הזו כך שתקבל רק פרויקט או רשת ספציפיים, אבל לא את שניהם. הגדרנו את המגבלה המקסימלית של חיבורים ל-5 חיבורים. צריך להגדיר מגבלה לכל פרויקט או רשת.
מ-Cloud Shell
gcloud compute service-attachments create apache-service-attachment \ --region=$region \ --producer-forwarding-rule=apache-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$project=5 \ --nat-subnets=psc-nat-subnet
כדאי לכתוב את ה-URI של Service Attachment (selfLink), כי תצטרכו אותו בשלב הבא כדי להגדיר את הקצה העורפי של PSC. כדי לקבל אותו, מריצים את הפקודה הבאה ב-Cloud Shell.
מ-Cloud Shell
gcloud compute service-attachments describe apache-service-attachment \ --region $region
מעתיקים את ה-URI החל מ-projects
דוגמה: projects/$project/regions/$region/serviceAttachments/apache-service-attachment
11. הגדרת VPC של צרכן
יצירת רשת VPC
מ-Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
יצירת תת-רשת
צריך תת-רשת בצד הצרכן שבה תופעל קבוצת נקודות הקצה ברשת (NEG) של Private Service Connect.
מ-Cloud Shell
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.0.0.0/28
12. הזמנת כתובת IP חיצונית ויצירת אישור בחתימה עצמית בצד הצרכן
כתובת IP חיצונית
יוצרים את כתובת ה-IP החיצונית הסטטית שתשמש מאוחר יותר בכלל ההעברה של מאזן העומסים, ומתעדים את כתובת ה-IP במשתנה של Cloud Shell.
מ-Cloud Shell
gcloud compute addresses create external-psc-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global export externalip=$(gcloud compute addresses describe external-psc-ip \ --format="get(address)" \ --global) echo $externalip
אישור עצמאי של צרכן
שוב, מבצעים את שלב 1 בהוראות כאן כדי ליצור אישור עם חתימה עצמית. אפשר להריץ את כל הפקודות ב-Cloud Shell. חוזרים לכאן אחרי השלמת שלב 1. במקום להחזיק תחום DNS ציבורי משלהם, אנחנו נשתמש בשירות DNS ציבורי עם תו כללי (wildcard) בקוד פתוח שנקרא nip.io. כתובת ה-URL הציבורית של שירות PSC תשתמש בכתובת ה-IP החיצונית שהגדרתם זה עתה. YOUR COMMON NAME MUST BE CONFIGURED WITH <YOUR-EXTERNAL-IP.nip.io>
יוצרים משאב אישור שמשוייך למאזן העומסים החיצוני. מחליפים את הפרמטרים של האישור והמפתח הפרטי בשמות הקבצים הספציפיים שלכם.
מ-Cloud Shell
gcloud compute ssl-certificates create consumer-service-cert \ --certificate=<your-consumer-certfile.cert> \ --private-key=<your-consumer-keyfile.pem> \ --global
13. יצירת הרכיבים של מאזן העומסים
ניצור מאזן עומסים חיצוני גלובלי של אפליקציות (ALB) עם NEG מסוג PSC שמפנה ל-Service Attachment החדש שיצרנו כשירות לקצה עורפי.
צריך להכין את ה-URI של צירוף השירות שציינתם בשלב האחרון. מחליפים את psc-target-service שבהמשך ב-URI שלכם.
מ-Cloud Shell
gcloud compute network-endpoint-groups create apache-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \ --region=$region \ --network=consumer-vpc \ --subnet=consumer-subnet
יוצרים את השירות לקצה העורפי.
מ-Cloud Shell
gcloud compute backend-services create apache-pscneg-bes \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend apache-pscneg-bes \ --network-endpoint-group=apache-psc-neg \ --network-endpoint-group-region=$region \ --global
יצירת מפת כתובות ה-URL
מ-Cloud Shell
gcloud compute url-maps create consumer-url-map \ --default-service=apache-pscneg-bes \ --global
יוצרים את שרתי ה-proxy של HTTPS היעד.
מ-Cloud Shell
gcloud compute target-https-proxies create psc-https-proxy \ --url-map=consumer-url-map \ --ssl-certificates=consumer-service-cert
יצירת כלל ההעברה
מ-Cloud Shell
gcloud compute forwarding-rules create external-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=external-psc-ip \ --global \ --target-https-proxy=psc-https-proxy \ --ports=443
14. יצירת תחום DNS ציבורי
מ-Cloud Shell
gcloud dns managed-zones create "psc-service" \ --dns-name=$externalip.nip.io. \ --description="public dns for psc service" \ --visibility=public
מ-Cloud Shell
gcloud dns record-sets transaction start \ --zone="psc-service" gcloud dns record-sets transaction add $externalip \ --name=$externalip.nip.io \ --ttl=300 \ --type=A \ --zone="psc-service" gcloud dns record-sets transaction execute \ --zone="psc-service"
15. בדיקת החיבור של PSC לצרכן
לפני הבדיקה, צריך להמתין 7 עד 10 דקות כדי לאפשר את ההפצה של ה-DNS הציבורי.
מ-Cloud Shell
curl https://$externalip.nip.io -k
אפשר גם לבדוק מהדפדפן. כדי לעשות זאת, מזינים את הכתובת https://<YOUR-EXTERNAL-IP>.nip.io בדפדפן או במסוף במחשב.
התוצאה הצפויה
PSC Service
16. שלבי הניקוי
מחיקת רכיבי מעבדה ממסוף Cloud Shell אחד
gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q gcloud dns managed-zones delete "psc-service" -q gcloud compute forwarding-rules delete external-fr --global -q gcloud compute target-https-proxies delete psc-https-proxy -q gcloud compute url-maps delete consumer-url-map --global -q gcloud compute backend-services delete apache-pscneg-bes --global -q gcloud compute network-endpoint-groups delete apache-psc-neg --region=$region -q gcloud compute ssl-certificates delete consumer-service-cert --global -q gcloud compute addresses delete external-psc-ip --global -q gcloud compute networks subnets delete consumer-subnet --region $region -q gcloud compute networks delete consumer-vpc -q gcloud compute instances delete vm-client --zone=us-east4-a -q gcloud compute service-attachments delete apache-service-attachment --region $region -q gcloud compute forwarding-rules delete apache-fr --region $region -q gcloud compute target-https-proxies delete https-proxy --region $region -q gcloud compute url-maps delete producer-url-map --region $region -q gcloud compute backend-services delete apache-bes --region $region -q gcloud compute health-checks delete lb-apache-service-hc --region $region -q gcloud compute addresses delete apache-service-ip --region $region -q gcloud compute ssl-certificates delete producer-service-cert --region $region -q gcloud compute instance-groups managed delete psc-service-mig --region $region -q gcloud compute health-checks delete service-mig-healthcheck --global -q gcloud compute instance-templates delete apache-service-template -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute routers nats delete central-nat --router=central-cr --region $region -q gcloud compute routers delete central-cr --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete service-subnet --region $region -q gcloud compute networks subnets delete test-client-subnet --region us-east4 -q gcloud compute networks subnets delete central-proxy-subnet --region $region -q gcloud compute networks delete producer-vpc -q
17. מעולה!
כל הכבוד על השלמת ה-Codelab.
מה עסקנו בו
- יצירת קצה עורפי מסוג PSC שמשויך למאזן העומסים החיצוני הגלובלי של אפליקציות
- הגדרת שירות אינטרנט מנוהל של Apache וחשיפה שלו כשירות PSC באמצעות Service Attachment
- יצירת אישורי SSL לסיום SSL במאזני עומסים פנימיים וחיצוניים של אפליקציות
- הגדרת תחום ציבורי ב-Cloud DNS כדי לגשת לשירות PSC