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

1. ওভারভিউ

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

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

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

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

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

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

শুধুমাত্র মাধ্যমে এটি পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন

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

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

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

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

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

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

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

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

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

bce75f34b2c53987.png

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

70f315d7b402b476.png

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

fbe3a0674c982259.png

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, শুধুমাত্র একটি ব্রাউজার বা আপনার 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].

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

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

dotnet --version

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

dotnet new mvc -o HelloWorldAspNetCore

এটি একটি প্রকল্প তৈরি করা এবং এর নির্ভরতা পুনরুদ্ধার করা উচিত। আপনি নীচের অনুরূপ একটি বার্তা দেখতে হবে.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. 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' নির্বাচন করুন।

Capture.PNG

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

f579a9baedc108a9.png

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

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

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

অ্যাপের বেস ডিরেক্টরিতে, ডকার ইমেজটি সংজ্ঞায়িত করতে একটি Dockerfile তৈরি করুন।

touch Dockerfile

আপনার প্রিয় সম্পাদক ( vim, nano,emacs বা ক্লাউড শেলের কোড এডিটর) ব্যবহার করে 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

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

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

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

f579a9baedc108a9.png

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

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

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

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

73558f3a54ce1c0c.png

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

6. 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

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

e46fd9c6ee82bcc4.png

এই কোডল্যাবের জন্য, আমরা istio.io থেকে Istio ডাউনলোড এবং ইনস্টল করব। GKE এবং Anthos Service Mesh- এর জন্য Istio অ্যাড-অন সহ অন্যান্য ইনস্টলেশন বিকল্প রয়েছে। এর পরের আবেদনের ধাপগুলো যেকোনো 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"

আপনার ক্লাস্টার ইস্টিওর জন্য প্রস্তুত কিনা যাচাই করে istioctl উপলব্ধ কিনা যাচাই করুন:

istioctl x precheck

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

ডেমো প্রোফাইল সহ Istio ইনস্টল করুন:

istioctl install --set profile=demo

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

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

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

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

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
...

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

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 রয়েছে তাই এটি ইন্টারনেট থেকে অ্যাক্সেসযোগ্য; অন্যদের শুধুমাত্র ক্লাস্টারের মধ্যে থেকে অ্যাক্সেসযোগ্য হতে হবে।

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

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 : আপনার ক্লাস্টারের বাইরে শেষ পয়েন্টে বহির্গামী অনুরোধগুলি পরিচালনা করে।

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

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

স্থাপনা এবং সেবা

প্রথমে, আপনার প্রিয় সম্পাদক ( vim, nano,emacs বা ক্লাউড শেলের কোড এডিটর) ব্যবহার করে একটি 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 ট্র্যাফিকের জন্য একটি লোড ব্যালেন্সার কনফিগার করে, যা সাধারণত একটি অ্যাপ্লিকেশনের জন্য প্রবেশ ট্র্যাফিক সক্ষম করতে জালের প্রান্তে কাজ করে। একটি VirtualService নিয়মগুলিকে সংজ্ঞায়িত করে যা নিয়ন্ত্রণ করে যে কীভাবে একটি পরিষেবার জন্য অনুরোধগুলি একটি 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

এর পরে, ভার্চুয়াল সার্ভিস স্থাপন করতে নিম্নলিখিত কমান্ডটি চালান:

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-সক্ষম অ্যাপ্লিকেশন স্থাপন করেছেন৷ পরবর্তী, আপনি ব্যবহার করা অ্যাপ্লিকেশন দেখতে.

9. আবেদন পরীক্ষা করুন

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

kubectl get svc istio-ingressgateway -n istio-system

একটি GATEWAY_URL ভেরিয়েবলে বাহ্যিক IP এবং পোর্ট রপ্তানি করুন:

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

10. অভিনন্দন!

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

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

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

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।

11. পরিষ্কার করা

আপনি যদি ল্যাবের দ্বিতীয় অংশে অবিরত না থাকেন তবে আপনি অ্যাপটি মুছে ফেলতে পারেন এবং 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

Kubernetes ক্লাস্টার মুছুন

gcloud container clusters delete hello-istio