Private Service Connect ל-Google APIs

1. מבוא

באמצעות Private Service Connect, אתם יכולים ליצור נקודות קצה פרטיות באמצעות כתובות IP פנימיות גלובליות בתוך רשת ה-VPC. אפשר להקצות שמות 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 או G Suite, עליכם ליצור חשבון).

MrEseyJH4tg9PuS3GzJa72onCqawwQiRm04c0YjnpR6WD3IciP1ICDh5e5RoxrG3tc5y44_Ynn9GB0Igjo3sTE0BlsAnCxJdhXn7egP3tX4rkzkub7ZCjOKc70kJvl07REnmPb3TGg

HgKQ1sLCGDGbz0e3RCc-FNa3fQliCtq67H-Oj9jzzYn_upkmNN1lOMQrQm8Jdvo6EEYAvSwDEjpH37bIG9ouBJcmS_xFYV1IHJoyAhsasS1SfYtZkO-RBwWPXRrr3Zt4r31ETcjJeQ

KHAY2ncSMFGZ2vGxcMEcNoIy_cuWGCaWAsrH0KsOVwkV5e93Ypfcq3sQ_HPIrV-NSocegQN2PnRUku_CVi1MM89O6qHIU6E32ZypJPxojkbRTJXET5JvtskIXgzFMk18-4NnNjzCJA

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

yEqEFRN4OGfeGJEfJplSt5sGY95BluU78i3Lk0Opo9caOYfrWUPBi_RglIfo9x078tH5Z_Obgq1wOhrEPV8k5OvMgI5e3aam1a7teXuimwTy-evcupc34_UEMmfAFkV-hnXwl559rg

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

BxRCLVCDNXX4OxwHppzaY9ghvuFTsgsozreyEHvRK9GPfsh3sW-kdwev6_gZdkX5FWPvb7M_Vp4FoyjFWwZxBMK6CLXiPwJgFbhz8Tgec-tyQR7GEdNjGMBca052yM8ga0UqzdHAmw

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

פלט

Created
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
psc-lab  CUSTOM       REGIONAL

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

מ-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

פלט

Created
NAME             REGION       NETWORK  RANGE
psclab-subnet  us-central1  psc-lab  10.0.0.0/24

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

מ-Cloud Shell

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

פלט

NAME        NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
psclab-ssh  psc-lab  INGRESS    1000      tcp:22        False

יצירת מכונה של 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 beta compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=<pscendpointip> \
    --network=psc-lab

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

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

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

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

מ-Cloud Shell

gcloud beta 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

נניח שיש לכם אפליקציה שמשתמשת ב-Google Cloud Storage. ללא חיבור לשירות פרטי, ייתכן שהאפליקציות שלכם יתחברו אל storage.googleapis.com, שכברירת מחדל מפנה לכתובת ציבורית מסוימת. באמצעות Private Service Connect, ניתן ליצור שמות כמו storage-psclab.p.googleapis.com ולהשתמש בהם. השם והכתובות נשמרים באופן פרטי לרשת ה-VPC ולכל הרשתות בארגון שמצורפות אליה.

Private Service Connect ל-DNS תואם למוסכמות מתן השמות, SERVICE-ENDPOINT.p.googleapis.com. בדוגמה שלמעלה, "storage" האם ה-SERVICE & 'psclab' הוא ENDPOINT. חשוב לכלול את הסימן "-" בין SERVICE ל-ENDPOINT.

כדי לגשת ל-Cloud Storage באמצעות נקודת קצה של Private Service Connect, יוצרים רשומת DNS (A) storage-psclab.p.googleapis.com, שמפנה אל כתובת ה-IP של נקודת הקצה של Private Service Connect.

יצירת אזור פרטי של DNS

gcloud dns --project=$projectname managed-zones create psc-dns-zone --description="" --dns-name="p.googleapis.com." --visibility="private" --networks="psc-lab"

יצירה של רשומת DNS A

gcloud dns --project=$projectname record-sets transaction start --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction add $pscendpointip --name=storage-pscendpoint.p.googleapis.com. --ttl=300 --type=A --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction execute --zone=psc-dns-zone

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  = 234086459238
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  = 234086459238
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 של נקודת הקצה של 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 beta compute forwarding-rules delete pscendpoint --global --quiet

gcloud beta 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.

d0ed4bd585006e45.png

זיהוי ו לוחצים על 'psc-dns-zone'

903532e68a262111.png

בחירת קבוצת הרשומות ‘storage-pscendpoint.p.googleapis.com' ולוחצים על 'מחיקת ערכות רשומות'

e89394b43ddb5ce2.png

לוחצים על 'מחיקת אזור' כדי להשלים את הניקוי בשיעור ה-Lab

b2a612d7b3a80030.png

16. מעולה!

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

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

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