اتصال به سرویس خصوصی: استفاده از دامنه‌های سفارشی برای دسترسی به APIهای جهانی گوگل با استفاده از بک‌اندهای PSC

۱. مقدمه

اتصال سرویس خصوصی (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

edffc1205f998be9.png

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

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

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

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

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

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

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

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

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

فعال کردن پوسته ابری

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

تصویر صفحه ترمینال Google 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 برای فضای ذخیره‌سازی ابری گوگل
  • استقرار یک متعادل‌کننده بار برنامه داخلی بین منطقه‌ای