প্রাইভেট সার্ভিস কানেক্ট: ভিপিসি পিয়ারিং টু প্রাইভেট সার্ভিস কানেক্ট মাইগ্রেশন

১. ভূমিকা

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

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

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

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

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

  • VPC পিয়ারিং ভিত্তিক পরিষেবা কীভাবে সেট আপ করবেন
  • পিএসসি ভিত্তিক পরিষেবা কীভাবে সেট আপ করবেন
  • VPC Peering থেকে PSC পরিষেবা মাইগ্রেশন সম্পন্ন করার জন্য Internal-Ranges API ব্যবহার করে VPC Peering-এর মাধ্যমে সাবনেট মাইগ্রেশন করা হয়।
  • সার্ভিস মাইগ্রেশনের জন্য কখন ডাউনটাইম প্রয়োজন তা বোঝা
  • অভিবাসন পরিষ্কার করার পদক্ষেপ

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

  • মালিকের অনুমতি সহ গুগল ক্লাউড প্রজেক্ট

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

সরলতার জন্য, এই কোডল্যাবে সমস্ত রিসোর্স একটিমাত্র প্রজেক্টে কেন্দ্রীভূত করা হয়েছে। যদি প্রডিউসার এবং কনজিউমার ভিন্ন ভিন্ন প্রজেক্টে থাকে, তবে প্রডিউসার সাইডে কী কী কাজ করতে হবে এবং কনজিউমার সাইডে কী কী কাজ করতে হবে, তা এই কোডল্যাবে উল্লেখ করা হবে।

এই কোডল্যাবটিতে ৪টি স্টেট থাকবে।

7dbf27cf215f9703.png

স্টেট ১ হলো ভিপিসি পিয়ারিং স্টেট। এখানে কনজিউমার-ভিপিসি এবং প্রোডিউসার-ভিপিসি নামে দুটি ভিপিসি থাকবে, যেগুলোকে একে অপরের সাথে পিয়ার করা হবে। প্রোডিউসার-ভিপিসিতে একটি সাধারণ অ্যাপাচি সার্ভিস থাকবে, যা একটি অভ্যন্তরীণ নেটওয়ার্ক পাসথ্রু লোড ব্যালান্সারের মাধ্যমে উন্মুক্ত করা হবে। পরীক্ষার উদ্দেশ্যে কনজিউমার-ভিপিসিতে একটিমাত্র কনজিউমার-ভিএম থাকবে।

7f64427c0e59d417.png

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

98c324c59c1fbf68.png

স্টেট ৩ হলো মাইগ্রেশন স্টেট। আমরা প্রডিউসার-ভিপিসি-তে সেই সাবনেট রেঞ্জটি রিজার্ভ করব যেখানে ভিপিসি পিয়ারিং ভিত্তিক সার্ভিসটি কনজিউমার-ভিপিসি-তে ব্যবহারের জন্য ডেপ্লয় করা হয়েছিল। এরপর আমরা প্রডিউসার-ভিপিসি-তে আগে থেকে বিদ্যমান ফরওয়ার্ডিং রুলের আইপি অ্যাড্রেস ব্যবহার করে একটি নতুন পিএসসি এন্ডপয়েন্ট তৈরি করব।

a64ab7b69132c722.png

স্টেট ৪ হলো চূড়ান্ত PSC স্টেট। আমরা টেস্ট PSC এন্ডপয়েন্টটি পরিষ্কার করব এবং কনজিউমার-ভিপিসি ও প্রোডিউসার-ভিপিসি-এর মধ্যেকার ভিপিসি পিয়ারিংটি মুছে ফেলব।

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

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

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

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

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

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export region=us-central1
export zone=$region-a
echo $projectid
echo $region
echo $zone

সমস্ত প্রয়োজনীয় পরিষেবা সক্রিয় করুন

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com

৫. প্রডিউসার ভিপিসি নেটওয়ার্ক তৈরি করুন (প্রডিউসার কার্যক্রম)

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

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

gcloud compute networks create producer-vpc \
    --subnet-mode=custom

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

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

gcloud compute networks subnets create producer-service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

প্রযোজক ক্লাউড রাউটার এবং ক্লাউড NAT তৈরি করুন

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

gcloud compute routers create $region-cr \
   --network=producer-vpc \
   --region=$region

gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

প্রযোজক নেটওয়ার্ক ফায়ারওয়াল নীতি এবং ফায়ারওয়াল নিয়ম তৈরি করুন

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

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --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 producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

আমরা আরও দুটি নিয়ম তৈরি করব যা সার্ভিসটিকে লোড ব্যালেন্সারের স্বাস্থ্য পরীক্ষা করার অনুমতি দেবে এবং সেইসাথে কনজিউমার-ভিপিসি থেকে সংযুক্ত হওয়া ভিএমগুলো থেকে নেটওয়ার্ক ট্র্যাফিক আসারও অনুমতি দেবে।

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

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

৬. প্রযোজক পরিষেবা সেট আপ (প্রযোজকের কার্যকলাপ)

আমরা একটি প্রোডিউসার সার্ভিস তৈরি করব, যেখানে একটিমাত্র ভিএম (VM) চলবে এবং তাতে একটি অ্যাপাচি ওয়েব সার্ভার থাকবে। এই সার্ভিসটিকে একটি আনম্যানেজড ইনস্ট্যান্স গ্রুপে যুক্ত করা হবে, যার সামনে একটি রিজিওনাল ইন্টারনাল নেটওয়ার্ক পাসথ্রু লোড ব্যালেন্সার থাকবে।

ভিএম এবং আনম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করুন

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

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

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

gcloud compute instance-groups unmanaged create prod-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances prod-uig \
  --zone=$zone \
  --instances=producer-service-vm

আঞ্চলিক অভ্যন্তরীণ নেটওয়ার্ক পাসথ্রু লোড ব্যালেন্সার তৈরি করুন

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

gcloud compute health-checks create http producer-hc \
        --region=$region

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=prod-uig \
  --instance-group-zone=$zone

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

৭. কনজিউমার ভিপিসি নেটওয়ার্ক তৈরি করুন (কনজিউমার অ্যাক্টিভিটি)

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

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

gcloud compute networks create consumer-vpc \
    --subnet-mode=custom

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

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

gcloud compute networks subnets create consumer-vm-subnet \
    --network=consumer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

গ্রাহক নেটওয়ার্ক ফায়ারওয়াল পলিসি এবং ফায়ারওয়াল নিয়ম তৈরি করুন

আমরা কনজিউমার-ভিপিসি-র জন্য আরেকটি নেটওয়ার্ক ফায়ারওয়াল পলিসি তৈরি করব।

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

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy consumer-vpc-policy \
    --network consumer-vpc \
    --name network-consumer-vpc \
    --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy consumer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

৮. ভিপিসি পিয়ার তৈরি করুন

উৎপাদক কার্যকলাপ

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

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

ভোক্তা কার্যকলাপ

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

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

consumer-vpc-এর রাউটের তালিকা পরীক্ষা করে পিয়ারিংটি প্রতিষ্ঠিত হয়েছে কিনা তা নিশ্চিত করুন। আপনি consumer-vpc এবং producer-vpc উভয়ের জন্যই রাউট দেখতে পাবেন।

ভোক্তা কার্যকলাপ

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

gcloud compute routes list --filter="network=consumer-vpc"

প্রত্যাশিত আউটপুট

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

৯. ডিএনএস জোন তৈরি করুন (ভোক্তার কার্যকলাপ)

আরও বাস্তবসম্মত একটি উদাহরণ দেখানোর জন্য, আমরা একটি প্রাইভেট আইপি অ্যাড্রেসের পরিবর্তে ডিএনএস-এর মাধ্যমে প্রডিউসার সার্ভিসকে কল করতে একটি ক্লাউড ডিএনএস প্রাইভেট জোন তৈরি করব।

আমরা example.com ডোমেইনে একটি A রেকর্ড যোগ করব, যা service.example.com-কে আমাদের পূর্বে তৈরি করা নেটওয়ার্ক পাসথ্রু লোড ব্যালেন্সার ফরওয়ার্ডিং রুল আইপি অ্যাড্রেসের দিকে নির্দেশ করবে। সেই ফরওয়ার্ডিং রুল আইপি অ্যাড্রেসটি হলো 192.168.0.2।

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

gcloud dns managed-zones create "producer-service" \
   --dns-name=example.com \
   --description="producer service dns" \
   --visibility=private \
   --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="producer-service"

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

gcloud dns record-sets transaction execute \
   --zone="producer-service"

১০. ভিপিসি পিয়ারের মাধ্যমে প্রডিউসার সার্ভিস পরীক্ষা (কনজিউমার অ্যাক্টিভিটি)

এই পর্যায়ে, স্টেট ১ আর্কিটেকচারটি তৈরি করা হয়েছে।

কনজিউমার-ক্লায়েন্ট ভিএম তৈরি করুন

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

gcloud compute instances create consumer-client \
   --zone=$zone \
   --subnet=consumer-vm-subnet \
   --no-address

সংযোগ পরীক্ষা করুন

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

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

curl service.example.com

প্রত্যাশিত আউটপুট

I am a Producer Service. 

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

exit

১১. প্রাইভেট সার্ভিস কানেক্ট-এর জন্য পরিষেবা প্রস্তুত করুন (প্রযোজকের কার্যকলাপ)

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

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

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

gcloud compute networks subnets create producer-psc-fr-subnet \
    --network=producer-vpc \
    --range=10.0.2.64/28 \
    --region=$region

লোড ব্যালেন্সার ফরওয়ার্ডিং রুলের অভ্যন্তরীণ আইপি অ্যাড্রেস তৈরি করুন।

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

gcloud compute addresses create producer-psc-ip \
  --region $region \
  --subnet producer-psc-fr-subnet \
  --addresses 10.0.2.66

নতুন লোড ব্যালেন্সার ফরওয়ার্ডিং নিয়মটি তৈরি করুন। এই নিয়মটি পূর্বে কনফিগার করা একই ব্যাকএন্ড পরিষেবা এবং স্বাস্থ্য পরীক্ষাগুলো ব্যবহার করার জন্য কনফিগার করা হয়েছে।

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

gcloud compute forwarding-rules create psc-service-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-psc-fr-subnet \
  --address=producer-psc-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

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

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

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

এখন থেকে psc-nat-subnet থেকে ট্র্যাফিক অনুমোদনের জন্য আমাদের নেটওয়ার্ক ফায়ারওয়াল পলিসিতে একটি অতিরিক্ত ফায়ারওয়াল নিয়ম যোগ করতে হবে। PSC-এর মাধ্যমে পরিষেবাটি অ্যাক্সেস করার সময়, psc-nat-subnet থেকেই ট্র্যাফিক আসবে।

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

gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.100.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

সার্ভিস অ্যাটাচমেন্টটি তৈরি করুন এবং পরবর্তী বিভাগে PSC এন্ডপয়েন্ট কনফিগার করার জন্য সার্ভিস অ্যাটাচমেন্ট URI-টি নোট করে রাখুন।

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

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

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

gcloud compute service-attachments describe producer-sa --region=$region

নমুনা আউটপুট

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

১২. 'টেস্ট' কনজিউমার পিএসসি এন্ডপয়েন্টকে প্রডিউসার সার্ভিসের সাথে সংযুক্ত করুন এবং পরীক্ষা করুন (কনজিউমার অ্যাক্টিভিটি)।

স্থাপত্যটি এখন দ্বিতীয় পর্যায়ে রয়েছে।

এই মুহূর্তে, VPC Peering-এর মাধ্যমে উন্মুক্ত বিদ্যমান প্রডিউসার সার্ভিসটি এখনও লাইভ আছে এবং একটি প্রোডাকশন সিনারিওতে সঠিকভাবে কাজ করছে। বর্তমান VPC Peering সাবনেটটিকে কনজিউমার VPC-তে মাইগ্রেট করার জন্য একটি আউটেজ পিরিয়ড শুরু করার আগে, উন্মুক্ত সার্ভিস অ্যাটাচমেন্টটি সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে আমরা একটি "টেস্ট" PSC এন্ডপয়েন্ট তৈরি করব। আমাদের এন্ড-স্টেট কানেক্টিভিটি হবে একটি PSC এন্ডপয়েন্ট, যার আইপি অ্যাড্রেসটি VPC Peering ভিত্তিক সার্ভিসের বর্তমান ফরওয়ার্ডিং রুলের আইপি অ্যাড্রেসের মতোই হবে।

পিএসসি এন্ডপয়েন্ট তৈরি করুন

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

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

নীচের টার্গেট সার্ভিসটি হবে সেই সার্ভিস অ্যাটাচমেন্ট ইউআরআই (Service Attachment URI) যা আপনি গত ধাপে নোট করেছিলেন।

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

gcloud compute forwarding-rules create test-psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=test-psc-endpoint-ip \
  --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

"test" PSC এন্ডপয়েন্টটি পরীক্ষা করুন

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

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

ভোক্তা-ক্লায়েন্ট থেকে

curl 10.0.1.3

প্রত্যাশিত আউটপুট

I am a Producer Service. 

ভোক্তা-ক্লায়েন্ট থেকে

exit

১৩. বিদ্যমান প্রডিউসার ফরওয়ার্ডিং রুল সাবনেট স্থানান্তর করুন

এই ধাপগুলো সম্পন্ন করলে লাইভ VPC পিয়ারিং ভিত্তিক প্রোডিউসার সার্ভিসটি বন্ধ হয়ে যাবে। আমরা এখন ইন্টারনাল রেঞ্জেস এপিআই (Internal Ranges API) ব্যবহার করে ফরওয়ার্ডিং রুল সাবনেটটি প্রোডিউসার-ভিপিসি থেকে কনজিউমার-ভিপিসিতে স্থানান্তর করব। এর ফলে, প্রোডিউসার-ভিপিসি থেকে সাবনেটটি মুছে ফেলার অন্তর্বর্তীকালীন সময়ে এটি ব্যবহার করা থেকে লক হয়ে যাবে এবং কনজিউমার-ভিপিসিতে তৈরির জন্য এটিকে শুধুমাত্র মাইগ্রেশনের উদ্দেশ্যে নির্দিষ্ট করা হবে।

ইন্টারনাল রেঞ্জ এপিআই-এর জন্য আপনাকে বিদ্যমান ভিপিসি পিয়ারিং ফরওয়ার্ডিং রুল সাবনেট (প্রডিউসার-এফআর-সাবনেট, 192.168.0.0/28) রিজার্ভ করতে হবে এবং কনজিউমার-ভিপিসি-তে একটি টার্গেট সাবনেটের নাম (কনজিউমার-পিএসসি-সাবনেট) নির্ধারণ করতে হবে। আমরা কয়েকটি ধাপে কনজিউমার-ভিপিসি-তে এই নামে একটি নতুন সাবনেট তৈরি করি।

মাইগ্রেশনের জন্য producer-fr-subnet সংরক্ষণ করুন

উৎপাদক কার্যকলাপ

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

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

সাবনেটের অবস্থা দেখার জন্য আমাদের তৈরি করা ইন্টারনাল-রেঞ্জটির উপর একটি ডেসক্রাইব চালান।

উৎপাদক কার্যকলাপ

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

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

নমুনা আউটপুট

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

VPC পিয়ারিং ভিত্তিক ফরওয়ার্ডিং রুল এবং সাবনেট মুছে ফেলুন

উৎপাদক কার্যকলাপ

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

gcloud compute forwarding-rules delete producer-fr --region=$region

gcloud compute addresses delete producer-fr-ip --region=$region

gcloud compute networks subnets delete producer-fr-subnet --region=$region

সাবনেট স্থানান্তর করুন

পূর্বে তৈরি করা ইন্টারনাল-রেঞ্জ ব্যবহার করে একটি নতুন সাবনেট তৈরি করে সাবনেটটিকে কনজিউমার-ভিপিসি-তে মাইগ্রেট করুন। এই সাবনেটের নামটি অবশ্যই আমাদের পূর্বে টার্গেট করা নামের (consumer-psc-subnet) মতোই হতে হবে। PEER_MIGRATION-এর নির্দিষ্ট উদ্দেশ্য থেকে বোঝা যায় যে, এই সাবনেটটি পিয়ার্ড ভিপিসিগুলোর মধ্যে সাবনেট মাইগ্রেশনের জন্য সংরক্ষিত। এই পারপাস ফ্ল্যাগের কারণে, এই সাবনেটে শুধুমাত্র সংরক্ষিত স্ট্যাটিক আইপি অ্যাড্রেস এবং পিএসসি এন্ডপয়েন্ট থাকতে পারে।

ভোক্তা কার্যকলাপ

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

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

১৪. এন্ড স্টেট পিএসসি এন্ডপয়েন্ট (কনজিউমার অ্যাক্টিভিটি) তৈরি করুন।

এই মুহূর্তে, Producer সার্ভিসটি এখনও ডাউন আছে। আমরা এইমাত্র যে সাবনেটটি তৈরি করেছি, সেটি এখনও লক করা আছে এবং শুধুমাত্র মাইগ্রেশনের নির্দিষ্ট কাজের জন্যই ব্যবহার করা যাবে। আপনি এই সাবনেটে একটি VM তৈরি করার চেষ্টা করে এটি পরীক্ষা করতে পারেন। VM তৈরি করার প্রক্রিয়াটি ব্যর্থ হবে।

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

gcloud compute instances create test-consumer-vm \
    --zone=$zone \
    --subnet=consumer-psc-subnet \
    --no-address

প্রত্যাশিত আউটপুট

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

আমরা শুধুমাত্র এই সাবনেটটি একটি PSC এন্ডপয়েন্ট তৈরি করতে ব্যবহার করতে পারি। উল্লেখ্য যে, আমরা যে IP অ্যাড্রেসটি তৈরি করি, তা আমাদের প্রডিউসার সার্ভিস VPC পিয়ারের মাধ্যমে যে ফরওয়ার্ডিং রুল ব্যবহার করেছিল, সেই একই IP অ্যাড্রেস ব্যবহার করে।

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

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-psc-subnet \
    --addresses 192.168.0.2

আবারও, আপনাকে অবশ্যই সেই একই সার্ভিস অ্যাটাচমেন্ট ইউআরআই (Service Attachment URI) ব্যবহার করতে হবে যা আপনি আগে নোট করেছিলেন এবং যা "টেস্ট" পিএসসি এন্ডপয়েন্ট (PSC Endpoint) তৈরি করতেও ব্যবহৃত হয়েছিল।

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

gcloud compute forwarding-rules create psc-endpoint \
    --region=$region \
    --network=consumer-vpc \
    --address=psc-endpoint-ip \
    --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

১৫. শেষ অবস্থা PSC এন্ডপয়েন্ট (ভোক্তা কার্যকলাপ) পরীক্ষা করুন

এই পর্যায়ে, আপনি স্টেট ৩ আর্কিটেকচারে আছেন।

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

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

curl service.example.com

প্রত্যাশিত আউটপুট

I am a Producer Service. 

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

exit

এই পর্যায়ে, বিভ্রাট শেষ হয়েছে এবং পরিষেবাটি আবার চালু হয়েছে। উল্লেখ্য যে, আমাদের বিদ্যমান DNS-এ কোনো পরিবর্তন করতে হয়নি। গ্রাহক পর্যায়ে ক্লায়েন্টে কোনো পরিবর্তন করার প্রয়োজন নেই। অ্যাপ্লিকেশনগুলো স্থানান্তরিত পরিষেবাটিতে তাদের কার্যক্রম পুনরায় শুরু করতে পারে।

১৬. অভিবাসন পরিচ্ছন্নতা অভিযান

মাইগ্রেশনটি চূড়ান্ত করতে আমাদের কয়েকটি পরিষ্করণমূলক পদক্ষেপ নিতে হবে। আমাদের অবশ্যই রিসোর্সগুলো ডিলিট এবং আনলক করতে হবে।

অভ্যন্তরীণ পরিসরের সাবনেট আনলক করুন

এর ফলে স্থানান্তরিত সাবনেটটি আনলক হবে, যাতে এর উদ্দেশ্য "PEER_MIGRATION" থেকে "PRIVATE"-এ পরিবর্তন করা যায়।

উৎপাদক কার্যকলাপ

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

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

ভোক্তা কার্যকলাপ

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

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

নমুনা আউটপুট

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

VPC পিয়ারগুলি মুছে ফেলুন

উৎপাদক কার্যকলাপ

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

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

ভোক্তা কার্যকলাপ

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

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

'test' PSC এন্ডপয়েন্টটি মুছে ফেলুন

ভোক্তা-কার্যকলাপ

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

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

১৭. মাইগ্রেশন পরিষ্করণ পরবর্তী চূড়ান্ত পরীক্ষা (ভোক্তা কার্যকলাপ)

এই পর্যায়ে, স্টেট ৪ আর্কিটেকচার (চূড়ান্ত অবস্থা) অর্জিত হয়েছে।

মাইগ্রেশন ক্লিন আপের ফলে কোনো বিরূপ প্রভাব দেখা যাচ্ছে না, তা নিশ্চিত করতে PSC এন্ডপয়েন্ট কানেক্টিভিটি পুনরায় পরীক্ষা করুন।

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

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

curl service.example.com

প্রত্যাশিত আউটপুট

I am a Producer Service. 

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

exit

সফল!

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

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

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-psc-subnet --region=$region -q

gcloud compute networks subnets delete consumer-vm-subnet --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete producer-sa --region=$region -q

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-ip --region=$region -q

gcloud compute backend-services delete producer-bes --region=$region -q

gcloud compute health-checks delete producer-hc --region=$region -q

gcloud compute instance-groups unmanaged delete prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

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

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

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

  • VPC পিয়ারিং ভিত্তিক পরিষেবা কীভাবে সেট আপ করবেন
  • পিএসসি ভিত্তিক পরিষেবা কীভাবে সেট আপ করবেন
  • VPC Peering থেকে PSC পরিষেবা মাইগ্রেশন সম্পন্ন করার জন্য Internal-Ranges API ব্যবহার করে VPC Peering-এর মাধ্যমে সাবনেট মাইগ্রেশন করা হয়।
  • সার্ভিস মাইগ্রেশনের জন্য কখন ডাউনটাইম প্রয়োজন তা বোঝা
  • অভিবাসন পরিষ্কার করার পদক্ষেপ