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

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

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

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

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.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.
  • מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-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

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

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

אתם יכולים להשתמש בשמות ה-DNS האלה בבקשות ה-API כדי להפנות את הבקשה לנקודת הקצה (endpoint) של Private Service Connect. אפשר גם להשתמש בשמות ה-DNS האלה בכותרת Host של הבקשה.

אם רוצים להשתמש בנקודת קצה (endpoint) של Private Service Connect עם לקוח או אפליקציה שמאפשרים גישה לממשקי Google APIs ולשירותים של Google, צריך לעדכן את הלקוח או האפליקציה כך שישתמשו בשמות ה-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 

מתחברים למופע של מכונה וירטואלית (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, מתחברים ל-psc-instance-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"

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, המארח 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. בשלב הבא, נעדכן את קובץ ה-VM‏ 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

אימות ההגדרה, הסדר של [פרטי הכניסה] הוא קריטי לחיפוש 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 lookup

בכרטיסייה 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

יומני ניפוי הבאגים מאשרים שאפשר להגיע לקטגוריית האחסון דרך נקודת הקצה (endpoint) של 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 במכונה וירטואלית 2 שפועלת מול googleapis.com הציבורי
  • שימוש ב-Tcpdump כדי לאמת את פענוח ה-DNS