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

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

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

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

इस लैब के पहले हिस्से में, आपको Google Kubernetes Engine (GKE) पर चल रहे Kubernetes पर एक सामान्य ASP.NET Core ऐप्लिकेशन डिप्लॉय करना है. साथ ही, इसे 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 का इस्तेमाल नहीं किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में जानकारी दी गई होगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें. इसके बाद, आपको यह स्क्रीन कभी नहीं दिखेगी. एक बार दिखने वाली स्क्रीन ऐसी दिखती है:

70f315d7b402b476.png

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

fbe3a0674c982259.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और 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. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
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 कमांड लाइन टूल पहले से इंस्टॉल है. इसके लिए, इसका वर्शन देखें. इससे इंस्टॉल किए गए dotnet कमांड लाइन टूल का वर्शन प्रिंट होना चाहिए:

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 Core वेबपेज दिखेगा:

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

इसके बाद, Cloud Shell की वेब झलक सुविधा का फिर से इस्तेमाल करें :

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

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

f579a9baedc108a9.png

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

अब इमेज ठीक से काम कर रही है. इसलिए, इसे Google Container Registry पर पुश किया जा सकता है. यह आपकी Docker इमेज के लिए एक निजी रिपॉज़िटरी है. इसे हर Google Cloud प्रोजेक्ट से ऐक्सेस किया जा सकता है. हालांकि, इसे Google Cloud Platform से बाहर भी ऐक्सेस किया जा सकता है:

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

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

73558f3a54ce1c0c.png

अगर आपको कंटेनर इमेज के बारे में ज़्यादा जानना है, तो इस लिंक पर जाकर उन्हें ब्राउज़ करें: https://console.cloud.google.com/storage/browser/. ये इमेज, Google Cloud Storage में सेव होती हैं. (पूरा लिंक इस तरह का होना चाहिए: 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 Console के 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 साइडकार अपने-आप हर पॉड में जुड़ जाते हैं.

इसके लिए, आपको उस नेमस्पेस (‘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
...

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>

Ingress Gateway का टाइप 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: यह आपके क्लस्टर से बाहर के एंडपॉइंट को भेजे जाने वाले अनुरोधों को मैनेज करता है.

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

आपने पुष्टि कर ली है कि 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

Gateway और 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 का इस्तेमाल करने का कोई फ़ायदा नहीं मिला है. लैब के दूसरे हिस्से में, हम Istio की सुविधाओं के बारे में ज़्यादा जानेंगे. जैसे, मेट्रिक, ट्रेसिंग, डाइनैमिक ट्रैफ़िक मैनेजमेंट, सेवा विज़ुअलाइज़ेशन, और फ़ॉल्ट इंजेक्शन.

अगले चरण

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 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