Istio के साथ Google Kubernetes Engine में ASP.NET Core ऐप्लिकेशन डिप्लॉय करें (पार्ट 1)

1. खास जानकारी

ASP.NET Core, एक ओपन सोर्स और क्रॉस-प्लैटफ़ॉर्म फ़्रेमवर्क है. यह C# प्रोग्रामिंग लैंग्वेज का इस्तेमाल करके, क्लाउड-आधारित और इंटरनेट से कनेक्ट किए जाने वाले आधुनिक ऐप्लिकेशन बनाने के लिए, एक ओपन-सोर्स और क्रॉस-प्लैटफ़ॉर्म फ़्रेमवर्क है.

Kubernetes एक ओपन सोर्स सिस्टम है, जो कंटेनर वाले ऐप्लिकेशन के डिप्लॉयमेंट, स्केलिंग, और मैनेजमेंट को ऑटोमेट करता है. Istio, सेवाओं को कनेक्ट करने, सुरक्षित करने, मैनेज करने, और उनकी निगरानी करने के लिए एक ओपन फ़्रेमवर्क है.

लैब के इस पहले हिस्से में, आपने Google Kubernetes Engine (GKE) पर चल रहे Kubernetes पर एक सामान्य ASP.NET कोर ऐप्लिकेशन डिप्लॉय किया है और उसे Istio से मैनेज किए जाने के लिए कॉन्फ़िगर किया है.

लैब के दूसरे हिस्से में, आपको Istio की सुविधाओं के बारे में ज़्यादा जानकारी मिलेगी. जैसे, मेट्रिक, ट्रेस करना, डाइनैमिक ट्रैफ़िक मैनेजमेंट, गड़बड़ी इंजेक्शन वगैरह.

आप इन चीज़ों के बारे में जानेंगे

  • Docker कंटेनर में, आसान ASP.NET Core ऐप्लिकेशन बनाने और उसे पैकेज करने का तरीका.
  • Google Kubernetes Engine (GKE) की मदद से, Kubernetes क्लस्टर बनाने का तरीका.
  • GKE (जीकेई) पर Kubernetes क्लस्टर पर Istio को इंस्टॉल करने का तरीका.
  • अपने ASP.NET Core ऐप्लिकेशन को डिप्लॉय करने और इसके ट्रैफ़िक को Istio की मदद से मैनेज करने के लिए कैसे कॉन्फ़िगर करें.

आपको इनकी ज़रूरत होगी

  • Chrome या Firefox ब्राउज़र जैसा कोई ब्राउज़र

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे सिर्फ़ पढ़ें इसे पढ़ें और कसरतों को पूरा करें

Google Cloud Platform के साथ अपने अनुभव को कैसे रेटिंग दें?

शुरुआती इंटरमीडिएट कुशल

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करना

  1. Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

प्रोजेक्ट आईडी याद रखें. यह Google Cloud के सभी प्रोजेक्ट के लिए एक खास नाम होता है (ऊपर दिया गया नाम पहले ही ले लिया गया है और यह आपके लिए काम नहीं करेगा!). बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID के तौर पर दिखाया जाएगा.

  1. इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.

इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. "साफ़ करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है. इससे इस ट्यूटोरियल के अलावा बिलिंग की सुविधा नहीं मिलेगी. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से, कहीं से भी इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा सकता है. यह कमांड लाइन एनवायरमेंट है जो Google Cloud में काम करता है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें 4292cbf4971c9786.png पर क्लिक करें.

bce75f34b2c53987.png

अगर आपने Cloud Shell का इस्तेमाल पहले कभी नहीं किया है, तो आपको इसके बारे में जानकारी देने वाली एक इंटरमीडिएट स्क्रीन (पेज के फ़ोल्ड के नीचे) दिखेगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें (यह आपको फिर कभी नहीं दिखेगा). एक बार इस्तेमाल होने वाली स्क्रीन कुछ इस तरह दिखती है:

70f315d7b402b476.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

fbe3a0674c982259.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत है. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस को बेहतर बनाता है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम बस किसी ब्राउज़र या आपके Chromebook से किया जा सकता है.

Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है.

  1. यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list

कमांड आउटपुट

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. Cloud Shell में ASP.NET Core ऐप्लिकेशन बनाना

Cloud Shell प्रॉम्प्ट में, डॉटनेट कमांड लाइन टूल के वर्शन की जांच करके यह पुष्टि की जा सकती है कि यह टूल पहले से इंस्टॉल है या नहीं. इसे इंस्टॉल किए गए डॉटनेट कमांड लाइन टूल का वर्शन प्रिंट करना चाहिए:

dotnet --version

इसके बाद, एक नया स्केलेटन ASP.NET Core वेब ऐप्लिकेशन बनाएं.

dotnet new mvc -o HelloWorldAspNetCore

इससे एक प्रोजेक्ट बनता है और इसकी डिपेंडेंसी वापस आती है. आपको नीचे जैसा एक मैसेज दिखेगा.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. ASP.NET Core ऐप्लिकेशन चलाएं

हम अपना ऐप्लिकेशन चलाने के लिए करीब-करीब तैयार हैं. ऐप्लिकेशन फ़ोल्डर पर जाएं.

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 Core ऐप्लिकेशन को Docker कंटेनर में पैकेज करें

इसके बाद, अपने ऐप्लिकेशन को कंटेनर के तौर पर चलाने के लिए तैयार करें. सबसे पहले चरण में, कंटेनर और उसके कॉन्टेंट को तय करना होगा.

ऐप्लिकेशन की बेस डायरेक्ट्री में, Docker इमेज तय करने के लिए 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"]

आपकी Dockerfile में एक अहम कॉन्फ़िगरेशन, वह पोर्ट है जिस पर ऐप्लिकेशन, आने वाले ट्रैफ़िक (8080) को सुनता है. यह काम 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 कंटेनर चलाएगा:

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

साथ ही, CloudShell की वेब झलक देखने की सुविधा का फिर से फ़ायदा लें :

03-11-2015 17:20:22.png का स्क्रीनशॉट

आपको नए टैब में डिफ़ॉल्ट ASP.NET कोर वेबपेज दिखेगा.

f579a9baedc108a9.png

यह पुष्टि करने के बाद कि ऐप्लिकेशन, Docker कंटेनर में ठीक से चल रहा है, Ctrl-> C तक चल रहे कंटेनर को रोका जा सकता है.

इमेज उम्मीद के मुताबिक काम कर रही है. इसे Google Container Registry में भेजा जा सकता है. यह आपकी Docker इमेज की निजी जगह है, जिसे हर Google Cloud प्रोजेक्ट से ऐक्सेस किया जा सकता है, लेकिन Google Cloud Platform के बाहर से भी ऐक्सेस किया जा सकता है :

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

अगर कुछ समय बाद सब ठीक रहता है, तो आपको कंटेनर रजिस्ट्री सेक्शन में दी गई कंटेनर इमेज दिखेगी. इस समय, अब आपके पास पूरे प्रोजेक्ट के लिए Docker इमेज उपलब्ध है. इसे ऐक्सेस करने और इसके आयोजन की व्यवस्था करने का काम Kubernets करता है. ऐसा कुछ ही मिनटों में हो जाता है.

73558f3a54ce1c0c.png

अगर आपको जानकारी चाहिए, तो Google Cloud Storage में सेव की गई कंटेनर की इमेज पर जाएं. इसके लिए, इस लिंक पर जाएं: 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 Cloud Platform कंसोल के Kubernetes Engine सेक्शन में दिखेगी.

e46fd9c6ee82bcc4.png

इस कोडलैब के लिए, हम istio.io से Istio को डाउनलोड और इंस्टॉल करेंगे. इंस्टॉल करने के दूसरे विकल्प भी हैं. इनमें, GKE के लिए Istio ऐड-ऑन और Anthos Service Mesh भी शामिल हैं. इसके बाद के ऐप्लिकेशन के चरण, किसी भी 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

bin डायरेक्ट्री को अपने PATH में जोड़ने के लिए, दिए गए निर्देश को कॉपी करें और चिपकाएं, ताकि आप istioctl का इस्तेमाल कर सकें:

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

इस बात की पुष्टि करें कि istioctl उपलब्ध है. इसके लिए, यह देखें कि आपका क्लस्टर Istio के लिए तैयार है या नहीं:

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

7. इंस्टॉलेशन की पुष्टि करें

इस्टियो में तीन सेवाएं मिलती हैं: 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: इस्टियो कंट्रोल प्लेन. प्रॉक्सी साइडकार, सेवा खोज, प्रमाणपत्र वितरण और साइडकार इंजेक्शन के कॉन्फ़िगरेशन और प्रोग्रामिंग को हैंडल करता है
  • ingress gateway: आपके क्लस्टर के बाहर से आने वाले अनुरोधों को मैनेज करता है.
  • egress gateway: आपके क्लस्टर से बाहर के एंडपॉइंट पर किए जाने वाले आउटगोइंग अनुरोधों को मैनेज करता है.

8. ऐप्लिकेशन को डिप्लॉय करें

अब आपने यह पुष्टि कर ली है कि Istio इंस्टॉल हो गया है और चल रहा है, तो अब ASP.NET Core ऐप्लिकेशन को डिप्लॉय किया जा सकता है.

डिप्लॉयमेंट और सेवा

सबसे पहले, अपने पसंदीदा एडिटर (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

गेटवे और VirtualService

इन्ग्रेस डेटा ट्रैफ़िक को मेश तक पहुंचाने के लिए, आपको गेटवे और VirtualService बनाना होगा.

गेटवे, एचटीटीपी/टीसीपी ट्रैफ़िक के लिए लोड बैलेंसर को कॉन्फ़िगर करता है. आम तौर पर, यह मेश के किनारे पर काम करता है, ताकि किसी ऐप्लिकेशन के लिए इन्ग्रेस ट्रैफ़िक को चालू किया जा सके. 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

इसके बाद, 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 की सुविधा वाले ऐप्लिकेशन को डिप्लॉय किया है. इसके बाद, आपको ऐप्लिकेशन इस्तेमाल किया जा रहा है.

9. ऐप्लिकेशन की जांच करें

आख़िर में ऐप्लिकेशन को काम करते हुए देखा जा सकता है. आपको गेटवे का एक्सटर्नल आईपी और पोर्ट लेना होगा. यह 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

10. बधाई हो!

आपने अभी-अभी Google Kubernetes Engine (GKE) पर चल रहे Kubernetes में, एक सामान्य ASP.NET Core ऐप्लिकेशन डिप्लॉय किया है और उसे 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

Istio की सेवा खत्म होने की पुष्टि करने के लिए:

kubectl get pods -n istio-system

Kubernetes क्लस्टर मिटाना

gcloud container clusters delete hello-istio