প্রাইভেট সার্ভিস কানেক্ট: পিএসসি ব্যাকএন্ড সহ গ্লোবাল গুগল এপিআই অ্যাক্সেস করতে কাস্টম ডোমেন ব্যবহার করা

১. ভূমিকা

প্রাইভেট সার্ভিস কানেক্ট (PSC) হলো গুগল ক্লাউড নেটওয়ার্কিং-এর একটি সক্ষমতা, যা গ্রাহকদের তাদের VPC নেটওয়ার্কের ভেতর থেকে ব্যক্তিগতভাবে পরিচালিত পরিষেবাগুলো অ্যাক্সেস করার সুযোগ দেয়। PSC ব্যাকএন্ড হলো PSC ফিচারগুলোর একটি উপসেট, যা একটি লোড ব্যালেন্সারকে গুগল ক্লাউড স্টোরেজের মতো গ্লোবাল গুগল পরিচালিত পরিষেবাগুলোর সামনে থাকতে সক্ষম করে এবং এর ফলে একটি ভিন্ন FQDN-এর মতো অন্যান্য লোড ব্যালেন্সিং ইন্টিগ্রেশন প্রয়োগ করা যায়। এই কোডল্যাবটি প্রকাশের সময়, শুধুমাত্র গুগল পরিষেবাগুলোর একটি উপসেটই গ্লোবাল PSC ব্যাকএন্ডের সাথে ব্যবহার করা যায়। সেই তালিকাটি এখানে পাওয়া যাবে।

এই কোডল্যাবে দেখানো হবে কিভাবে একটি অভ্যন্তরীণ FQDN ব্যবহার করে গুগল ক্লাউড স্টোরেজ অ্যাক্সেস করার জন্য PSC ব্যাকএন্ড সেট আপ করতে হয়।

আপনি যা শিখবেন

  • মৌলিক VPC নেটওয়ার্কিং পরিকাঠামো স্থাপন করা
  • গুগল ক্লাউড স্টোরেজে বেসিক বাকেট স্থাপন করা
  • গুগল ক্লাউড স্টোরেজে পিএসসি ব্যাকএন্ড সহ একটি ক্রস-রিজিওন অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালেন্সার স্থাপন করা হচ্ছে

আপনার যা যা লাগবে

  • মালিকের অনুমতি সহ গুগল ক্লাউড প্রজেক্ট
  • গুগল ক্লাউড প্রজেক্টে নিম্নলিখিত সাংগঠনিক নীতিগুলি বলবৎ করা হয় না: শিল্ডেড ভিএম

২. কোডল্যাব টপোলজি

edffc1205f998be9.png

এই কোডল্যাবে, আপনি একটি VPC নেটওয়ার্ক, সাবনেট, প্রাইভেট DNS জোন, ফায়ারওয়াল রুলস, গুগল ক্লাউড স্টোরেজ বাকেট, একটি স্যাম্পল ফাইল এবং একটি টেস্ট VM ডেপ্লয় করবেন। এরপর, আপনি গুগল ক্লাউড স্টোরেজের জন্য একটি PSC ব্যাকএন্ড সহ একটি ক্রস-রিজিওনাল অ্যাপ্লিকেশন লোড ব্যালেন্সার ডেপ্লয় করবেন। সবশেষে, আপনি গুগল ক্লাউড স্টোরেজ বাকেটে থাকা ফাইলটির কানেক্টিভিটি পরীক্ষা করবেন।

৩. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

ক্লাউড শেল সক্রিয় করুন

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

গুগল ক্লাউড শেল টার্মিনালের স্ক্রিনশট, যা দেখাচ্ছে যে পরিবেশটি সংযুক্ত হয়েছে।

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে। আপনাকে কিছুই ইনস্টল করতে হবে না।

৪. শুরু করার আগে

এপিআই সক্ষম করুন

ক্লাউড শেলের ভিতরে, আপনার প্রজেক্টটি সেট আপ করা আছে কিনা তা নিশ্চিত করুন এবং ভেরিয়েবলগুলো কনফিগার করুন।

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

৫. ভিপিসি নেটওয়ার্ক তৈরি করুন

সেই VPC নেটওয়ার্কটি তৈরি করুন যেখানে আপনার VM ক্লায়েন্ট এবং লোড ব্যালান্সিং কম্পোনেন্টগুলো হোস্ট করা হবে।

ভিপিসি নেটওয়ার্ক

ক্লাউড শেল থেকে

gcloud compute networks create myvpc \
    --subnet-mode=custom \
    --bgp-routing-mode=global 

VPC-তে সাবনেটগুলো তৈরি করুন। প্রথম সাবনেটটিতে আপনার লোড ব্যালেন্সার হোস্ট করা হবে। দ্বিতীয় সাবনেটটি হলো আপনার লোড ব্যালেন্সারের জন্য প্রক্সি-অনলি সাবনেট, এবং তৃতীয়টিতে আপনার VM ক্লায়েন্ট হোস্ট করা হবে।

সাবনেট তৈরি করুন

ক্লাউড শেল থেকে

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

আপনার VM ইনস্ট্যান্সগুলিতে IAP-কে সংযোগ করার অনুমতি দিতে, এমন একটি ফায়ারওয়াল নিয়ম তৈরি করুন যা:

  • এটি সেই সমস্ত VM ইনস্ট্যান্সের ক্ষেত্রে প্রযোজ্য, যেগুলোকে আপনি IAP ব্যবহার করে অ্যাক্সেসযোগ্য করতে চান।
  • 35.235.240.0/20 আইপি রেঞ্জ থেকে ইনগ্রেস ট্র্যাফিকের অনুমতি দেয়। এই রেঞ্জে সেই সমস্ত আইপি অ্যাড্রেস রয়েছে যা IAP টিসিপি ফরওয়ার্ডিংয়ের জন্য ব্যবহার করে।

ক্লাউড শেল থেকে

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, একটি ব্যাকএন্ড সার্ভিস, একটি URL ম্যাপ এবং 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

৮. company.com-এর জন্য ক্লাউড ডিএনএস প্রাইভেট জোন তৈরি করুন।

প্রথমে এ-রেকর্ডের জন্য লোড ব্যালান্সারের আইপি অ্যাড্রেসটি নির্ধারণ করে সেটিকে একটি ভ্যারিয়েবল হিসেবে এক্সপোর্ট করা যাক।

ক্লাউড শেলে

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

এরপরে, আপনার তৈরি করা অভ্যন্তরীণ লোড ব্যালান্সারটির জন্য ডিএনএস প্রাইভেট জোন এবং এ রেকর্ড তৈরি করুন।

ক্লাউড শেল থেকে

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"

১০. লোড ব্যালান্সারের মাধ্যমে গুগল ক্লাউড স্টোরেজে সংযোগ পরীক্ষা করুন

টেস্ট ভিএম-এ সংযোগ করুন

ক্লাউড শেলে

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

ভিএম থেকে প্রস্থান করুন।

টেস্টভিএম-এ

exit

সফল!

১১. পরিষ্কার করার পদক্ষেপ

From Cloud Shell

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

১২. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন।

আমরা যা আলোচনা করেছি

  • গুগল ক্লাউড স্টোরেজে মৌলিক ফাইল স্থাপন করা
  • গুগল ক্লাউড স্টোরেজের জন্য একটি পিএসসি ব্যাকএন্ড স্থাপন করা হচ্ছে
  • একটি ক্রস-রিজিওন অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালেন্সার স্থাপন করা