ทำให้แอป 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 ของ Lab นี้ คุณจะได้สำรวจฟีเจอร์ต่างๆ ของ Istio เช่น เมตริก, การติดตาม, การจัดการการรับส่งข้อมูลแบบไดนามิก, Fault Injection และอื่นๆ

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

  • วิธีสร้างและรวมแพ็กเกจแอป 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 ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

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

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

เริ่มต้น Cloud Shell

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่ใน Codelab นี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานใน Google Cloud

เปิดใช้งาน Cloud Shell

  1. คลิกเปิดใช้งาน Cloud Shell 4292cbf4971c9786.png จาก Cloud Console

bce75f34b2c53987.png

หากคุณไม่เคยเริ่มต้นใช้งาน Cloud Shell มาก่อน คุณจะเห็นหน้าจอตรงกลาง (ครึ่งหน้าล่าง) ซึ่งอธิบายว่านี่คืออะไร หากเป็นเช่นนั้น ให้คลิกดำเนินการต่อ (คุณจะไม่เห็นการดำเนินการนี้อีก) หน้าจอแบบครั้งเดียวมีลักษณะดังนี้

70f315d7b402b476.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที

fbe3a0674c982259.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ 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

การดำเนินการนี้ควรสร้างโปรเจ็กต์และกู้คืนทรัพยากร Dependency ของโปรเจ็กต์ คุณควรเห็นข้อความที่คล้ายกับด้านล่าง

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

และใช้ประโยชน์จากฟีเจอร์แสดงตัวอย่างเว็บของ CloudShell อีกครั้งดังนี้

ภาพหน้าจอจาก 03-11-2015 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 ในคลัสเตอร์แล้ว

การแทรกไฟล์ช่วยเหลืออัตโนมัติ

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

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

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 มาพร้อมกับบริการ 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 มีประเภท 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 ใช้งานได้

การทำให้ใช้งานได้และบริการ

ก่อนอื่น ให้สร้างไฟล์ 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

เกตเวย์และ VirtualService

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

เกตเวย์จะกำหนดค่าตัวจัดสรรภาระงานสำหรับการรับส่งข้อมูล HTTP/TCP ซึ่งโดยทั่วไปจะทำงานที่ขอบของ Mesh เพื่อเปิดใช้การรับส่งข้อมูลขาเข้าสำหรับแอปพลิเคชัน 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:
    - "*"

สร้างไฟล์ 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 ของ Lab นี้ เราจะศึกษาเพิ่มเติมเกี่ยวกับฟีเจอร์ต่างๆ ของ Istio เช่น เมตริก, การติดตาม, การจัดการการรับส่งข้อมูลแบบไดนามิก, การแสดงภาพบริการ และ Fault Injection

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0

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

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