Istio সহ Google Kubernetes ইঞ্জিনে ASP.NET কোর অ্যাপ স্থাপন করুন (পর্ব 1)

১. সংক্ষিপ্ত বিবরণ

ASP.NET Core হলো C# প্রোগ্রামিং ভাষা ব্যবহার করে আধুনিক ক্লাউড-ভিত্তিক এবং ইন্টারনেট-সংযুক্ত অ্যাপ্লিকেশন তৈরির জন্য একটি ওপেন-সোর্স ও ক্রস-প্ল্যাটফর্ম ফ্রেমওয়ার্ক।

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

ল্যাবের এই প্রথম অংশে, আপনি গুগল কুবারনেটিস ইঞ্জিন (GKE)-এ চলমান কুবারনেটিসে একটি সাধারণ ASP.NET Core অ্যাপ ডেপ্লয় করবেন এবং এটিকে Istio দ্বারা পরিচালিত হওয়ার জন্য কনফিগার করবেন।

ল্যাবের দ্বিতীয় অংশে , আপনি Istio-এর মেট্রিক্স, ট্রেসিং, ডায়নামিক ট্র্যাফিক ম্যানেজমেন্ট, ফল্ট ইনজেকশন এবং আরও অনেক বৈশিষ্ট্য সম্পর্কে বিস্তারিতভাবে জানবেন।

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

  • ডকার কন্টেইনারে কীভাবে একটি সাধারণ ASP.NET Core অ্যাপ তৈরি এবং প্যাকেজ করতে হয়।
  • গুগল কুবারনেটিস ইঞ্জিন (GKE) ব্যবহার করে কীভাবে একটি কুবারনেটিস ক্লাস্টার তৈরি করবেন।
  • GKE-তে Kubernetes ক্লাস্টারে Istio কীভাবে ইনস্টল করবেন
  • আপনার ASP.NET Core অ্যাপটি কীভাবে ডেপ্লয় করবেন এবং Istio দ্বারা এর ট্র্যাফিক পরিচালনার জন্য কীভাবে কনফিগার করবেন।

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

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

গুগল ক্লাউড প্ল্যাটফর্মের সাথে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে এটিকে পরবর্তীতে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

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

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

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

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। 4292cbf4971c9786.png .

bce75f34b2c53987.png

আপনি যদি আগে কখনো ক্লাউড শেল চালু না করে থাকেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন (নিচে দেওয়া আছে) আপনার সামনে আসবে। যদি তাই হয়, তাহলে 'Continue'-তে ক্লিক করুন (এবং আপনি এটি আর কখনো দেখতে পাবেন না)। একবারের জন্য আসা সেই স্ক্রিনটি দেখতে এইরকম:

70f315d7b402b476.png

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

fbe3a0674c982259.png

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

ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. ক্লাউড শেলে একটি ASP.NET Core অ্যাপ তৈরি করুন

ক্লাউড শেল প্রম্পটে, আপনি ডটনেট কমান্ড লাইন টুলের ভার্সন চেক করে যাচাই করতে পারেন যে এটি আগে থেকেই ইনস্টল করা আছে কিনা। এটি ইনস্টল করা ডটনেট কমান্ড লাইন টুলের ভার্সনটি প্রিন্ট করবে:

dotnet --version

এরপরে, একটি নতুন স্কেলেটন ASP.NET Core ওয়েব অ্যাপ তৈরি করুন।

dotnet new mvc -o HelloWorldAspNetCore

এটি একটি প্রজেক্ট তৈরি করবে এবং এর ডিপেন্ডেন্সিগুলো রিস্টোর করবে। আপনি নীচের মতো একটি মেসেজ দেখতে পাবেন।

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

৪. ASP.NET Core অ্যাপটি চালান।

আমরা আমাদের অ্যাপটি চালানোর জন্য প্রায় প্রস্তুত। অ্যাপ ফোল্ডারটিতে যান।

cd HelloWorldAspNetCore

অবশেষে, অ্যাপটি চালান।

dotnet run --urls=http://localhost:8080

অ্যাপ্লিকেশনটি ৮০৮০ পোর্টে শোনা শুরু করে।

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

অ্যাপটি চালু আছে কিনা তা যাচাই করতে, উপরের ডানদিকে থাকা ওয়েব প্রিভিউ বোতামে ক্লিক করুন এবং 'পোর্ট ৮০৮০-এ প্রিভিউ' নির্বাচন করুন।

ক্যাপচার.পিএনজি

আপনি ডিফল্ট ASP.NET Core ওয়েবপেজটি দেখতে পাবেন:

f579a9baedc108a9.png

অ্যাপটি চালু আছে কিনা তা যাচাই করার পর, অ্যাপটি বন্ধ করতে Ctrl+C চাপুন।

৫. ASP.NET Core অ্যাপটিকে একটি ডকার কন্টেইনারে প্যাকেজ করুন।

এরপর, আপনার অ্যাপটিকে কন্টেইনার হিসেবে চালানোর জন্য প্রস্তুত করুন। প্রথম ধাপ হলো কন্টেইনার এবং এর বিষয়বস্তু নির্ধারণ করা।

অ্যাপের বেস ডিরেক্টরিতে ডকার ইমেজটি নির্ধারণ করার জন্য একটি Dockerfile তৈরি করুন।

touch Dockerfile

আপনার পছন্দের এডিটর ( vim, nano,emacs অথবা Cloud Shell-এর কোড এডিটর) ব্যবহার করে Dockerfile এ নিম্নলিখিতটি যোগ করুন।

# Use Microsoft's official build .NET image.
# https://hub.docker.com/_/microsoft-dotnet-core-sdk/
FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build
WORKDIR /app

# Install production dependencies.
# Copy csproj and restore as distinct layers.
COPY *.csproj ./
RUN dotnet restore

# Copy local code to the container image.
COPY . ./
WORKDIR /app

# Build a release artifact.
RUN dotnet publish -c Release -o out

# Use Microsoft's official runtime .NET image.
# https://hub.docker.com/_/microsoft-dotnet-core-aspnet/
FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS runtime
WORKDIR /app
COPY --from=build /app/out ./

# Make sure the app binds to port 8080
ENV ASPNETCORE_URLS http://*:8080

# Run the web service on container startup.
ENTRYPOINT ["dotnet", "HelloWorldAspNetCore.dll"]

আপনার ডকারফাইলে অন্তর্ভুক্ত একটি গুরুত্বপূর্ণ কনফিগারেশন হলো সেই পোর্টটি (৮০৮০), যেটিতে অ্যাপটি আগত ট্র্যাফিকের জন্য অপেক্ষা করে। এটি ASPNETCORE_URLS এনভায়রনমেন্ট ভেরিয়েবল সেট করার মাধ্যমে সম্পন্ন করা হয়, যা ASP.NET Core অ্যাপগুলো কোন পোর্টে অপেক্ষা করবে তা নির্ধারণ করতে ব্যবহার করে।

এই Dockerfile সংরক্ষণ করুন। এবার, চলুন ইমেজটি বিল্ড করা যাক:

docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 .

এটি সম্পন্ন হয়ে গেলে (সবকিছু ডাউনলোড ও এক্সট্র্যাক্ট করতে কিছুটা সময় লাগবে), আপনি দেখতে পাবেন যে ইমেজটি তৈরি হয়ে আপনার কম্পিউটারে সেভ হয়ে গেছে:

docker images

REPOSITORY                             TAG   
gcr.io/yourproject-XXXX/hello-dotnet   v1            

নিম্নলিখিত কমান্ডটি ব্যবহার করে ইমেজটি স্থানীয়ভাবে পরীক্ষা করুন, যা আপনার সদ্য তৈরি করা কন্টেইনার ইমেজ থেকে পোর্ট 8080-এ একটি ডকার কন্টেইনার চালাবে:

docker run -p 8080:8080 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1

এবং আবারও ক্লাউডশেলের ওয়েব প্রিভিউ ফিচারের সুবিধা নিন:

2015-11-03 17:20:22.png থেকে স্ক্রিনশট

আপনি একটি নতুন ট্যাবে ডিফল্ট ASP.NET Core ওয়েবপেজটি দেখতে পাবেন।

f579a9baedc108a9.png

ডকার কন্টেইনারে অ্যাপটি স্থানীয়ভাবে ঠিকঠাক চলছে কিনা তা যাচাই করার পর, আপনি Ctrl-> C চেপে চলমান কন্টেইনারটি বন্ধ করতে পারেন।

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

docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1

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

73558f3a54ce1c0c.png

আপনি যদি আগ্রহী হন, তাহলে এই লিঙ্কটি অনুসরণ করে গুগল ক্লাউড স্টোরেজে সংরক্ষিত কন্টেইনার ইমেজগুলো দেখতে পারেন: https://console.cloud.google.com/storage/browser/ (সম্পূর্ণ লিঙ্কটি দেখতে এইরকম হবে: https://console.cloud.google.com/project/ PROJECT_ID /storage/browser/)।

৬. Istio ব্যবহার করে একটি Kubernetes/GKE ক্লাস্টার তৈরি করুন।

প্রথমে, নিশ্চিত করুন যে আপনার Kubernetes Engine API সক্রিয় করা আছে:

gcloud services enable container.googleapis.com

একটি কুবারনেটিস ক্লাস্টার তৈরি করুন। আপনি চাইলে অঞ্চলটি আপনার কাছাকাছি কোনো জায়গায় পরিবর্তন করতে পারেন:

gcloud container clusters create hello-istio \
  --cluster-version=latest \
  --machine-type=n1-standard-2 \
  --num-nodes=4 \
  --region europe-west1

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

e46fd9c6ee82bcc4.png

এই কোডল্যাবের জন্য, আমরা istio.io থেকে Istio ডাউনলোড এবং ইনস্টল করব। ইনস্টলেশনের জন্য অন্যান্য বিকল্পও রয়েছে, যার মধ্যে GKE-এর জন্য Istio অ্যাড-অন এবং Anthos Service Mesh অন্তর্ভুক্ত। এর পরের অ্যাপ্লিকেশন ধাপগুলো যেকোনো Istio ইনস্টলেশনেই কাজ করবে।

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

curl -L https://istio.io/downloadIstio | sh -

স্ক্রিপ্টটি আপনাকে জানিয়ে দেবে যে Istio-এর কোন সংস্করণটি ডাউনলোড করা হয়েছে:

Istio has been successfully downloaded into the istio-1.8.1 folder on your system.

ইনস্টলেশন ডিরেক্টরিতে নমুনা অ্যাপ্লিকেশন এবং istioctl ক্লায়েন্ট বাইনারি রয়েছে। সেই ডিরেক্টরিতে যান:

cd istio-1.8.1

আপনার PATHbin ডিরেক্টরিটি যুক্ত করতে প্রদত্ত কমান্ডটি কপি ও পেস্ট করুন, যাতে আপনি istioctl ব্যবহার করতে পারেন:

export PATH="$PATH:/home/<YOURHOMEID>/istio-1.8.1/bin"

আপনার ক্লাস্টার Istio-এর জন্য প্রস্তুত কিনা তা পরীক্ষা করে istioctl উপলব্ধ আছে কিনা তা যাচাই করুন:

istioctl x precheck

আপনি একটি বার্তা দেখতে পাবেন যেখানে লেখা থাকবে Install Pre-Check passed! The cluster is ready for Istio installation.

ডেমো প্রোফাইল দিয়ে Istio ইনস্টল করুন:

istioctl install --set profile=demo

আপনার ক্লাস্টারে এখন Istio ইনস্টল করা হয়েছে।

স্বয়ংক্রিয় সাইডকার ইনজেকশন

Istio ব্যবহার শুরু করতে আপনার অ্যাপ্লিকেশনে কোনো পরিবর্তন করার প্রয়োজন নেই। আপনি যখন সার্ভিসগুলো কনফিগার ও রান করবেন, তখন সেই সার্ভিসের জন্য প্রতিটি পডে Envoy সাইডকারগুলো স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যাবে।

এটি কার্যকর করার জন্য, আপনার মাইক্রোসার্ভিসগুলোর জন্য ব্যবহৃত নেমস্পেস ('default')-এর ক্ষেত্রে সাইডকার ইনজেকশন চালু করতে হবে। এটি করার জন্য আপনাকে একটি লেবেল প্রয়োগ করতে হবে:

kubectl label namespace default istio-injection=enabled

লেবেলটি সফলভাবে লাগানো হয়েছে কিনা তা যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান:

kubectl get namespace -L istio-injection

আউটপুটটি নিশ্চিত করে যে ডিফল্ট নেমস্পেসের জন্য সাইডকার ইনজেকশন সক্রিয় করা আছে:

NAME              STATUS   AGE    ISTIO-INJECTION
default           Active   3m     enabled
istio-system      Active   63s    disabled
...

৭. ইনস্টলেশন যাচাই করুন

Istio-এর সাথে তিনটি সার্ভিস আসে: istiod কন্ট্রোল প্লেন, এবং ইনগ্রেস ও ইগ্রেস গেটওয়ে (যাদেরকে আপনি "ইন্টারনেটের বাকি অংশের জন্য সাইডকার প্রক্সি" হিসেবে ভাবতে পারেন), যাদের নাম যথাক্রমে istio-ingressgateway এবং istio-egressgateway

kubectl get svc -n istio-system

আপনার আউটপুটটি দেখতে এইরকম হবে:

NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP                                                                     AGE
istio-egressgateway    ClusterIP      10.55.252.182   <none>
istio-ingressgateway   LoadBalancer   10.55.250.185   35.233.118.42
istiod                 ClusterIP      10.55.253.217   <none>

ইনগ্রেস গেটওয়েটি এক ধরনের LoadBalancer হওয়ায় এটি ইন্টারনেট থেকে অ্যাক্সেসযোগ্য; অন্যগুলোকে শুধু ক্লাস্টারের ভেতর থেকে অ্যাক্সেসযোগ্য হলেই চলে।

এরপর, নিশ্চিত করুন যে সংশ্লিষ্ট Kubernetes পডগুলো ডেপ্লয় করা হয়েছে এবং সমস্ত কন্টেইনার চালু আছে:

kubectl get pods -n istio-system

যখন সব পড চালু হয়ে যাবে, তখন আপনি এগিয়ে যেতে পারেন।

NAME                                    READY   STATUS
istio-egressgateway-674988f895-m6tk4    1/1     Running
istio-ingressgateway-6996f7dcc8-7lvm2   1/1     Running
istiod-6bf5fc8b64-j79hj                 1/1     Running
  • istiod : Istio কন্ট্রোল প্লেন। এটি প্রক্সি সাইডকারের কনফিগারেশন ও প্রোগ্রামিং, সার্ভিস ডিসকভারি, সার্টিফিকেট ডিস্ট্রিবিউশন এবং সাইডকার ইনজেকশন পরিচালনা করে।
  • ingress gateway : আপনার ক্লাস্টারের বাইরে থেকে আসা অনুরোধগুলি পরিচালনা করে।
  • egress gateway : আপনার ক্লাস্টারের বাইরের এন্ডপয়েন্টগুলিতে পাঠানো অনুরোধগুলি পরিচালনা করে।

৮. অ্যাপ্লিকেশনটি স্থাপন করুন।

এখন যেহেতু আপনি যাচাই করে নিয়েছেন যে Istio ইনস্টল করা আছে এবং চালু রয়েছে, আপনি ASP.NET Core অ্যাপটি ডেপ্লয় করতে পারেন।

মোতায়েন এবং পরিষেবা

প্রথমে, আপনার পছন্দের এডিটর ( vim, nano,emacs বা Cloud Shell-এর কোড এডিটর) ব্যবহার করে একটি aspnetcore.yaml ফাইল তৈরি করুন এবং অ্যাপটির জন্য Kubernetes Deployment ও Service নির্ধারণ করুন:

apiVersion: v1
kind: Service
metadata:
  name: aspnetcore-service
  labels:
    app: aspnetcore
spec:
  ports:
  - port: 8080
    name: http
  selector:
    app: aspnetcore
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: aspnetcore-v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aspnetcore
      version: v1
  template:
    metadata:
      labels:
        app: aspnetcore
        version: v1
    spec:
      containers:
      - name: aspnetcore
        image: gcr.io/YOUR-PROJECT-ID/hello-dotnet:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

ফাইলটির বিষয়বস্তু হলো অ্যাপ্লিকেশনটি ডেপ্লয় করার জন্য ব্যবহৃত সাধারণ ডেপ্লয়মেন্ট এবং সার্ভিসসমূহ এবং এতে Istio-এর নিজস্ব কোনো কিছু নেই।

kubectl ব্যবহার করে সার্ভিসগুলো ডিফল্ট নেমস্পেসে ডিপ্লয় করুন:

kubectl apply -f aspnetcore.yaml
service "aspnetcore-service" created
deployment.extensions "aspnetcore-v1" created

পডগুলো চালু আছে কিনা তা যাচাই করুন:

kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
aspnetcore-v1-6cf64748-mddb   2/2       Running   0          34s

গেটওয়ে এবং ভার্চুয়াল পরিষেবা

মেশে ইনগ্রেস ট্র্যাফিক পৌঁছানোর অনুমতি দিতে আপনাকে একটি গেটওয়ে এবং একটি ভার্চুয়ালসার্ভিস তৈরি করতে হবে।

একটি গেটওয়ে HTTP/TCP ট্র্যাফিকের জন্য একটি লোড ব্যালেন্সার কনফিগার করে, যা সাধারণত কোনো অ্যাপ্লিকেশনের জন্য ইনগ্রেস ট্র্যাফিক সক্ষম করতে মেশের প্রান্তে কাজ করে। একটি ভার্চুয়ালসার্ভিস সেই নিয়মগুলো সংজ্ঞায়িত করে যা নিয়ন্ত্রণ করে একটি Istio সার্ভিস মেশের মধ্যে কোনো সার্ভিসের জন্য অনুরোধগুলো কীভাবে রাউট করা হবে।

গেটওয়ে নির্ধারণ করতে একটি aspnetcore-gateway.yaml ফাইল তৈরি করুন:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: aspnetcore-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

VirtualService সংজ্ঞায়িত করতে একটি aspnetcore-virtualservice.yaml ফাইল তৈরি করুন:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: aspnetcore-virtualservice
spec:
  hosts:
  - "*"
  gateways:
  - aspnetcore-gateway
  http:
  - route:
    - destination:
        host: aspnetcore-service

গেটওয়েটি ডেপ্লয় করতে kubectl কমান্ডটি চালান:

kubectl apply -f aspnetcore-gateway.yaml

এই কমান্ডটি নিম্নলিখিত আউটপুট তৈরি করে:

gateway.networking.istio.io "aspnetcore-gateway" created

এরপর, VirtualService-টি ডিপ্লয় করতে নিম্নলিখিত কমান্ডটি চালান:

kubectl apply -f aspnetcore-virtualservice.yaml

এই কমান্ডটি নিম্নলিখিত আউটপুট তৈরি করে:

virtualservice.networking.istio.io "aspnetcore-virtualservice" created

সবকিছু ঠিকঠাক চলছে কিনা তা যাচাই করুন:

kubectl get gateway
NAME                      AGE
aspnetcore-gateway   28s
kubectl get virtualservice
NAME                             AGE
aspnetcore-virtualservice   33s

অভিনন্দন! আপনি এইমাত্র একটি Istio-সক্ষম অ্যাপ্লিকেশন স্থাপন করেছেন। এরপর, আপনি অ্যাপ্লিকেশনটির ব্যবহার দেখতে পাবেন।

৯. অ্যাপ্লিকেশনটি পরীক্ষা করুন

অবশেষে আপনি অ্যাপ্লিকেশনটি কার্যকর অবস্থায় দেখতে পারবেন। আপনাকে গেটওয়ের এক্সটার্নাল আইপি এবং পোর্ট সংগ্রহ করতে হবে। এটি EXTERNAL-IP এর অধীনে তালিকাভুক্ত আছে।

kubectl get svc istio-ingressgateway -n istio-system

এক্সটার্নাল আইপি এবং পোর্ট একটি GATEWAY_URL ভেরিয়েবলে এক্সপোর্ট করুন:

export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

অ্যাপটি পরীক্ষা করার জন্য curl ব্যবহার করুন। সার্ভিসটির রেসপন্স কোড 200 হওয়া উচিত।

curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/

বিকল্পভাবে, আপনি ব্রাউজার খুলে http://<gatewayurl> -এ গিয়ে অ্যাপটি দেখতে পারেন:

f579a9baedc108a9.png

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

আপনি এইমাত্র গুগল কুবারনেটিস ইঞ্জিন (GKE)-এ চলমান কুবারনেটিসে একটি সাধারণ ASP.NET Core অ্যাপ ডেপ্লয় করেছেন এবং এটিকে Istio দ্বারা পরিচালিত হওয়ার জন্য কনফিগার করেছেন।

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

পরবর্তী পদক্ষেপ

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।

১১. পরিচ্ছন্নতা

আপনি যদি ল্যাবের দ্বিতীয় অংশে অংশগ্রহণ না করেন, তাহলে আপনি অ্যাপটি ডিলিট করে Istio আনইনস্টল করতে পারেন অথবা সরাসরি Kubernetes ক্লাস্টারটি ডিলিট করে দিতে পারেন।

অ্যাপটি মুছে ফেলুন

অ্যাপটি ডিলিট করতে:

kubectl delete -f aspnetcore-gateway.yaml
Kubectl delete -f aspnetcore-virtualservice.yaml
kubectl delete -f aspnetcore.yaml

অ্যাপটি চলে গেছে কিনা তা নিশ্চিত করতে:

kubectl get gateway 
kubectl get virtualservices 
kubectl get pods

Istio আনইনস্টল করুন

Istio মুছে ফেলতে:

kubectl delete -f install/kubernetes/istio-demo-auth.yaml

ইস্তিও চলে গেছে তা নিশ্চিত করতে:

kubectl get pods -n istio-system

কুবারনেটিস ক্লাস্টার মুছে ফেলুন

gcloud container clusters delete hello-istio