התחברות לשירות פרטי עם הגדרת DNS אוטומטית

1. מבוא

Private Service Connect עם הגדרת DNS אוטומטית משתמש ב-Service Directory וב-Cloud DNS כדי ליצור באופן אוטומטי רשומות DNS שמתוכנתות עם כתובות ה-IP של נקודות הקצה של Private Service Connect של הצרכן.

מה תפַתחו

בסדנת הקוד הזו תלמדו ליצור ארכיטקטורה מקיפה של Private Service Connect שממחישה את השימוש ב-DNS אוטומטי, כפי שמתואר באיור 1.

האפשרות להשתמש ב-DNS אוטומטי מתאפשרת באמצעות:

  1. קובץ מצורף עם שירות ההפקה יוצר DNS אוטומטי על ידי אספקת דומיין ציבורי בבעלות עם הדגל '-domain-names' כשיוצרים את קובץ המצורף לשירות Private Service Connect.
  2. הצרכן מגדיר שם של נקודת קצה.
  3. DNS אוטומטי יוצר גם אזור DNS בשם goog-psc-default-us-central1 וגם שם DNS בשם cosmopup.net, בנוסף לרשומה בספריית השירותים שמכילה את שם נקודת הקצה של הצרכן.

היתרון של DNS אוטומטי מוצג בתרשים (4), שבו משתמש קצה יכול לתקשר עם נקודת הקצה של הצרכן דרך DNS, FQDN‏ stargazer.cosmopup.net.

איור 1

5e26a358454d1336.png

מה תלמדו

  • איך יוצרים מאזן עומסים פנימי מסוג HTTP(S)
  • איך יוצרים צירוף שירות עם DNS אוטומטי
  • איך יוצרים שירות הפקה ב-Private Service Connect
  • איך ניגשים לנקודת קצה של צרכן באמצעות DNS אוטומטי

מה צריך להכין

  • פרויקט ב-Google Cloud
  • דומיין ציבורי שבבעלותכם

2. לפני שמתחילים

עדכון הפרויקט כך שיתמוך ב-codelab

ב-Codelab הזה נעשה שימוש במשתני $כדי לעזור בהטמעת הגדרות gcloud ב-Cloud Shell.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

3. הגדרת המפיק

יצירת VPC של הבעלים

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute networks create producer-vpc --project=$projectname --subnet-mode=custom

יצירת תת-הרשתות של הבעלים

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1

הקצאת כתובת IP למאזן העומסים הפנימי

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute addresses create lb-ip \
    --region=us-central1 \
    --subnet=load-balancer-subnet \
    --purpose=GCE_ENDPOINT

הצגת כתובת ה-IP שהוקצה

משתמשים בפקודה compute addresses describe כדי להציג את כתובת ה-IP שהוקצה

gcloud compute addresses describe lb-ip  --region=us-central1 | grep address:

יצירת רשתות המשנה של שרת ה-proxy האזורי

הקצאת שרת proxy מתבצעת ברמת רשת ה-VPC, ולא ברמת מאזן העומסים. צריך ליצור תת-רשת לצורכי שרת proxy בלבד בכל אזור של רשת וירטואלית (VPC) שבה משתמשים במאזני עומסים מבוססי Envoy. אם פורסים כמה מאזני עומסים באותו אזור ובאותה רשת VPC, הם משתפים את אותה תת-רשת לשרתי proxy בלבד לאיזון עומסים.

  1. לקוח יוצר חיבור לכתובת ה-IP וליציאה של כלל ההעברה של מאזן העומסים.
  2. כל שרת proxy מקשיב בכתובת ה-IP וביציאה שצוינו בכלל ההעברה של מאזן העומסים התואם. אחד מהשרתים הווירטואליים מקבל את החיבור של הלקוח לרשת ומפסיק אותו.
  3. שרת ה-proxy יוצר חיבור למכונה הווירטואלית המתאימה לקצה העורפי, בהתאם למיפוי כתובות ה-URL ולשירותים לקצה העורפי של מאזן העומסים.

צריך ליצור תת-רשתות לשרתי proxy בלבד, גם אם רשת ה-VPC מוגדרת במצב אוטומטי וגם אם היא מוגדרת במצב מותאם אישית. תת-רשת של שרת proxy בלבד צריכה לספק 64 כתובות IP או יותר. היא מתאימה לקידומת שמכילה עד 26 תווים. הגודל המומלץ של תת-הרשת הוא /23 (512 כתובות שמיועדות לשרת proxy בלבד).

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute networks subnets create proxy-subnet-us-central \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-central1 \
  --network=producer-vpc \
  --range=172.16.0.0/23

יצירת תת-הרשתות של NAT ב-Private Service Connect

יוצרים רשת משנה ייעודית אחת או יותר לשימוש עם Private Service Connect. אם אתם משתמשים במסוף Google Cloud כדי לפרסם שירות, תוכלו ליצור את תת-הרשתות במהלך התהליך הזה. יוצרים את תת-הרשת באותו אזור שבו נמצא מאזן העומסים של השירות. אי אפשר להמיר תת-רשת רגילה לתת-רשת של Private Service Connect.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute networks subnets create psc-nat-subnet \
    --project $projectname \
    --network producer-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

יצירת כללי חומת האש של הבעלים

מגדירים כללי חומת אש כדי לאפשר תעבורת נתונים בין תת-הרשת של NAT ב-Private Service Connect לבין תת-הרשת של שרת ה-proxy בלבד ב-ILB.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute --project=$projectname firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24

ב-Cloud Shell, יוצרים את כלל חומת האש fw-allow-health-check כדי לאפשר לבדיקות התקינות של Google Cloud להגיע לשירות הבעלים (שירות הקצה העורפי) ביציאת ה-TCP 80.

gcloud compute firewall-rules create fw-allow-health-check \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp:80

יוצרים כלל חומת אש של תעבורת נתונים נכנסת (ingress) לתת-רשת של שרת proxy בלבד, כדי לאפשר למאזן העומסים לתקשר עם מכונות לקצה העורפי ביציאה 80 ב-TCP.

gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=172.16.0.0/23 \
    --rules=tcp:80

הגדרת Cloud Router ו-NAT

ב-codelab נעשה שימוש ב-Cloud NAT להתקנה של חבילות תוכנה, כי למכונה הווירטואלית אין כתובת IP חיצונית.

יוצרים את Cloud Router ב-Cloud Shell.

gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1

יוצרים את שער ה-NAT ב-Cloud Shell.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

הגדרה של קבוצת מופעים

בקטע הבא תלמדו איך ליצור מכונה ב-Compute Engine וקבוצת מכונות לא מנוהלות. בשלבים הבאים קבוצת המכונות תשמש כשירות לקצה העורפי של מאזן העומסים.

ב-Cloud Shell, יוצרים את בדיקת התקינות האזורית שמועברת לשירות הבעלים.

gcloud compute instances create app-server-1 \
    --project=$projectname \
    --machine-type=e2-micro \
    --image-family debian-10 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=gce-subnet \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
      EOF"

יוצרים את קבוצת המכונות הלא מנוהלת ב-Cloud Shell.

gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a

gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80

gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1

הגדרת מאזן העומסים

בשלבים הבאים תגדירו את מאזן העומסים הפנימי של HTTP, שיפורסם כקובץ צירוף לשירות בשלב מאוחר יותר.

יוצרים את בדיקת התקינות האזורית ב-Cloud Shell.

gcloud compute health-checks create http http-health-check \
    --region=us-central1 \
    --use-serving-port

יוצרים את שירות הקצה העורפי ב-Cloud Shell.

 gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=http-health-check \
      --health-checks-region=us-central1 \
      --region=us-central1

ב-Cloud Shell, מוסיפים קצוות עורפיים לשירות לקצה העורפי.

gcloud compute backend-services add-backend l7-ilb-backend-service \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-instance-group \
  --instance-group-zone=us-central1-a \
  --region=us-central1

ב-Cloud Shell, יוצרים את מפת כתובות ה-URL כדי לנתב בקשות נכנסות לשירות לקצה העורפי.

gcloud compute url-maps create l7-ilb-map \
    --default-service l7-ilb-backend-service \
    --region=us-central1

יוצרים את שרת ה-proxy היעד ל-HTTP.

gcloud compute target-http-proxies create l7-ilb-proxy\
    --url-map=l7-ilb-map \
    --url-map-region=us-central1 \
    --region=us-central1

יוצרים כלל העברה כדי לנתב בקשות נכנסות לשרת ה-proxy. אין להשתמש ברשת המשנה לשרתי proxy בלבד כדי ליצור את כלל ההעברה.

 gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=producer-vpc \
      --subnet=load-balancer-subnet \
      --address=lb-ip \
      --ports=80 \
      --region=us-central1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-central1

4. אימות מאזן העומסים

במסוף Cloud, עוברים אל Network Services → Load Balancing → Load Balancers. שימו לב לבדיקה המוצלחת של תקינות השירות לקצה העורפי

881567cc11627009.png

הבחירה ב-'l7-ilb-map' מניבה את כתובת ה-IP של הקצה הקדמי, שאמורה להיות זהה לכתובת ה-IP שמצאתם באמצעות grep בשלב מוקדם יותר, ומזהה את שירות הקצה העורפי.

bab89b0a7b4f95e9.png

5. יצירת קובץ מצורף עם השירות Private Service Connect

יצירת צירוף השירות

יוצרים את צירוף השירות ב-Cloud Shell. חשוב להוסיף את הנקודה בסוף שם הדומיין.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.

אופציונלי: אם משתמשים ב-VPC משותף, יוצרים את צירוף השירות בפרויקט השירות.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.

עוברים אל Network Services (שירותי רשת) → Private Service Connect כדי להציג את הקובץ המצורף לשירות שנוצר.

d27fee9073dbbe2.png

אם בוחרים באפשרות published-service, מקבלים פרטים נוספים, כולל ה-URI של קובץ המצורף לשירות שמשמש את הצרכן כדי ליצור חיבור Private Service Connect ושם הדומיין.

503df63730c62df2.png

פרטי השירות המצורף:

projects/<project name>/regions/us-central1/serviceAttachments/published-service

6. הגדרת הצרכן

הפעלת ממשקי API של צרכנים

ב-Cloud Shell אפשר לבצע את הפעולות הבאות:

gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com

יצירת רשת ה-VPC של הצרכן

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom

יצירת רשתות המשנה של הצרכנים

יוצרים את תת-הרשת של מכונה לבדיקה ב-Cloud Shell.

gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1

ב-Cloud Shell, יוצרים תת-רשת לנקודת הקצה של הצרכן.

gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1

יצירת נקודת הקצה של הצרכן (כלל העברה)

ב-Cloud Shell, יוצרים את כתובת ה-IP הסטטית שתשמש את נקודת הקצה של הצרכן.

gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10

אנחנו משתמשים ב-URI של צירוף השירות שנוצר קודם כדי ליצור את נקודת הקצה של הצרכן.

יוצרים את נקודת הקצה של הצרכן ב-Cloud Shell.

gcloud compute forwarding-rules create stargazer --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$projectname/regions/us-central1/serviceAttachments/published-service

7. אימות החיבור ברשת ה-VPC של הצרכן

ברשת ה-VPC של הצרכן, מוודאים שהחיבור ל-Private Service Connect הצליח. עוברים אל Network Services → Private Service Connect → Connected Endpoints. שימו לב לחיבור שהוקם ל-stargazer ולכתובת ה-IP התואמת שיצרנו קודם.

c60812433c3e1676.png

כשבוחרים ב-psc-consumer-1, מוצגים פרטים כולל ה-URI של צירוף השירות

14d3e3b1e0aee3c2.png

8. אימות החיבור ברשת ה-VPC של היוצר

ברשת ה-VPC של הבעלים, מוודאים שהחיבור ל-Private Service Connect הצליח. עוברים אל Network Services → Private Service Connect→Published Service. שימו לב שחיבור השירות שפורסם מציין עכשיו כלל העברה אחד (נקודת קצה של חיבור).

911dbd7421bcfd3a.png

9. אימות ההגדרה האוטומטית של DNS

נבדוק את ההגדרות של ה-DNS ושל Service Directory.

הגדרת Cloud DNS

עוברים אל Network Services → Cloud DNS → Zones. האזור goog-psc-default-us-central ושם ה-DNS cosmopup.net נוצרים באופן אוטומטי.

4395e7b33fc42faa.png

הצגת ההגדרות של DNS ושל Service Directory

בחירת שם האזור מאפשרת לנו לראות איך Service Directory משולב עם Cloud DNS.

e4fe44d945b20451.png

הגדרת Service Directory

עוברים אל Network Services → Service Directory.

זוכרים את שם נקודת הקצה של הצרכן stargazer? הוא מתוכנת באופן אוטומטי ב-Service Directory ומאפשר לנו להגיע לנקודת הקצה של הצרכן באמצעות FQDN‏ stargazer.goog-psc-default–us-central1

602deab65b5ac315.png

10. אימות הגישה של הצרכנים לשירות של היוצרים

מרשת ה-VPC של הצרכן, ניצור מכונה וירטואלית כדי לבדוק את הקישוריות לשירות שפורסם, על ידי גישה לנקודת הקצה של הצרכן stargazer.cosmopup.net.

יוצרים את מכונה הבדיקה ב-VPC של הצרכן ב-Cloud Shell.

gcloud compute instances create db1 \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=db1-subnet \
    --no-address

כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, יוצרים כלל של חומת אש שמאפשר:

  • רלוונטי לכל מכונות ה-VM שרוצים לגשת אליהן באמצעות IAP.
  • הכלל מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-IP 35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP ש-IAP משתמש בהן להעברת TCP.

יוצרים את כלל חומת האש של IAP ב-Cloud Shell.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

מתחברים ל-consumer-vm באמצעות IAP ב-Cloud Shell כדי לאמת את הקישוריות לשירות של הבעלים באמצעות curl. אם חלף הזמן הקצוב לתפוגה, צריך לנסות שוב.

gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap

מבצעים בדיקת curl לאימות הקישוריות לשירות ההפקה. אחרי האימות, יוצאים מהמכונה הווירטואלית וחוזרים להנחיה של Cloud Shell

ב-Cloud Shell, מבצעים הפעלה של curl בדומיין המותאם אישית, לדוגמה stargazer.[custom-domain.com]. בפלט שבהמשך, מתבצעת הפעלה של curl נגד stargazer.cosmopup.net

user@db1:~$ curl -v stargazer.cosmopup.net
*   Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
< 
Welcome to App-Server-1 !!

יוצאים מהמכונה הווירטואלית וחוזרים להנחיה של Cloud Shell כדי להתחיל את משימות הניקוי

11. הסרת המשאבים

מוחקים את הרכיבים של ה-codelab מ-Cloud Shell.

gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet

gcloud compute instances delete db1 --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet 

gcloud compute networks subnets delete consumer-ep-subnet db1-subnet --region=us-central1 --quiet 

gcloud compute firewall-rules delete ssh-iap-consumer --quiet 

gcloud compute networks delete consumer-vpc --quiet 

gcloud compute service-attachments delete published-service --region=us-central1 --quiet 

gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet 

gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet 
 
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet 
 
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
 
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
 
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet 
 
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet 
 
gcloud compute addresses delete lb-ip --region=us-central1 --quiet 
 
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet 
 
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 
 
gcloud compute networks delete producer-vpc --quiet 

12. מזל טוב

מצוין, הגדרתם ואימתתם בהצלחה נקודת קצה של Private Service Connect עם הגדרת DNS אוטומטית.

יצרתם את התשתית של הבעלים, והוספתם צירוף שירות עם רישום דומיין ציבורי. למדתם איך ליצור נקודת קצה של צרכן ברשת ה-VPC של הצרכן, שמאפשרת קישוריות לשירות המקומי באמצעות DNS שנוצר באופן אוטומטי.

Cosmopup חושב שהקורסים של Codelab הם מדהימים!!

8c2a10eb841f7b01.jpeg

מה השלב הבא?

כדאי לעיין בחלק מהקורסים האלה ב-Codelab…

קריאה נוספת וסרטונים

מסמכי עזרה