Private Service Connect ל-Google APIs

1. מבוא

באמצעות Private Service Connect, אפשר ליצור נקודות קצה פרטיות באמצעות כתובות IP פנימיות גלובליות בתוך רשת ה-VPC כדי לגשת ל-Google APIs. אפשר להקצות שמות DNS לכתובות ה-IP הפנימיות האלה עם שמות משמעותיים כמו storage-pscendpoint.p.googleapis.com ו-Bigtable-adsteam.p.googleapis.com. במקום לשלוח בקשות API לנקודות קצה (endpoint) של שירות ציבורי, כמו storage.googleapis.com, אפשר לשלוח את הבקשות לנקודת הקצה של Private Service Connect, שהיא פרטית ופנימית לרשת ה-VPC.

השמות וכתובות ה-IP האלה הם פנימיים ברשת ה-VPC שלכם ובכל הרשתות המקומיות שמחוברות אליה באמצעות מנהרות Cloud VPN או קבצים מצורפים ל-Cloud Interconnect (VLAN).

אתם יכולים לקבוע אילו תעבורת נתונים תופנה לכל נקודת קצה, ולהדגים שהתנועה נשארת בתוך Google Cloud.

מה תלמדו

  • תרחישים לדוגמה של קישור לשירות פרטי
  • דרישות רשת
  • ממשקי API נתמכים
  • יצירת נקודת קצה של Private Service Connect
  • יצירת קטגוריה של אחסון בענן
  • יצירה ועדכון של תחומים פרטיים ב-Cloud DNS
  • צריך ליצור NAT GW כדי לגשת ל-googleapis ציבורי
  • יצירה ועדכון של קובץ תצורה של BOTO
  • ביצוע רשימת gsutil ב-VM1 שטופלה מול נקודת הקצה של שירות PSC
  • ביצוע רשימת gsutil ב-VM2 שטופלה מול googleapis.com ציבורי
  • שימוש ב-Tcpdump כדי לאמת רזולוציית DNS

מה צריך להכין

  • ידע ב-DNS, nano או עורך vi

2. תרחישים לדוגמה של קישור לשירות פרטי

אתם יכולים ליצור כמה נקודות קצה של Private Service Connect באותה רשת VPC. אין הגבלה על רוחב הפס לנקודת קצה מסוימת. נקודות קצה של Private Service Connect משתמשות בכתובות IP פנימיות גלובליות, ולכן כל משאב ברשת ה-VPC יכול להשתמש בהן.

אם יש כמה נקודות קצה, אפשר לציין נתיבי רשת שונים באמצעות כללי Cloud Router וכללי חומת אש.

  • אפשר ליצור כללים של חומת אש כדי למנוע ממכונות וירטואליות מסוימות לגשת ל-Google APIs דרך נקודת קצה (endpoint) של Private Service Connect, ובמקביל לאפשר למכונות וירטואליות אחרות לקבל גישה.
  • אפשר להגדיר כלל חומת אש במכונה וירטואלית שלא מאפשר את כל תעבורת הנתונים לאינטרנט. התנועה שנשלחת לנקודות הקצה של Private Service Connect עדיין מגיעה ל-Google.
  • אם יש לכם מארחים בארגון שמחוברים ל-VPC באמצעות מנהרת Cloud VPN או קובץ מצורף ב-Cloud Interconnect (VLAN), תוכלו לשלוח בקשות מסוימות דרך המנהרה או VLAN, ובמקביל לשלוח בקשות אחרות באינטרנט הציבורי. ההגדרה הזו מאפשרת לעקוף את המנהרה או את ה-VLAN בשביל שירותים כמו Google Books שלא נתמכים במסגרת 'גישה פרטית ל-Google'. כדי ליצור את ההגדרות האלה, צריך ליצור נקודת קצה (endpoint) של Private Service Connect, לפרסם את כתובות ה-IP של נקודת הקצה של Private Service Connect באמצעות מודעות מסלולים בהתאמה אישית ב-Cloud Router ולהפעיל מדיניות להעברה נכנסת של Cloud DNS. האפליקציה יכולה לשלוח בקשות מסוימות דרך מנהרת Cloud VPN או דרך הקובץ המצורף Cloud Interconnect (VLAN) באמצעות השם של נקודת הקצה של Private Service Connect, ובקשות אחרות באינטרנט באמצעות שם ה-DNS שמוגדר כברירת מחדל.
  • אם תחברו את הרשת המקומית שלכם לרשת ה-VPC באמצעות מספר קבצים מצורפים של Cloud Interconnect (VLAN), תוכלו לשלוח חלק מתעבורת הנתונים המקומית דרך VLAN אחד ואת השאר דרך אחרת, כפי שמוצג באיור 2. כך תוכלו להשתמש ברשת אזורית נרחבת משלכם במקום ברשת של Google, ולשלוט בתנועת הנתונים כדי לעמוד בדרישות גיאוגרפיות. כדי ליצור את ההגדרות האישיות האלה, צריך ליצור שתי נקודות קצה של Private Service Connect. יוצרים מודעה מותאמת אישית של מסלול עבור נקודת הקצה הראשונה בסשן BGP של ה-Cloud Router שמנהל את ה-VLAN הראשון, ויוצרים מודעה אחרת של מסלול מותאם אישית לנקודת הקצה השנייה בסשן BGP של ה-Cloud Router שמנהל את ה-VLAN השני. מארחים מקומיים שמוגדרים להשתמש בשם של נקודת הקצה של Private Service Connect שולחים תעבורת נתונים דרך הקובץ המצורף של Cloud Interconnect (VLAN) המתאים.
  • אפשר גם להשתמש במספר קבצים מצורפים של Cloud Interconnect (VLAN) בטופולוגיה פעילה או פעילה. אם אתם מפרסמים את אותה כתובת IP של נקודת קצה של Private Service Connect באמצעות מודעות מסלולים בהתאמה אישית לסשנים של BGP ב-Cloud Routers שמנהלים את ה-VLAN, חבילות שנשלחות ממערכות מקומיות לנקודות הקצה ינותבו בין רשתות VLAN באמצעות ECMP.

5e142c2fbf6f010e.png

איור 1. באמצעות הגדרת Private Service Connect, Cloud Router ומארחים מקומיים, אפשר לקבוע איזה קובץ מצורף של Cloud Interconnect (VLAN) ישמש לשליחת תעבורת נתונים ל-Google APIs.

3. דרישות רשת

כדי להשתמש ב-Private Service Connect, למכונות וירטואליות (VM) ללא כתובות IP חיצוניות צריך להיות הממשק הראשי ברשת משנה עם גישה פרטית ל-Google.

מכונה וירטואלית עם כתובת IP חיצונית יכולה לגשת לממשקי API ולשירותים של Google באמצעות נקודות קצה של Private Service Connect, גם אם גישה פרטית ל-Google מופעלת ברשת המשנה שלה וגם אם לא. הקישוריות לנקודת הקצה של Private Service Connect נשארת בתוך הרשת של Google.

אי אפשר לגשת לנקודות הקצה (endpoint) של Private Service Connect מרשתות VPC מקושרות.

ממשקי API נתמכים

כשיוצרים נקודת קצה של Private Service Connect, בוחרים את חבילת ממשקי ה-API שצריך גישה אליה: all-apis או vpc-sc.

חבילות ה-API מעניקות גישה לאותם ממשקי API שזמינים דרך VIPs של גישה פרטית ל-Google.

  • חבילת all-apis מספקת גישה לאותם ממשקי API כמו private.googleapis.com.
  • חבילת vpc-sc מספקת גישה לאותם ממשקי API כמו limited.googleapis.com.

4. טופולוגיה של Codelab תרחיש לדוגמה

2ac275eb86f26338.png

איור 1 – הטופולוגיה של Codelab

תרחיש לדוגמה של Codelab –

הלקוח שלנו דורש שילוב של גישה פרטית (interconnect) לגישה ציבורית של Googleapis לצורך העברת נתונים באחסון בענן. כדי לעמוד בדרישות של הלקוחות שלנו, נפרוס את Private Service Connect שכוללים כתובת ייחודית /32, הגדרת BOTO ועדכונים של רשומת DNS. מכונה וירטואלית 1 תשתמש ב-PSC לגישה לקטגוריה של אחסון בענן; לעומת זאת, VM2 תשתמש בטווחי IP ציבוריים של googleapis.com דרך NAT GW.

כל ההיבטים של שיעור ה-Lab פרוסים ב-Google Cloud Platform, אבל אותו תרחיש לדוגמה רלוונטי לפריסה היברידית של Cloud Cloud שמחייבת הפרדת תעבורת נתונים.

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה בשיעור ה-Lab הזה יכולה להתבצע באמצעות דפדפן בלבד.

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

הפעלת ממשקי API

ב-Inside Cloud Shell, מוודאים שמזהה הפרויקט מוגדר

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

הפעלת כל השירותים הנחוצים

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

7. יצירת רשת VPC

רשת VPC

מ-Cloud Shell

gcloud compute networks create psc-lab --subnet-mode custom

יצירת רשת משנה

מ-Cloud Shell

gcloud compute networks subnets create psclab-subnet \
--network psc-lab --range 10.0.0.0/24 --region us-central1 --enable-private-ip-google-access

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

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

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

מ-Cloud Shell

gcloud compute firewall-rules create psclab-ssh \
    --network psc-lab --allow tcp:22 --source-ranges=35.235.240.0/20

יצירת מכונה של Cloud NAT

יצירת Cloud Router

מ-Cloud Shell

gcloud compute routers create crnat \
    --network psc-lab \
    --asn 65000 \
    --region us-central1

יצירת Cloud NAT

מ-Cloud Shell

gcloud compute routers nats create cloudnat \
    --router=crnat \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging \
    --region us-central1

8. יצירת נקודת קצה של Private Service Connect

כשמגדירים את כתובת ה-IP <pscendpointip> של נקודת הקצה של Private Service Connect, צריך לספק כתובת IP ייחודית שלא מוגדרת ב-VPC.

מ-Cloud Shell

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=192.168.255.250 \
    --network=psc-lab

אחסון 'pscendpointip' משך שיעור ה-Lab

pscendpointip=$(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")

echo $pscendpointip

אפשר ליצור כלל העברה כדי לחבר את נקודת הקצה לממשקי API ולשירותים של Google.

מ-Cloud Shell

gcloud compute forwarding-rules create pscendpoint \
    --global \
    --network=psc-lab \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

הצגת רשימה של נקודות הקצה שהוגדרו ל-Private Service Connect

מ-Cloud Shell

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

תיאור נקודות הקצה שהוגדרו ל-Private Service Connect

מ-Cloud Shell

gcloud compute forwarding-rules describe \
    pscendpoint --global

9. יצירת קטגוריה

יוצרים קטגוריה של Cloud Storage ומחליפים את BUCKET_NAME בשם ייחודי גלובלי מועדף עליך.

מ-Cloud Shell

gsutil mb  -l us-central1 -b on gs://BUCKET_NAME

אחסון של ‘BUCKET_NAME' משך שיעור ה-Lab

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

10. הגדרת ה-DNS

כשיוצרים נקודת קצה של Private Service Connect, אפליקציית Service Directory יוצרת רשומת DNS לממשקי ה-API והשירותים שזמינים באמצעות נקודת הקצה הזו.

רשומות ה-DNS מפנות לכתובת ה-IP של נקודת הקצה של Private Service Connect, והן בפורמט הזה: SERVICE-ENDPOINT.p.googleapis.com.

תוכלו להשתמש בשמות ה-DNS האלה בבקשות ה-API כדי להפנות את הבקשה לנקודת הקצה שלכם מסוג Private Service Connect. אפשר להשתמש בשמות ה-DNS האלה גם בכותרת 'מארח' של הבקשה.

אם רוצים להשתמש בנקודת קצה של Private Service Connect בלקוח או באפליקציה שמשתמשים בממשקי API ובשירותים של Google, צריך לעדכן את הלקוח או האפליקציה כך שישתמשו בשמות ה-DNS של p.googleapis.com.

פרטים נוספים זמינים במסמכי התיעוד של ספריית הלקוח או ספריית הלקוח. לדוגמה:

  • Python: אפשר להגדיר את api_endpoint ב-Client options class (סיווג אפשרויות לקוח) שבחבילת google-api-core.
  • Go: אפשר להגדיר את OnEndpoint בחבילת האפשרויות של לקוח בחבילת ה-API.
  • gcloud: אפשר להגדיר את api_endpoint_overrides באמצעות הפקודה הזו. gcloud config set api_endpoint_overrides/SERVICE ENDPOINT_URL

לדוגמה: gcloud config set api_endpoint_overrides/storage https://storage-xyz.p.googleapis.com/storage/v1/

אם לא ניתן להגדיר את הלקוח או האפליקציה לשימוש בנקודת קצה אחרת, צריך ליצור רשומות DNS שיותאמו לשמות ה-DNS המוגדרים כברירת מחדל. לדוגמה, storage.googleapis.com. מידע נוסף זמין במאמר יצירת רשומות DNS באמצעות שמות DNS שמוגדרים כברירת מחדל.

אימות רשומת ה-DNS

ממסוף Cloud, מאמתים את רשומת ה-DNS שנוצרה בקטע 'שירותי רשת' ← 'Cloud DNS'. שימו לב לשם ה-DNS שנוצר, 'p.googleapis.com'.

11. יצירת מכונות וירטואליות

יצירת מכונה וירטואלית (psc-instance-1) המשמשת לאימות התחברות לשירות פרטי

מ-Cloud Shell

  gcloud compute instances create psc-instance-1 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

מתחברים למכונת ה-VM (psc-instance-1)

כניסת SSH למכונה הווירטואלית דרך Cloud Shell

gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

כדי ליצור מסופים נוספים של Cloud Shell, לוחצים על + (צילום מסך בהמשך) שלוש פעמים.

69ea94e1527912bb.png

יצירת מכונה וירטואלית (psc-instance-2) המשמשת לאימות Googleapis ציבורי

מכרטיסייה 2

  gcloud compute instances create psc-instance-2 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

מכרטיסייה 2 SSH ל-VM דרך Cloud Shell

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

מכרטיסייה 3 SSH אל psc-instance-1 דרך Cloud Shell

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

מכרטיסייה 4 Shell SSH אל psc-instance-2 דרך Cloud Shell

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

12. אימות ההתנהגות הקיימת של Gsutil

מכרטיסייה 4 (psc-instance-2) מתחילים את tcpdump ועוקבים אחרי תנועת ה-DNS.

sudo tcpdump -vv -i eth0 port 53

בדיקת חיפוש ה-DNS של קטגוריית האחסון מכרטיסייה 2 (psc-instance-2)

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
gsutil -D ls gs://$BUCKET_NAME

בודקים את ניפוי הבאגים ב-gsutil, רזולוציית DNS משמשת ב-HOST storage.googleapis.com.

<snip>
send: 'GET /storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\nHost: storage.googleapis.com\r\ncontent-length: 0\r\nauthorization: Bearer ya29.c.KpkB7wfaMjfc_WXEKCeNF4Md0fEHnfDU7tqBf3cd0u43yEmYXqj8fX_X5wWdNdDVH6k1EkjeAeIJDzKGvyjPOkf1Io2kVeUqYX69sDv53huW1NslffjAHKchbZ0CP3Cg83TS3Pa55jLcuE0TLbYycVrgSbD3H90LaapUGbWD3kj4IsJLf9J8R98Bqobu8HZwwqk92hlZ4zVzRqOM\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

בכרטיסייה 4 (psc-instance-2), מוודאים שרשומות DNS A הציבוריות של GoogleAPI.com משמשות לגישה לקטגוריית האחסון.

metadata.google.internal.domain > psc-instance-2.c.yourprojectname.internal.33973: [udp sum ok] 36442 q: A? storage.googleapis.com. 11/0/0 storage.googleapis.com. A 108.177.111.128, storage.googleapis.com. A 142.250.128.128, storage.googleapis.com. A 74.125.70.128, storage.googleapis.com. A 74.125.201.128, storage.googleapis.com. A 64.233.183.128, storage.googleapis.com. A 173.194.198.128, storage.googleapis.com. A 172.217.219.128, storage.googleapis.com. A 142.250.136.128, storage.googleapis.com. A 209.85.234.128, storage.googleapis.com. A 172.217.212.128, storage.googleapis.com. A 172.217.214.128

13. שינוי ההתנהגות של Gsutil

תזכורת: בשלב הקודם יצרתם אזור DNS פרטי ורשומת A שממופה לכתובת ה-IP של נקודת הקצה של PSC. בשלב הבא נקבע את אופן הפעולה של gsutil על ידי עדכון קובץ ה-VM BOTO ב-psc-instance-1.

צפייה בהגדרות ברירת המחדל של BOTO מטרמינל של מכונת VM בכרטיסייה 1 (psc-instance-1)

[psc-instance ~]$ more  /etc/boto.cfg

הפלט (המזהה של project_id יהיה שונה)

[GSUtil]
default_project_id  = [your project number]
default_api_version = 2

[GoogleCompute]
service_account = default

מעדכנים את הגדרת BOTO באמצעות nano או VI Editor, ומקפידים להעתיק ולהדביק את כל הרשומות.

דוגמה: sudo nano /etc/boto.cfg

או

דוגמה: sudo vi /etc/boto.cfg

מהכרטיסייה טרמינל של מכונת VM 1(psc-instance-1)

[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

אימות ההגדרות, הסדר של [Credentials] הוא קריטי לחיפוש DNS

more /etc/boto.cfg
[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

[GSUtil]
default_project_id  = [your project number
default_api_version = 2

[GoogleCompute]
service_account = default

14. אימות ההתנהגות המעודכנת של חיפוש ב-gsutil

מכרטיסייה 3 (psc-instance-1) מתחילים את tcpdump ועוקבים אחרי תנועת ה-DNS.

sudo tcpdump -vv -i eth0 port 53

בדיקת חיפוש gsutil של קטגוריית אחסון מכרטיסייה 1 (psc-instance-1)

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

gsutil -D ls gs://$BUCKET_NAME

יומני ניפוי באגים מאשרים שניתן להגיע לקטגוריית האחסון דרך נקודת הקצה 'pscendpoint' של Private Service Connect

פלט:

<snip>
INFO 0131 22:14:18.795986 base_api.py] Making http GET to https://storage-pscendpoint.p.googleapis.com/storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000
INFO 0131 22:14:18.796415 base_api.py] Headers: {u'Host': 'www.googleapis.com',
 'accept': 'application/json',
 'accept-encoding': 'gzip, deflate',
 'content-length': '0',
 'user-agent': 'apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0'}
INFO 0131 22:14:18.796502 base_api.py] Body: (none)
connect: (storage-pscendpoint.p.googleapis.com, 443)
send: 'GET /storage/v1/b/psc-bucket/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\ncontent-length: 0\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\nhost: www.googleapis.com\r\nauthorization: Bearer ya29.c.KpkB7wd3XWiYeRyTuth5_HPlNV-hPwc2Nn7RSIeMpzrpa_j4EsMPl2m_mDGKAcGHvYIgiC5bT2UVQirAPpSbbpToa6G6lkaBbH5SZwHwgNXYfisp5Ww1UjXe4rTa69a_Wp0WesafcwPNnYzDo3xf5VGh3iGhySA04kTXuyT--MgOU8U-XLII2LJQxUWlV8KEdrvyCuqRb-jsDdk_\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

בכרטיסייה 3 (psc-instance-1), מוודאים שכתובת ה-IP של נקודת הקצה (endpoint) של PSC היא רשומת DNS A שמשמשת כשמנסים לגשת לקטגוריית האחסון.

@psc-instance-1 ~]$ sudo tcpdump -vv -i eth0 port 53
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
05:02:33.936256 IP (tos 0x0, ttl 64, id 55416, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0xcceb!] 34796+ A? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.936269 IP (tos 0x0, ttl 64, id 55417, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0x3ebd!] 5632+ AAAA? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.944018 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 98)
    metadata.google.internal.domain > psc-instance-1.c.yourprojectname.42296: [udp sum ok] 34796 q: A? storage-pscendpoint.p.googleapis.com. 1/0/0 storage-pscendpoint.p.googleapis.com. A 10.10.110.10 (70)
05:02:33.946005 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 175)

אימות שכתובת ה-IP של נקודת הקצה של Private Service Connect משמשת עכשיו לרזולוציית DNS

מכרטיסייה 1

nslookup storage-pscendpoint.p.googleapis.com

פלט

@psc-instance ~]$ nslookup storage-pscendpoint.p.googleapis.com
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
Name:   storage-pscendpoint.p.googleapis.com
Address: <pscip>

15. שלבי ניקוי

יציאה ממכונת VM (כל הכרטיסיות)

exit

מטרמינל יחיד של Cloud Shell, מוחקים את רכיבי שיעור ה-Lab

gcloud compute routers nats delete cloudnat --router=crnat --region=us-central1 --quiet

gcloud compute routers delete crnat --region=us-central1 --quiet

gcloud compute forwarding-rules delete pscendpoint --global --quiet

gcloud compute addresses delete psc-ip --global --quiet

gsutil rm -r gs://$BUCKET_NAME

gcloud compute instances delete psc-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete psc-instance-2 --zone=us-central1-a --quiet

gcloud compute firewall-rules delete psclab-ssh --quiet

gcloud compute networks subnets delete psclab-subnet --region us-central1 --quiet

gcloud compute networks delete psc-lab --quiet

במסוף, מוודאים שמוצג הפרויקט הנכון ובוחרים באפשרות Networking Services ← Cloud DNS.

16. מעולה!

ברכות על השלמת ה-Codelab.

אילו נושאים דיברנו?

  • תרחישים לדוגמה של קישור לשירות פרטי
  • דרישות רשת
  • ממשקי API נתמכים
  • נוצרה נקודת קצה (endpoint) של Private Service Connect
  • נוצרה קטגוריה של אחסון בענן
  • קובץ תצורה מסוג BOTO עודכן
  • יצרת חבילת NAT GW
  • ביצוע רשימת gsutil ב-VM1 שניתנת לפתרון מול נקודת הקצה של שירות PSC
  • ביצוע רשימת gsutil ב-VM2 שניתנת לפתרון מול googleapis.com ציבורי
  • שימוש ב-Tcpdump כדי לאמת רזולוציית DNS