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

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

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

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

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

ল্যাবের দ্বিতীয় অংশে , আপনি ইস্টিওর বৈশিষ্ট্যগুলি যেমন মেট্রিক্স, ট্রেসিং, গতিশীল ট্র্যাফিক ব্যবস্থাপনা, ফল্ট ইনজেকশন এবং আরও অনেক কিছু অন্বেষণ করবেন।

তুমি কি শিখবে

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

তোমার যা লাগবে

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

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

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

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

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

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

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

96a9c957bc475304.png সম্পর্কে

b9a10ebdf5b5a448.png সম্পর্কে

a1e3c01a38fa61c2.png সম্পর্কে

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

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

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

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

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

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

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 4292cbf4971c9786.png সম্পর্কে .

bce75f34b2c53987.png সম্পর্কে

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

70f315d7b402b476.png সম্পর্কে

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

fbe3a0674c982259.png সম্পর্কে

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল দিয়ে পূর্ণ। এটি একটি স্থায়ী 5GB হোম ডিরেক্টরি অফার করে এবং Google Cloud-এ চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, কেবল একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।

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

  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 কোর অ্যাপ তৈরি করুন

ক্লাউড শেল প্রম্পটে, আপনি ডটনেট কমান্ড লাইন টুলের সংস্করণ পরীক্ষা করে যাচাই করতে পারেন যে এটি ইতিমধ্যেই ইনস্টল করা আছে। এটি ইনস্টল করা ডটনেট কমান্ড লাইন টুলের সংস্করণটি প্রিন্ট করবে:

dotnet --version

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

dotnet new mvc -o HelloWorldAspNetCore

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

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

৪. ASP.NET কোর অ্যাপটি চালান

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

cd HelloWorldAspNetCore

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

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

পোর্ট 8080-এ অ্যাপ্লিকেশন শোনা শুরু হয়।

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

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

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

আপনি ডিফল্ট ASP.NET কোর ওয়েবপৃষ্ঠাটি দেখতে পাবেন:

f579a9baedc108a9.png সম্পর্কে

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

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

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

অ্যাপের বেস ডিরেক্টরিতে, ডকার ইমেজ সংজ্ঞায়িত করার জন্য একটি 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"]

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

এই 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

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

স্ক্রিনশট: ২০১৫-১১-০৩ ১৭:২০:২২.png

আপনার একটি নতুন ট্যাবে ডিফল্ট ASP.NET কোর ওয়েবপৃষ্ঠাটি দেখা উচিত।

f579a9baedc108a9.png সম্পর্কে

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

এখন যেহেতু ছবিটি ইচ্ছামতো কাজ করছে, আপনি এটিকে Google Container Registry -এ ঠেলে দিতে পারেন, যা আপনার ডকার ছবির জন্য একটি ব্যক্তিগত সংগ্রহস্থল যা প্রতিটি Google ক্লাউড প্রকল্প থেকে (কিন্তু Google ক্লাউড প্ল্যাটফর্মের বাইরে থেকেও) অ্যাক্সেসযোগ্য:

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

একটি Kubernetes ক্লাস্টার তৈরি করুন। আপনি চাইলে অঞ্চলটি আপনার কাছাকাছি কোথাও পরিবর্তন করতে পারেন:

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 এবং Anthos Service Mesh এর জন্য Istio অ্যাড-অন সহ অন্যান্য ইনস্টলেশন বিকল্প রয়েছে। এর পরের অ্যাপ্লিকেশন ধাপগুলি যেকোনো Istio ইনস্টলেশনের ক্ষেত্রে কাজ করবে।

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

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 সাইডকারগুলি স্বয়ংক্রিয়ভাবে পরিষেবার জন্য প্রতিটি পডে ইনজেক্ট করা হয়।

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

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 কন্ট্রোল প্লেন, এবং ingress এবং egress gateways (যাকে আপনি "ইন্টারনেটের বাকি অংশের জন্য সাইডকার প্রক্সি" হিসাবে ভাবতে পারেন), যথাক্রমে 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 ডিপ্লয়মেন্ট এবং সার্ভিস নির্ধারণ করুন:

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 কোর অ্যাপ স্থাপন করেছেন এবং এটিকে Istio দ্বারা পরিচালিত করার জন্য কনফিগার করেছেন।

তুমি হয়তো ভাবছো "Istio এর সুবিধা কী?"। এটা একটা দারুন প্রশ্ন। এখন পর্যন্ত, Istio এই অ্যাপটি পরিচালনা করার কোন সুবিধা পায়নি। ল্যাবের দ্বিতীয় অংশে, আমরা 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

ইস্তিও আনইনস্টল করুন

ইস্তিও মুছে ফেলার জন্য:

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

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

kubectl get pods -n istio-system

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

gcloud container clusters delete hello-istio