Private Service Connect ל-Google APIs

1. מבוא

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

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

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

מה תלמדו

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

מה תצטרכו

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

2. תרחישי שימוש ב-Private Service Connect

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

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

  • אתם יכולים ליצור כללי חומת אש כדי למנוע ממכונות וירטואליות מסוימות לגשת לממשקי Google API דרך נקודת קצה של Private Service Connect, ולאפשר למכונות וירטואליות אחרות לגשת אליהם.
  • יכול להיות שיהיה לכם כלל חומת אש במכונה וירטואלית שיחסום את כל התעבורה לאינטרנט, אבל התעבורה שנשלחת לנקודות קצה של Private Service Connect עדיין תגיע ל-Google.
  • אם יש לכם מארחים מקומיים שמחוברים ל-VPC באמצעות מנהרת Cloud VPN או צירוף ל-Cloud Interconnect ‏ (VLAN), אתם יכולים לשלוח חלק מהבקשות דרך המנהרה או ה-VLAN, ולשלוח בקשות אחרות דרך האינטרנט הציבורי. ההגדרה הזו מאפשרת לעקוף את המנהרה או את ה-VLAN בשביל שירותים כמו Google ספרים שלא נתמכים בגישה פרטית ל-Google. כדי ליצור את ההגדרה הזו, צריך ליצור נקודת קצה של 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 אחד ואת השאר דרך VLAN אחרים, כמו שמוצג באיור 2. האפשרות הזו מאפשרת לכם להשתמש ברשתות תקשורת רחבות משלכם במקום ברשתות של Google, ולשלוט בהעברת הנתונים כדי לעמוד בדרישות גיאוגרפיות. כדי ליצור את ההגדרה הזו, צריך ליצור שתי נקודות קצה של Private Service Connect. יוצרים פרסום של מסלול מותאם אישית לנקודת הקצה הראשונה בסשן ה-BGP של Cloud Router שמנהל את ה-VLAN הראשון, ויוצרים פרסום שונה של מסלול מותאם אישית לנקודת הקצה השנייה בסשן ה-BGP של Cloud Router שמנהל את ה-VLAN השני. מארחים מקומיים שהוגדרו להשתמש בשם של נקודת הקצה (endpoint) של Private Service Connect שולחים תנועה דרך צירוף ה-Cloud Interconnect המתאים (VLAN).
  • אפשר גם להשתמש בכמה קבצים מצורפים של Cloud Interconnect ‏ (VLAN) בטופולוגיה פעילה/פעילה. אם מפרסמים את אותה כתובת IP של נקודת הקצה של Private Service Connect באמצעות פרסום מסלולים בהתאמה אישית עבור סשנים של BGP בנתבי Cloud שמנהלים את רשתות ה-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.

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

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

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

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

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

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

2ac275eb86f26338.png

איור 1 – טופולוגיית Codelab

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

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

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

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

הגדרת סביבה בקצב אישי

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

  1. לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.

העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

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

הפעלת ממשקי ה-API

ב-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 להתחבר למכונות הווירטואליות, צריך ליצור כלל חומת אש ש:

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

מ-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 של נקודת הקצה של Private Service Connect ‏<pscendpointip>, צריך לספק כתובת 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 האלה בכותרת Host של הבקשה.

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

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

  • ‫Python: אפשר להגדיר את api_endpoint במחלקה Client options בחבילה google-api-core.
  • ‫Go: אפשר להגדיר את WithEndpoint בחבילת אפשרויות הלקוח בחבילת ה-API.
  • gcloud: You can configure api_endpoint_overrides using this command. 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 שנוצרה בקטע Network Services (שירותי רשת) → Cloud DNS. שימו לב לשם ה-DNS שנוצר, p.googleapis.com.

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

יצירת מכונה וירטואלית (psc-instance-1) שמשמשת לאימות של Private Service Connect

מ-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 דרך 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, מתחברים ל-psc-instance-1 באמצעות SSH דרך 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, הכתובת HOST storage.googleapis.com משמשת לפתרון DNS

<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), מוודאים שרשומות ה-A של ה-DNS הציבורי של 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 של נקודת הקצה (endpoint) של PSC. בשלב הבא, נעדכן את קובץ BOTO של המכונה הווירטואלית ב-psc-instance-1 כדי לקבוע את אופן הפעולה של gsutil.

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

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

פלט (מזהה הפרויקט שלכם יהיה שונה)

[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 ב-bucket אחסון מכרטיסייה 1 (psc-instance-1)

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

gsutil -D ls gs://$BUCKET_NAME

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

פלט:

<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 של נקודת הקצה של ה-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 יחיד

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

ב-Console, מוודאים שמוצג הפרויקט הנכון, ואז בוחרים באפשרות Networking Services (שירותי רשת) ‏→ Cloud DNS.

16. מעולה!

כל הכבוד, סיימתם את ה-Codelab.

מה נכלל

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