Private Service Connect – שימוש באמצעי בקרה לשירות HTTP(S) לצרכנים עבור XLB גלובלי לשירותים מנוהלים

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.

bbca972cf488ece.png

3. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט.
  • יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות למחיקת המשאבים. בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

במסוף Google Cloud, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:

55efc1aaa7a4d3ad.png

נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:

7ffe5cbb04455448.png

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 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.