۱. مقدمه
اتصال سرویس خصوصی (PSC) قابلیتی از شبکه Google Cloud است که به مصرفکنندگان اجازه میدهد تا به صورت خصوصی از داخل شبکه VPC خود به سرویسهای مدیریتشده دسترسی داشته باشند. PSC Backendها زیرمجموعهای از ویژگیهای PSC هستند که به یک متعادلکننده بار اجازه میدهند تا در مقابل سرویسهای مدیریتشده جهانی گوگل مانند Google Cloud Storage قرار گیرد و امکان اعمال سایر یکپارچهسازیهای متعادلکننده بار مانند یک FQDN متفاوت را فراهم کند. در زمان انتشار این آزمایشگاه کد، فقط زیرمجموعهای از سرویسهای گوگل وجود دارد که میتوانند با PSC Backendهای جهانی مورد استفاده قرار گیرند. این لیست را میتوانید اینجا پیدا کنید.
این Codelab نحوه تنظیم backend های PSC را برای دسترسی به Google Cloud Storage با یک FQDN داخلی بررسی خواهد کرد.
آنچه یاد خواهید گرفت
- استقرار زیرساخت شبکه اولیه VPC
- Deploying basic buckets in Google Cloud Storage
- استقرار یک متعادلکننده بار برنامه داخلی بین منطقهای با یک پسزمینه PSC در فضای ذخیرهسازی ابری گوگل
آنچه نیاز دارید
- پروژه گوگل کلود با مجوزهای مالک
- سیاستهای سازمانی زیر در پروژه ابری گوگل اعمال نمیشوند: ماشینهای مجازی محافظتشده
۲. توپولوژی Codelab

در این Codelab، شما یک شبکه VPC، زیرشبکهها، منطقه DNS خصوصی، قوانین فایروال، Google Cloud Storage Bucket، یک فایل نمونه و یک ماشین مجازی آزمایشی مستقر خواهید کرد. در مرحله بعد، یک متعادلکننده بار برنامه بین منطقهای با یک PSC backend برای Google Cloud Storage مستقر خواهید کرد. در نهایت، اتصال به فایل موجود در Google Cloud Storage Bucket را آزمایش خواهید کرد.
۳. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. شما همیشه میتوانید آن را بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاههای کد، باید شناسه پروژه خود را (که معمولاً با عنوان
PROJECT_IDشناخته میشود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی میماند. - برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینهای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، میتوانید منابعی را که ایجاد کردهاید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

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

این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه کد را میتوان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.
۴. قبل از شروع
فعال کردن APIها
در داخل Cloud Shell، مطمئن شوید که پروژه شما راهاندازی شده و متغیرها را پیکربندی کردهاید.
gcloud auth login gcloud config list project gcloud config set project [YOUR-PROJECT-ID] export projectid=[YOUR-PROJECT-ID] export region1=us-central1 export zone1=us-central1-a export region2=us-south1 echo $projectid echo $region1 echo $zone1 echo $region2
فعال کردن تمام سرویسهای لازم
gcloud services enable compute.googleapis.com gcloud services enable networkmanagement.googleapis.com gcloud services enable storage.googleapis.com gcloud services enable dns.googleapis.com
5. Create the VPC Network
شبکه VPC را ایجاد کنید که در آن کلاینت ماشین مجازی و اجزای متعادلکننده بار شما میزبانی شوند.
شبکه VPC
از پوسته ابری
gcloud compute networks create myvpc \
--subnet-mode=custom \
--bgp-routing-mode=global
زیرشبکهها را در VPC ایجاد کنید. زیرشبکه اول جایی خواهد بود که متعادلکننده بار شما میزبانی میشود. زیرشبکه دوم، زیرشبکه فقط پروکسی برای متعادلکننده بار شما است و سومی جایی است که کلاینت ماشین مجازی شما میزبانی خواهد شد.
ایجاد زیرشبکهها
از پوسته ابری
gcloud compute networks subnets create $region2-subnet \
--network=myvpc \
--range=10.100.0.0/24 \
--region=$region2
gcloud compute networks subnets create $region2-proxy-subnet \
--network=myvpc \
--range=10.100.100.0/24 \
--region=$region2 \
--purpose=GLOBAL_MANAGED_PROXY \
--role=ACTIVE
gcloud compute networks subnets create $region1-subnet \
--network=myvpc \
--region=$region1 \
--range=10.200.0.0/24
ایجاد سیاست و قوانین فایروال شبکه
از پوسته ابری
gcloud compute network-firewall-policies create my-vpc-policy --global
gcloud compute network-firewall-policies associations create \
--firewall-policy my-vpc-policy \
--network myvpc \
--name network-myvpc \
--global-firewall-policy
برای اینکه به IAP اجازه دهید به ماشینهای مجازی شما متصل شود، یک قانون فایروال ایجاد کنید که:
- برای تمام نمونههای ماشین مجازی که میخواهید با استفاده از IAP به آنها دسترسی داشته باشید، اعمال میشود.
- اجازه ورود ترافیک از محدوده IP 35.235.240.0/20 را میدهد. این محدوده شامل تمام آدرسهای IP است که IAP برای ارسال TCP استفاده میکند.
از پوسته ابری
gcloud compute network-firewall-policies rules create 1000 \
--action ALLOW \
--firewall-policy my-vpc-policy \
--description "SSH with IAP" \
--direction INGRESS \
--src-ip-ranges 35.235.240.0/20 \
--layer4-configs tcp:22 \
--global-firewall-policy
۶. یک سطل ذخیرهسازی ابری گوگل، یک فایل نمونه و اعطای مجوزها ایجاد کنید
از پوسته ابری
gcloud storage buckets create gs://$projectid-pscbackend --location=us
echo "Here is my bucket file contents" > my-bucket-contents.txt
gcloud storage cp my-bucket-contents.txt gs://$projectid-pscbackend/my-bucket-contents.txt
computesa=$(gcloud iam service-accounts list \
--filter='displayName:Compute Engine default service account' \
--format='value(email)')
echo $computesa
gcloud storage buckets add-iam-policy-binding gs://$projectid-pscbackend \
--member="serviceAccount:$computesa" \
--role="roles/storage.objectViewer"
خروجی نمونه
Creating gs://xxxxxxxxxxx-pscbackend/... Copying file://my-bucket-contents.txt to gs://xxxxxxxxxxx-pscbackend/my-bucket-contents.txt Completed files 1/1 | 32.0B/32.0B xxxxxxxxxxx-compute@developer.gserviceaccount.com bindings: - members: - projectEditor:xxxxxxxxxxx - projectOwner:xxxxxxxxxxx role: roles/storage.legacyBucketOwner - members: - projectViewer:xxxxxxxxxxx role: roles/storage.legacyBucketReader - members: - projectEditor:xxxxxxxxxxx - projectOwner:xxxxxxxxxxx role: roles/storage.legacyObjectOwner - members: - projectViewer:xxxxxxxxxxx role: roles/storage.legacyObjectReader - members: - serviceAccount:xxxxxxxxxxx-compute@developer.gserviceaccount.com role: roles/storage.objectViewer etag: CAI= kind: storage#policy resourceId: projects/_/buckets/xxxxxxxxxxx-pscbackend version: 1
۷. افشای فضای ذخیرهسازی ابری گوگل از طریق یک متعادلکننده بار برنامه داخلی بین منطقهای
ایجاد متعادلکننده بار برنامه داخلی بین منطقهای
ابتدا با ایجاد اجزای متعادلکننده بار شروع کنید. شما یک PSC NEG، یک سرویس backend، یک URL Map و پروکسیهای هدف HTTP ایجاد خواهید کرد.
در پوسته ابری
gcloud compute network-endpoint-groups create gcs-$region2-neg \
--region=$region2 \
--network-endpoint-type=private-service-connect \
--psc-target-service=storage.googleapis.com
gcloud compute backend-services create gcs-bes \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--global
gcloud compute backend-services add-backend gcs-bes \
--global \
--network-endpoint-group=gcs-$region2-neg \
--network-endpoint-group-region=$region2
gcloud compute url-maps create gcsilb \
--default-service=gcs-bes \
--global
gcloud compute target-http-proxies create gcs-http-proxy \
--url-map=gcsilb \
--global
قانون ارسال متعادلکننده بار را ایجاد کنید.
در پوسته ابری
gcloud compute forwarding-rules create gcs-ilb-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=myvpc \
--subnet=$region2-subnet \
--target-http-proxy=gcs-http-proxy \
--ports=80 \
--subnet-region=$region2 \
--global
۸. ایجاد منطقه خصوصی Cloud DNS برای company.com
ابتدا آدرس IP متعادلکننده بار را برای رکورد A تعیین میکنیم و آن را به عنوان یک متغیر صادر میکنیم.
در پوسته ابری
gcloud compute forwarding-rules describe gcs-ilb-fr \
--global
export lbip=$(gcloud compute forwarding-rules describe gcs-ilb-fr \
--global \
--format='value(IPAddress)')
echo $lbip
خروجی نمونه
IPAddress: 10.100.0.4 IPProtocol: TCP creationTimestamp: 'xxxxxxxxxxxxxxx' description: '' fingerprint: xxxxxxxxxx id: 'xxxxxxxxxxxxxx' kind: compute#forwardingRule labelFingerprint: xxxxxxxxxx loadBalancingScheme: INTERNAL_MANAGED name: gcs-ilb-fr network: https://www.googleapis.com/compute/v1/projects/[projectID]/global/networks/myvpc networkTier: PREMIUM portRange: 80-80 selfLink: https://www.googleapis.com/compute/v1/projects/[projectID]/global/forwardingRules/gcs-ilb-fr selfLinkWithId: https://www.googleapis.com/compute/v1/projects/[projectID]/global/forwardingRules/xxxxxxxxxxxxxx subnetwork: https://www.googleapis.com/compute/v1/projects/[projectID]/regions/us-south1/subnetworks/us-south1-subnet target: https://www.googleapis.com/compute/v1/projects/[projectID]/global/targetHttpProxies/gcs-http-proxy 10.100.0.4
در مرحله بعد، یک منطقه خصوصی DNS و یک رکورد A برای متعادلکننده بار داخلی که ایجاد کردهاید، ایجاد کنید.
از پوسته ابری
gcloud dns managed-zones create "company-com" \
--dns-name=company.com. \
--description="company.com private dns zone" \
--visibility=private \
--networks=myvpc
gcloud dns record-sets create "storage.company.com" \
--zone="company-com" \
--type="A" \
--ttl="300" \
--rrdatas="$lbip"
۹. ماشین مجازی آزمایشی را ایجاد کنید
ایجاد ماشین مجازی مشتری-مشتری
از پوسته ابری
gcloud compute instances create testvm \
--zone="$zone1" \
--subnet="$region1-subnet" \
--no-address \
--metadata "startup-script=#! /bin/bash
cat <<EOF > /etc/profile.d/gcp-startup-vars.sh
export MYBUCKET=\"$projectid-pscbackend\"
export computesa=\"$computesa\"
EOF
chmod +x /etc/profile.d/gcp-startup-vars.sh"
۱۰. اتصال به فضای ذخیرهسازی ابری گوگل را از طریق متعادلکننده بار (Load Balancer) آزمایش کنید
اتصال به ماشین مجازی آزمایشی
در پوسته ابری
gcloud compute ssh "testvm"\
--zone "$zone1"\
--tunnel-through-iap \
--project $projectid
اتصال را آزمایش کنید
در ماشین مجازی آزمایشی
TOKEN=$(curl -s -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/$computesa/token" | jq -r .access_token) curl -H "Authorization: Bearer $TOKEN" "http://storage.company.com/$MYBUCKET/my-bucket-contents.txt"
خروجی مورد انتظار
Here is my bucket file contents
از ماشین مجازی خارج شوید.
در TestVM
exit
موفقیت!
۱۱. مراحل پاکسازی
از پوسته ابری
gcloud dns record-sets delete "storage.company.com" \
--zone="company-com" \
--type="A"
gcloud dns managed-zones delete "company-com"
gcloud compute forwarding-rules delete gcs-ilb-fr \
--global \
--quiet
gcloud compute target-http-proxies delete gcs-http-proxy \
--global \
--quiet
gcloud compute url-maps delete gcsilb \
--global \
--quiet
gcloud compute backend-services delete gcs-bes \
--global \
--quiet
gcloud compute network-endpoint-groups delete gcs-$region2-neg \
--region=$region2 \
--quiet
gcloud storage rm -r gs://$projectid-pscbackend \
--quiet
gcloud compute instances delete testvm \
--zone=$zone1 \
--quiet
gcloud compute network-firewall-policies rules delete 1000 \
--firewall-policy my-vpc-policy \
--global-firewall-policy \
--quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy my-vpc-policy \
--name=network-myvpc \
--global-firewall-policy \
--quiet
gcloud compute network-firewall-policies delete my-vpc-policy \
--global \
--quiet
gcloud compute networks subnets delete $region1-subnet \
--region=$region1 \
--quiet
gcloud compute networks subnets delete $region2-proxy-subnet \
--region=$region2 \
--quiet
gcloud compute networks subnets delete $region2-subnet \
--region=$region2 \
--quiet
gcloud compute networks delete myvpc \
--quiet
۱۲. تبریک میگویم!
تبریک بابت تکمیل Codelab.
آنچه ما پوشش دادهایم
- استقرار فایلهای پایه در فضای ذخیرهسازی ابری گوگل
- استقرار یک بکاند PSC برای فضای ذخیرهسازی ابری گوگل
- استقرار یک متعادلکننده بار برنامه داخلی بین منطقهای