ทำให้แอป ASP.NET Core ใช้งานได้กับ Google Kubernetes Engine ด้วย Istio (ส่วนที่ 1)

1. ภาพรวม

ASP.NET Core เป็นเฟรมเวิร์กแบบโอเพนซอร์สและข้ามแพลตฟอร์มสำหรับสร้างแอปพลิเคชันที่ทันสมัยซึ่งทำงานบนระบบคลาวด์และเชื่อมต่ออินเทอร์เน็ตโดยใช้ภาษาโปรแกรม C#

Kubernetes คือระบบโอเพนซอร์สสำหรับการทำให้การติดตั้งใช้งาน การปรับขนาด และการจัดการแอปพลิเคชันที่มีคอนเทนเนอร์เป็นไปโดยอัตโนมัติ Istio เป็นเฟรมเวิร์กแบบเปิดสำหรับการเชื่อมต่อ การรักษาความปลอดภัย การจัดการ และการตรวจสอบบริการ

ในส่วนแรกของแล็บนี้ คุณจะทำให้แอป ASP.NET Core แบบง่ายใช้งานได้ใน Kubernetes ที่ทำงานบน Google Kubernetes Engine (GKE) และกำหนดค่าให้ Istio จัดการ

ในส่วนที่ 2 ของแล็บ คุณจะได้สำรวจฟีเจอร์ต่างๆ ของ Istio เพิ่มเติม เช่น เมตริก การติดตาม การจัดการการรับส่งข้อมูลแบบไดนามิก การแทรกข้อบกพร่อง และอื่นๆ

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างและแพ็กเกจแอป ASP.NET Core อย่างง่ายในคอนเทนเนอร์ Docker
  • วิธีสร้างคลัสเตอร์ Kubernetes ด้วย Google Kubernetes Engine (GKE)
  • วิธีติดตั้ง Istio บนคลัสเตอร์ Kubernetes ใน GKE
  • วิธีติดตั้งใช้งานแอป 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 ในภายหลังใน Codelab นี้

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้ คุณจะใช้ 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 GB และทำงานใน 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. สร้างแอป ASP.NET Core ใน Cloud Shell

ในพรอมต์ของ 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

จากนั้นเตรียมแอปให้ทำงานเป็นคอนเทนเนอร์ ขั้นตอนแรกคือการกำหนดคอนเทนเนอร์และเนื้อหาของคอนเทนเนอร์

ในไดเรกทอรีฐานของแอป ให้สร้าง Dockerfile เพื่อกำหนดอิมเมจ Docker

touch Dockerfile

เพิ่มข้อมูลต่อไปนี้ลงใน Dockerfile โดยใช้โปรแกรมแก้ไขที่คุณชื่นชอบ (vim, nano,emacs หรือตัวแก้ไขโค้ดของ Cloud Shell)

# 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            

ทดสอบอิมเมจในเครื่องด้วยคำสั่งต่อไปนี้ ซึ่งจะเรียกใช้คอนเทนเนอร์ Docker ในเครื่องบนพอร์ต 8080 จากอิมเมจคอนเทนเนอร์ที่สร้างขึ้นใหม่

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

หากสนใจ คุณสามารถไปยังส่วนต่างๆ ของอิมเมจคอนเทนเนอร์ขณะที่จัดเก็บไว้ใน Google Cloud Storage ได้โดยไปที่ลิงก์ https://console.cloud.google.com/storage/browser/ (ลิงก์ที่สมบูรณ์ควรมีรูปแบบดังนี้ https://console.cloud.google.com/project/PROJECT_ID/storage/browser/)

6. สร้างคลัสเตอร์ Kubernetes/GKE ด้วย Istio

ก่อนอื่น ให้ตรวจสอบว่าคุณได้เปิดใช้ 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

รอสักครู่ขณะที่ระบบตั้งค่าคลัสเตอร์ให้คุณ ซึ่งจะปรากฏในส่วน Kubernetes Engine ของคอนโซล Google Cloud Platform

e46fd9c6ee82bcc4.png

สำหรับ Codelab นี้ เราจะดาวน์โหลดและติดตั้ง Istio จาก istio.io นอกจากนี้ยังมีตัวเลือกการติดตั้งอื่นๆ รวมถึงส่วนเสริม Istio สำหรับ GKE และ 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 ในคลัสเตอร์แล้ว

การแทรก Sidecar อัตโนมัติ

หากต้องการเริ่มใช้ Istio คุณไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ กับแอปพลิเคชัน เมื่อคุณกำหนดค่าและเรียกใช้บริการ ระบบจะแทรกไฟล์ช่วยเหลือ Envoy ลงในพ็อดแต่ละรายการของบริการโดยอัตโนมัติ

หากต้องการให้ทำงานได้ คุณต้องเปิดใช้การแทรก Sidecar สำหรับเนมสเปซ ("default") ที่ใช้สำหรับไมโครเซอร์วิส โดยทำได้ด้วยการใช้ป้ายกำกับดังนี้

kubectl label namespace default istio-injection=enabled

หากต้องการยืนยันว่าติดป้ายกำกับสำเร็จแล้ว ให้เรียกใช้คำสั่งต่อไปนี้

kubectl get namespace -L istio-injection

เอาต์พุตยืนยันว่าได้เปิดใช้การแทรก Sidecar สำหรับเนมสเปซเริ่มต้นแล้ว

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

7. ยืนยันการติดตั้ง

Istio มาพร้อมกับบริการ 3 อย่าง ได้แก่ 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 Control Plane จัดการการกำหนดค่าและการเขียนโปรแกรมของ Sidecar พร็อกซี, การค้นหาบริการ, การกระจายใบรับรอง และการแทรก Sidecar
  • ingress gateway: จัดการคำขอขาเข้าจากภายนอกคลัสเตอร์
  • egress gateway: จัดการคำขอขาออกไปยังปลายทางภายนอกคลัสเตอร์

8. ทำให้แอปพลิเคชันใช้งานได้

ตอนนี้คุณได้ยืนยันแล้วว่าติดตั้งและเรียกใช้ Istio แล้ว คุณก็สามารถติดตั้งใช้งานแอป ASP.NET Core ได้

การติดตั้งใช้งานและบริการ

ก่อนอื่น ให้สร้างไฟล์ aspnetcore.yaml โดยใช้โปรแกรมแก้ไขที่คุณชื่นชอบ (vim, nano,emacs หรือโปรแกรมแก้ไขโค้ดของ Cloud Shell) และกำหนดการติดตั้งใช้งานและบริการ 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

หากต้องการอนุญาตให้การรับส่งข้อมูลขาเข้าเข้าถึง Mesh คุณต้องสร้าง Gateway และ VirtualService

เกตเวย์จะกำหนดค่าตัวจัดสรรภาระงานสำหรับการรับส่งข้อมูล HTTP/TCP ซึ่งโดยทั่วไปจะทำงานที่ขอบของ Mesh เพื่อเปิดใช้การรับส่งข้อมูลขาเข้าสำหรับแอปพลิเคชัน VirtualService จะกำหนดกฎที่ควบคุมวิธีกำหนดเส้นทางคำขอสำหรับบริการภายใน Istio Service Mesh

สร้างไฟล์ 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:
    - "*"

สร้างไฟล์ aspnetcore-virtualservice.yaml เพื่อกำหนด VirtualService ดังนี้

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. ทดสอบแอปพลิเคชัน

ในที่สุดคุณก็จะได้เห็นแอปพลิเคชันทำงาน คุณต้องรับ IP และพอร์ตภายนอกของเกตเวย์ โดยจะแสดงในส่วนEXTERNAL-IP

kubectl get svc istio-ingressgateway -n istio-system

ส่งออก IP และพอร์ตภายนอกไปยัง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. ยินดีด้วย

คุณเพิ่งทำให้แอป ASP.NET Core แบบง่ายใช้งานได้กับ Kubernetes ที่ทำงานบน Google Kubernetes Engine (GKE) และกำหนดค่าให้ Istio จัดการ

คุณอาจสงสัยว่า "Istio มีประโยชน์อย่างไร" เป็นคำถามที่ดีมาก ในตอนนี้ การให้ Istio จัดการแอปนี้ยังไม่มีข้อดีใดๆ ในส่วนที่ 2 ของแล็บ เราจะสำรวจฟีเจอร์ต่างๆ ของ Istio เพิ่มเติม เช่น เมตริก การติดตาม การจัดการการรับส่งแบบไดนามิก การแสดงภาพบริการ และการแทรกข้อบกพร่อง

ขั้นตอนถัดไป

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป

11. ล้างข้อมูล

หากไม่ได้ทำแล็บส่วนที่ 2 ต่อ คุณสามารถลบแอปและถอนการติดตั้ง 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