1. מבוא
Private Service Connect מאפשר למפיק שירות להציע שירותים לצרכן. רשת VPC של יצרן שירות יכולה לתמוך במספר צרכני שירות.
יש שני סוגים של נקודות קצה של Private Service Connect שיכולות להתחבר לשירות שפורסם:
- נקודת קצה של Private Service Connect (על סמך כלל העברה)
בסוג הזה של נקודת קצה, הצרכנים מתחברים לכתובת IP פנימית שהם מגדירים. Private Service Connect מבצע תרגום כתובת רשת (NAT) כדי לנתב את הבקשה למפיק השירות.
- נקודת קצה (endpoint) של Private Service Connect עם אמצעי בקרה לשירות HTTP(S) לצרכנים (על סמך מאזן עומסים גלובלי מסוג HTTP(S)
בסוג הזה של נקודת קצה, צרכנים מתחברים לכתובת IP חיצונית. Private Service Connect משתמש בקבוצת נקודות קצה ברשת כדי לנתב את הבקשה לבעלים של השירות.
לשימוש במאזן עומסים גלובלי חיצוני מסוג HTTP(S) כנקודת אכיפת מדיניות יש כמה יתרונות:
- אפשר לשנות שמות של שירותים ולמפות אותם לכתובות URL לפי בחירתכם.
- אפשר להגדיר את מאזן העומסים כדי לרשום את כל הבקשות ב-Cloud Logging.
- אפשר להשתמש באישורי TLS בניהול הלקוח. או אישורים שמנוהלים על ידי Google.
ב-Codelab הזה תלמדו איך ליצור אמצעי בקרה לשירות HTTP(S) של לקוח מסוג Private Service Connect באמצעות ה-Global XLB כדי לגשת באופן פרטי לשירות ברשת אחרת. אפשר לבצע את תבנית ה-PSC הזו באמצעות פרויקט יחיד או פרויקטים נפרדים. לצורך שיעור ה-Lab הזה נשתמש בפרויקט יחיד עם שתי רשתות VPC נפרדות.
מה תלמדו
- יצירת נקודת קצה (endpoint) של Private Service Connect עם אמצעי בקרה על שירותי HTTP(S) של צרכנים באמצעות ה-Global XLB
- מגדירים שירות מנוהל לחשיפה דרך קובץ מצורף לשירות כדי לאשר חיבורי L7 XLB.
- יוצרים אישור SSL ומגדירים את שרת האינטרנט Apache שיסיים את ה-TLS ויקבל תעבורת נתונים ביציאה 443.
- יוצרים PSC NEG.
מה צריך להכין
- פרויקט ב-Google Cloud
- ידע בפריסת מכונות ובהגדרת רכיבי רשת
2. סביבת בדיקה
הסביבה שתיצרו תכלול מאזן עומסים חיצוני של HTTP(S) ו-PSC NEG ב-VPC לצרכנים. ה-VPC המייצר יארח שירות אינטרנט פשוט של Apache שמוגדר עם HTTPS. יוצרים שירות לקצה העורפי משירות האינטרנט Apache ומשירות הקצה העורפי הזה באמצעות מאזן עומסים פנימי של TCP שמוגדר באמצעות קובץ מצורף של שירות PSC.
3. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
- Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID
), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט. - יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות למחיקת המשאבים. בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
במסוף Google Cloud, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה בשיעור ה-Lab הזה יכולה להתבצע באמצעות דפדפן בלבד.
4. לפני שמתחילים
הפעלת ממשקי API
ב-Inside 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
5. Producer VPC, תת-רשת, הגדרת כללי חומת אש
רשת VPC
מ-Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
יצירת רשתות משנה
כדי לבצע תרגום של כתובת רשת (NAT) עבור PSC, יש צורך בתת-רשת בצד היצרן. לתשומת ליבך, המטרה היא PRIVATE_SERVICE_CONNECT. המשמעות היא שאי אפשר להשתמש ברשת המשנה הזו לפריסת עומסי עבודה.
מ-Cloud Shell
gcloud compute networks subnets create producer-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
אנחנו נפרוס שתי רשתות משנה ב-VPC המופק. האפשרות הראשונה לפרוס את השירות של היצרן, ואפשרות נוספת באזור אחר לפרוס vm של לקוח כדי לבדוק את הקישוריות לשירות דרך 'גישה גלובלית' במאזן העומסים הפנימי של TCP.
מ-Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/24 \ --region=$region
מ-Cloud Shell
gcloud compute networks subnets create client-subnet \ --network=producer-vpc \ --range=10.0.1.0/24 \ --region=us-east4
יצירת Cloud NAT
יש צורך ב-Cloud NAT כדי להתקין את החבילות המתאימות לשירותי המפיק שלנו.
מ-Cloud Shell
gcloud compute routers create service-cr \ --region=$region --network=producer-vpc \ --asn=65501
מ-Cloud Shell
gcloud compute routers nats create service-nat-gw \ --router=service-cr \ --router-region=$region \ --nat-custom-subnet-ip-ranges=service-subnet \ --auto-allocate-nat-external-ips
יצירת כללי חומת אש
בשיעור ה-Lab הזה תשתמשו ב-IAP כדי להתחבר למכונות שתיצרו. הכלל הבא של חומת האש יאפשר לכם להתחבר למכונות באמצעות IAP. אם אתם מעדיפים לא להשתמש ב-IAP, אתם יכולים לדלג על השלב הזה ולהוסיף כתובות IP ציבוריות במכונה, וליצור כלל חומת אש שמאפשר תעבורת נתונים נכנסת (ingress) ביציאת TCP 22 מ-0.0.0.0/0.
כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, יוצרים כלל של חומת אש:
- המדיניות חלה על כל מכונות וירטואליות שרוצים לגשת אליהן באמצעות IAP.
- תעבורת נתונים נכנסת (ingress) מטווח ה-IP 35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP שמשמשות להעברת TCP באמצעות IAP.
מ-Cloud Shell
gcloud compute firewall-rules create allow-ssh-iap \ --network producer-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
תנועת הלקוחות תגיע ממאזן העומסים הגלובלי מסוג HTTP(S) החיצוני, לכן צריך ליצור כלל חומת אש כדי לאפשר את התנועה הזו לשרתי היעד המתויגים שיארחו את שירות האינטרנט שלנו. בנוסף, נפתח את כלל חומת האש מ-client-subnet למטרות בדיקה.
מ-Cloud Shell
gcloud compute firewall-rules create allow-xlb-client \ --network=producer-vpc \ --direction=ingress \ --allow=tcp:443 \ --target-tags=psc-service \ --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24
יצירת שירות אינטרנט של Apache
ניצור שירות אינטרנט פשוט של Apache שמציג "שירות PSC"
יצירת תבנית של מכונה
מ-Cloud Shell
gcloud compute instance-templates create producer-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=psc-service \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
יצירה של בדיקת תקינות ל-MIG
מ-Cloud Shell
gcloud compute health-checks create https psc-service-mig-healthcheck \ --port=443 \ --global
יצירה של קבוצת מכונות מנוהלות
מ-Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=producer-service-template \ --health-check=psc-service-mig-healthcheck
הגדרת SSL בשרתי אינטרנט של Apache
בשלב הבא צריך להגדיר SSL בכל אחד משרתי האינטרנט של Apache. נעשה זאת על ידי יצירת אישור והוספת האישור לתצורת Apache.
יש להגדיר סיום SSL בשירותים לקצה העורפי כי השירות חייב לפעול לפני מאזן עומסים פנימי מסוג TCP/UDP (L4) לדפוס ה-PSC הספציפי הזה. מאזן העומסים הפנימי של TCP/UDP לא מסיים SSL בשכבת מאזן העומסים.
מתחילים ב-SSHing כדי להיכנס ל-VM הראשונה ב-MIG. התחום (zone) והשם של ה-VM יוקצו באופן דינמי לכל סביבה. במסוף: Compute Engine > מכונות VM כדי למצוא את השם והתחום של המכונות.
מ-Cloud Shell
gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>" --tunnel-through-iap --project $project
בשלב הבא ניצור את האישור באמצעות OpenSSL. תתבקשו למלא פרטים לגבי המדינה, המדינה, הרשות המוניציפאלית, הארגון, שם היחידה הארגונית, השם הפרטי וכתובת האימייל. המידע היחיד שעליך למלא צריך להיות השם המשותף, שעליו להיות FQDN פנימי לבחירתך. לצורך שיעור ה-Lab הזה, עליכם לבחור בכתובת example.com.
מ-Cloud Shell
sudo openssl genrsa -out private-key-file.pem 2048
מ-Cloud Shell
cat <<'EOF' >config.txt [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements [extension_requirements] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @sans_list [dn_requirements] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (e.g. server FQDN or YOUR name) emailAddress = Email Address [sans_list] DNS.1 = example.com EOF
מ-Cloud Shell
sudo openssl req -new -key private-key-file.pem \ -out csr.pem \ -config config.txt
מ-Cloud Shell
sudo openssl x509 -req \ -signkey private-key-file.pem \ -in csr.pem \ -out cert.cert \ -extfile config.txt \ -extensions extension_requirements \ -days 10
עכשיו נעדכן את פרטי התצורה של Apache בפרטי האישור החדשים שלנו.
sudo vi /etc/apache2/sites-enabled/default-ssl.conf
הוספת שורה מתחת ל-ServerAdmin שקוראת
ServerName example.com
מעדכנים את SSLCertificateFile ואת SSLCertificateKeyFile לגבי מיקום קובץ CERT.cert ואת המיקומים מסוג private-key-file.pem ב-VM. למטה מוצגת דוגמה. חשוב לעדכן את ה<profile> בשם הספרייה.
SSLCertificateFile /home/<profile>/cert.cert SSLCertificateKeyFile /home/<profile>/private-key-file.pem
סוגרים את העורך ומפעילים מחדש את Apache.
sudo a2enmod ssl sudo systemctl restart apache2
יוצאים מהמכונה וחוזרים על אותם שלבים במופע השני בקבוצת המכונות המנוהלות.
6. יצירת שירות Producer
בשלב הבא ניצור את רכיבי מאזן העומסים בשביל השירות.
יצירת בדיקת התקינות של מאזן העומסים.
מ-Cloud Shell
gcloud compute health-checks create https service-lb-healthcheck \ --port=443 \ --region=$region
יצירת השירות לקצה העורפי.
מ-Cloud Shell
gcloud compute backend-services create psc-backend-service \ --load-balancing-scheme=internal \ --protocol=TCP \ --region=$region \ --health-checks=service-lb-healthcheck \ --health-checks-region=$region gcloud compute backend-services add-backend psc-backend-service \ --region=$region \ --instance-group=psc-service-mig
יצירת כלל ההעברה. שימו לב שיש להגדיר את כלל ההעברה ביציאה 443 ועם גישה גלובלית. הדרישה הזו נדרשת כדי שדפוס ה-PSC הזה יפעל.
מ-Cloud Shell
gcloud compute forwarding-rules create producer-fr \ --region=$region \ --load-balancing-scheme=internal \ --network=producer-vpc \ --subnet=service-subnet \ --address=10.0.0.100 \ --ip-protocol=TCP \ --ports=443 \ --backend-service=psc-backend-service \ --backend-service-region=$region \ --allow-global-access
7. בדיקת השירות
לפני שניצור את הקובץ המצורף לשירות, ניצור לקוח באזור אחר שיבדוק את מאזן העומסים שהוגדר באמצעות Global Access, וכן את שירות Apache שהוגדר לסיים TLS.
מ-Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=client-subnet \ --no-address
SSH למכונה.
מ-Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
לבדוק את שירות Apache על ידי חיבור של יותר מ-443 דרך מאזן העומסים.
curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443
תוצאה צפויה
PSC Service
8. יצירת הקובץ המצורף לשירות
מ-Cloud Shell
gcloud compute service-attachments create pscservice \ --region=$region \ --producer-forwarding-rule=producer-fr \ --connection-preference=ACCEPT-AUTOMATIC \ --nat-subnets=producer-nat-subnet
חשוב לרשום את ה-URI של קובץ מצורף לשירות, כי תצטרכו אותו בשלב הבא של ההגדרה של נקודת הקצה. כדי לקבל אותו, מריצים את הפקודה הבאה ב-Cloud Shell
מ-Cloud Shell
gcloud compute service-attachments describe pscservice --region $region
מעתיקים את ה-URI החל מ-/projects.
דוגמה: /projects/<YOUR_PROJECT_ID>/regions/us-central1/serviceAttachments/pscservice
9. הגדרת VPC לצרכנים ותת-רשת
רשת VPC
מ-Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
יצירת רשת משנה
נדרשת רשת משנה בצד הצרכן, שבה תתבצע פריסה של Private Service Connect Network Group (NEG).
מ-Cloud Shell
gcloud compute networks subnets create psc-neg-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.100.200.0/24 \ --purpose=private
10. יצירת נקודת קצה (endpoint) של Private Service Connect ובדיקת החיבור
נעקוב אחר תהליך היצירה של PSC NEG שישויך לקובץ המצורף לשירות שיצרנו, נחבר את ה-PSC NEG לשירות לקצה העורפי ונשייך את השירות לקצה העורפי לכלל העברה.
בידקו את ה-URI של קובץ מצורף לשירות שציינו בשלב האחרון. צריך להחליף את כתובת ה-URL שלמטה ב-URI שלך.
מ-Cloud Shell
gcloud beta compute network-endpoint-groups create xlb-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \ --region=$region \ --network=consumer-vpc \ --subnet=psc-neg-subnet
יוצרים את כתובת ה-IP הציבורית של XLB ומשיגים את כתובת ה-IP האמיתית שהוקצתה לבדיקה במועד מאוחר יותר.
מ-Cloud Shell
gcloud compute addresses create xlb-psc-address \ --ip-version=IPv4 --global gcloud compute addresses describe xlb-psc-address --format="get(address)" --global
בשלב הבא ניצור את נקודת הקצה (endpoint) של PSC, שבמקרה הזה נמצאת במאזן עומסים חיצוני.
מ-Cloud Shell
gcloud beta compute backend-services create pscneg-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global
מ-Cloud Shell
gcloud beta compute backend-services add-backend pscneg-backend-service \ --network-endpoint-group=xlb-psc-neg \ --network-endpoint-group-region=$region \ --global
מ-Cloud Shell
gcloud beta compute url-maps create xlb-psc-map \ --default-service=pscneg-backend-service \ --global
מ-Cloud Shell
gcloud beta compute target-http-proxies create psc-http-proxy \ --url-map=xlb-psc-map
מ-Cloud Shell
gcloud beta compute forwarding-rules create xlb-psc-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=xlb-psc-address \ --target-http-proxy=psc-http-proxy \ --ports=80 \ --global
המתינו 5-7 דקות ולאחר מכן מזינים את כתובת ה-IP המשויכת לכתובת xlb-psc-address בסרגל הכתובות של הדפדפן.
אם "PSC Service" מוצגת, הגדרתם כראוי את הפתרון.
11. שלבי ניקוי
מטרמינל יחיד של Cloud Shell, מוחקים את רכיבי שיעור ה-Lab
gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet gcloud beta compute target-http-proxies delete psc-http-proxy --quiet gcloud beta compute url-maps delete xlb-psc-map --global --quiet gcloud beta compute backend-services delete pscneg-backend-service --global --quiet gcloud compute addresses delete xlb-psc-address --global --quiet gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet gcloud compute networks delete consumer-vpc --quiet gcloud compute service-attachments delete pscservice --region $region --quiet gcloud compute instances delete vm-client --zone=us-east4-a --quiet gcloud compute forwarding-rules delete producer-fr --region $region --quiet gcloud compute backend-services delete psc-backend-service --region $region --quiet gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet gcloud compute instance-templates delete producer-service-template --quiet gcloud compute firewall-rules delete allow-xlb-client --quiet gcloud compute firewall-rules delete allow-ssh-iap --quiet gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet gcloud compute routers delete service-cr --region $region --quiet gcloud compute networks subnets delete client-subnet --quiet gcloud compute networks subnets delete service-subnet --quiet gcloud compute networks subnets delete producer-nat-subnet --quiet gcloud compute networks delete producer-vpc --quiet
12. מעולה!
ברכות על השלמת ה-Codelab.
אילו נושאים דיברנו?
- יצירת נקודת קצה (endpoint) של Private Service Connect עם אמצעי בקרה על שירותי HTTP(S) של צרכנים באמצעות ה-Global XLB
- מגדירים שירות מנוהל לחשיפה דרך קובץ מצורף לשירות כדי לאשר חיבורי L7 XLB.
- יוצרים אישור SSL ומגדירים את שרת האינטרנט Apache שיסיים את ה-TLS ויקבל תעבורת נתונים ביציאה 443.
- יוצרים PSC NEG.