Private Service Connect for Google APIs

۱. مقدمه

با استفاده از Private Service Connect، می‌توانید با استفاده از آدرس‌های IP داخلی جهانی در شبکه VPC خود، نقاط پایانی خصوصی ایجاد کنید تا به 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 باقی می‌ماند.

آنچه یاد خواهید گرفت

  • موارد استفاده از اتصال سرویس خصوصی
  • الزامات شبکه
  • API های پشتیبانی شده
  • ایجاد یک نقطه پایانی اتصال سرویس خصوصی
  • یک سطل ذخیره‌سازی ابری ایجاد کنید
  • ایجاد و به‌روزرسانی مناطق خصوصی Cloud DNS
  • برای دسترسی به googleapis عمومی، یک NAT GW ایجاد کنید
  • ایجاد و به‌روزرسانی فایل پیکربندی BOTO
  • اجرای لیست gsutil روی VM1 که در برابر نقطه پایانی سرویس PSC شما حل شده است
  • اجرای لیست gsutil روی VM2 که در برابر googleapis.com عمومی حل شده است
  • استفاده از Tcpdump برای اعتبارسنجی وضوح DNS

آنچه نیاز دارید

  • Knowledge of DNS, nano or vi editor

۲. موارد استفاده از اتصال سرویس خصوصی

شما می‌توانید چندین نقطه پایانی Private Service Connect را در یک شبکه VPC ایجاد کنید. هیچ محدودیتی در پهنای باند برای یک نقطه پایانی خاص وجود ندارد. از آنجا که نقاط پایانی Private Service Connect از آدرس‌های IP داخلی جهانی استفاده می‌کنند، می‌توانند توسط هر منبعی در شبکه VPC شما مورد استفاده قرار گیرند.

با چندین نقطه پایانی، می‌توانید مسیرهای شبکه مختلفی را با استفاده از Cloud Router و قوانین فایروال مشخص کنید.

  • شما می‌توانید قوانین فایروال ایجاد کنید تا از دسترسی برخی از ماشین‌های مجازی به APIهای گوگل از طریق یک نقطه پایانی Private Service Connect جلوگیری کنید، در حالی که به سایر ماشین‌های مجازی اجازه دسترسی می‌دهید.
  • شما می‌توانید یک قانون فایروال روی یک ماشین مجازی داشته باشید که تمام ترافیک به اینترنت را مسدود کند؛ ترافیک ارسالی به نقاط پایانی Private Service Connect همچنان به گوگل می‌رسد.
  • اگر میزبان‌های داخلی دارید که با استفاده از یک تونل Cloud VPN یا یک اتصال Cloud Interconnect (VLAN) به یک VPC متصل هستند، می‌توانید برخی از درخواست‌ها را از طریق تونل یا VLAN ارسال کنید و در عین حال درخواست‌های دیگری را از طریق اینترنت عمومی ارسال کنید. این پیکربندی به شما امکان می‌دهد تا برای سرویس‌هایی مانند Google Books که توسط Private Google Access پشتیبانی نمی‌شوند، از تونل یا VLAN عبور کنید. برای ایجاد این پیکربندی، یک نقطه پایانی Private Service Connect ایجاد کنید، آدرس‌های IP نقطه پایانی Private Service Connect را با استفاده از تبلیغات مسیر سفارشی Cloud Router تبلیغ کنید و یک سیاست ارسال ورودی Cloud DNS را فعال کنید. برنامه می‌تواند برخی از درخواست‌ها را از طریق تونل Cloud VPN یا اتصال Cloud Interconnect (VLAN) با استفاده از نام نقطه پایانی Private Service Connect و برخی دیگر را از طریق اینترنت با استفاده از نام DNS پیش‌فرض ارسال کند.
  • اگر شبکه داخلی خود را با استفاده از چندین اتصال ابری (VLAN) به شبکه VPC خود متصل کنید، می‌توانید مقداری از ترافیک را از داخل شبکه روی یک VLAN و بقیه را روی سایر VLANها ارسال کنید، همانطور که در شکل 2 نشان داده شده است. این به شما امکان می‌دهد به جای شبکه گوگل از شبکه گسترده خود استفاده کنید و حرکت داده‌ها را برای برآورده کردن الزامات جغرافیایی کنترل کنید. برای ایجاد این پیکربندی، دو نقطه پایانی Private Service Connect ایجاد کنید. یک اعلان مسیر سفارشی برای اولین نقطه پایانی در جلسه BGP روتر ابری که اولین VLAN را مدیریت می‌کند ایجاد کنید و یک اعلان مسیر سفارشی متفاوت برای نقطه پایانی دوم در جلسه BGP روتر ابری که VLAN دوم را مدیریت می‌کند ایجاد کنید. میزبان‌های داخلی که برای استفاده از نام نقطه پایانی Private Service Connect پیکربندی شده‌اند، ترافیک را از طریق ضمیمه Cloud Interconnect (VLAN) مربوطه ارسال می‌کنند.
  • همچنین می‌توانید از چندین اتصال ابری (VLAN) در یک توپولوژی فعال/فعال استفاده کنید. اگر آدرس IP نقطه پایانی Private Service Connect را با استفاده از اعلان‌های مسیر سفارشی برای جلسات BGP در روترهای ابری که VLANها را مدیریت می‌کنند، اعلان کنید، بسته‌های ارسالی از سیستم‌های داخلی به نقاط پایانی با استفاده از ECMP در سراسر VLANها مسیریابی می‌شوند.

5e142c2fbf6f010e.png

شکل ۱. با پیکربندی Private Service Connect، Cloud Router و میزبان‌های داخلی، می‌توانید کنترل کنید که کدام اتصال Cloud Interconnect (VLAN) برای ارسال ترافیک به APIهای گوگل استفاده شود.

۳. الزامات شبکه

برای استفاده از Private Service Connect، نمونه‌های ماشین مجازی (VM) بدون آدرس‌های IP خارجی باید رابط اصلی خود را در یک زیرشبکه با دسترسی خصوصی گوگل فعال داشته باشند.

یک ماشین مجازی با یک آدرس IP خارجی می‌تواند با استفاده از نقاط پایانی Private Service Connect به APIها و سرویس‌های گوگل دسترسی پیدا کند، صرف نظر از اینکه Private Google Access برای زیرشبکه آن فعال باشد یا خیر. اتصال به نقطه پایانی Private Service Connect در داخل شبکه گوگل باقی می‌ماند.

نقاط پایانی Private Service Connect از شبکه‌های VPC همتا قابل دسترسی نیستند.

API های پشتیبانی شده

وقتی یک نقطه پایانی Private Service Connect ایجاد می‌کنید، انتخاب می‌کنید که به کدام بسته APIها نیاز به دسترسی دارید: all-apis یا vpc-sc.

بسته‌های API به همان APIهایی دسترسی می‌دهند که از طریق Private Google Access VIPها در دسترس هستند.

  • بسته all-apis دسترسی به همان API های private.googleapis.com را فراهم می‌کند.
  • بسته vpc-sc دسترسی به همان APIهای restricted.googleapis.com را فراهم می‌کند.

۴. توپولوژی و مورد استفاده Codelab

2ac275eb86f26338.png

Figure1 - Codelab topology

مورد استفاده Codelab -

مشتری ما برای انتقال داده‌های ذخیره‌سازی ابری به ترکیبی از دسترسی خصوصی (اتصال داخلی) و عمومی googleapis نیاز دارد. برای برآورده کردن نیازهای مشتریان، ما Private Service Connect را که شامل یک آدرس منحصر به فرد /32، پیکربندی BOTO و به‌روزرسانی‌های رکورد DNS است، پیاده‌سازی خواهیم کرد. ماشین مجازی 1 از PSC برای دسترسی به سطل ذخیره‌سازی ابری استفاده خواهد کرد؛ در مقابل، VM2 از طریق NAT GW از محدوده‌های IP عمومی googleapis.com استفاده خواهد کرد.

تمام جنبه‌های این آزمایشگاه در پلتفرم ابری گوگل مستقر شده‌اند، با این حال، همین مورد استفاده برای استقرار ابری ترکیبی که نیاز به جداسازی ترافیک دارد، قابل اجرا است.

۵. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب Gmail یا Google Workspace ندارید، باید یکی ایجاد کنید .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه‌های Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .

اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعمل‌های بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش می‌دهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول GCP روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

bce75f34b2c53987.png

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

f6ef2b5f13479f3a.png

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز شماست. این ماشین یک دایرکتوری خانگی دائمی ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه را می‌توان به سادگی با یک مرورگر انجام داد.

۶. قبل از شروع

فعال کردن 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

۷. ایجاد شبکه VPC

شبکه VPC

از پوسته ابری

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

ایجاد زیرشبکه

از پوسته ابری

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 به آنها دسترسی داشته باشید، اعمال می‌شود.
  • اجازه ورود ترافیک از محدوده IP 35.235.240.0/20 را می‌دهد. این محدوده شامل تمام آدرس‌های IP است که IAP برای ارسال TCP استفاده می‌کند.

از پوسته ابری

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

ایجاد نمونه Cloud NAT

ایجاد روتر ابری

از پوسته ابری

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

ایجاد NAT ابری

از پوسته ابری

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

۸. ایجاد نقطه پایانی اتصال سرویس خصوصی

وقتی IP نقطه پایانی Private Service Connect <pscendpointip> را پیکربندی می‌کنید، باید یک آدرس IP منحصر به فرد که در VPC شما تعریف نشده است، ارائه دهید.

از پوسته ابری

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

ذخیره «pscendpointip» برای مدت زمان آزمایش

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

echo $pscendpointip

یک قانون ارسال برای اتصال نقطه پایانی به APIها و سرویس‌های گوگل ایجاد کنید.

از پوسته ابری

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

نقاط پایانی پیکربندی‌شده‌ی Private Service Connect را فهرست کنید

از پوسته ابری

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

نقاط پایانی پیکربندی شده Private Service Connect را شرح دهید

از پوسته ابری

gcloud compute forwarding-rules describe \
    pscendpoint --global

۹. یک سطل ایجاد کنید

یک مخزن ذخیره‌سازی ابری ایجاد کنید و BUCKET_NAME را با یک نام جهانی منحصر به فرد که ترجیح می‌دهید جایگزین کنید.

از پوسته ابری

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

«BUKET_NAME» را برای مدت زمان آزمایش ذخیره کن

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

۱۰. پیکربندی 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 با یک کلاینت یا برنامه‌ای که به APIها و سرویس‌های گوگل دسترسی دارد استفاده کنید، کلاینت یا برنامه خود را برای استفاده از نام‌های DNS p.googleapis.com به‌روزرسانی کنید.

برای جزئیات بیشتر به مستندات مربوط به کلاینت یا کتابخانه کلاینت خود مراجعه کنید. برای مثال:

  • پایتون: می‌توانید api_endpoint را در کلاس Client options در پکیج google-api-core پیکربندی کنید.
  • برو: شما می‌توانید WithEndpoint را در بسته گزینه‌های Client در بسته 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

از کنسول ابری، ورودی dns تولید شده در مسیر Network Services → Cloud DNS را اعتبارسنجی کنید. نام DNS تولید شده «p.googleapis.com» را یادداشت کنید.

۱۱. ایجاد ماشین‌های مجازی

ایجاد ماشین مجازی (psc-instance-1) که برای اعتبارسنجی اتصال سرویس خصوصی استفاده می‌شود

از پوسته ابری

  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)

از طریق Cloud Shell به ماشین مجازی SSH وصل شوید

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

با سه بار کلیک کردن روی + (تصویر زیر) ترمینال‌های پوسته ابری بیشتری ایجاد کنید.

69ea94e1527912bb.png

ایجاد ماشین مجازی (psc-instance-2) که برای اعتبارسنجی Googleapis عمومی استفاده می‌شود

از برگه ۲

  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 

از تب ۲، از طریق Cloud Shell به ماشین مجازی SSH وصل شوید

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"

از تب ۳، SSH را از طریق Cloud Shell به psc-instance-1 وصل کنید.

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"

از تب ۴، Shell SSH را از طریق Cloud Shell به psc-instance-2 منتقل کنید.

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"

۱۲. رفتار فعلی Gsutil را بررسی کنید

از تب ۴ (psc-instance-2) tcpdump را اجرا کنید و ترافیک DNS را مانیتور کنید.

sudo tcpdump -vv -i eth0 port 53

بررسی جستجوی DNS مربوط به سطل ذخیره‌سازی از تب ۲ (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>

از تب ۴ (psc-instance-2) بررسی کنید که آیا رکوردهای 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

۱۳. تغییر رفتار Gsutil

به یاد بیاورید که در مرحله قبل، یک Private DNS Zone و یک رکورد A ایجاد کردید که به آدرس IP نقطه پایانی PSC نگاشت شده بود. در مرحله بعد، اکنون با به‌روزرسانی فایل VM BOTO در psc-instance-1، نحوه رفتار gsutil را کنترل خواهیم کرد.

پیکربندی پیش‌فرض BOTO را از ترمینال نمونه ماشین مجازی از تب ۱ (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 به‌روزرسانی کنید، مطمئن شوید که همه ورودی‌ها را کپی و پیست می‌کنید.

مثال: sudo nano /etc/boto.cfg

یا

Example: sudo vi /etc/boto.cfg

از تب شماره ۱ ترمینال نمونه ماشین مجازی (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

۱۴. بررسی رفتار به‌روزرسانی‌شده‌ی جستجوی gsutil

از تب ۳ (psc-instance-1) tcpdump را اجرا کنید و ترافیک DNS را مانیتور کنید.

sudo tcpdump -vv -i eth0 port 53

جستجوی gsutil مربوط به سطل ذخیره‌سازی را از تب ۱ (psc-instance-1) بررسی کنید.

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

gsutil -D ls gs://$BUCKET_NAME

گزارش‌های اشکال‌زدایی تأیید می‌کنند که سطل ذخیره‌سازی از طریق نقطه پایانی "pscendpoint" سرویس خصوصی 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>

از تب ۳ (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 استفاده می‌شود.

از تب ۱

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>

۱۵. مراحل پاکسازی

خروج از نمونه ماشین مجازی (همه تب‌ها)

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

از کنسول، مطمئن شوید که پروژه صحیح را مشاهده می‌کنید، سپس Networking Services → Cloud DNS را انتخاب کنید.

۱۶. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

آنچه ما پوشش داده‌ایم

  • موارد استفاده از اتصال سرویس خصوصی
  • الزامات شبکه
  • API های پشتیبانی شده
  • یک نقطه پایانی اتصال سرویس خصوصی ایجاد شد
  • یک سطل ذخیره‌سازی ابری ایجاد کرد
  • فایل پیکربندی BOTO به‌روزرسانی شد
  • یک NAT GW ایجاد کرد
  • اجرای لیست gsutil روی VM1 که با نقطه پایانی سرویس PSC شما مطابقت دارد
  • اجرای لیست gsutil روی VM2 که با دامنه عمومی googleapis.com مطابقت دارد
  • استفاده از Tcpdump برای اعتبارسنجی وضوح DNS