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 จัดการ
สิ่งที่ต้องมี
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Google Cloud Platform อย่างไร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID
ในภายหลัง
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่ใน Codelab นี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานใน Google Cloud
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากคุณไม่เคยเริ่มต้นใช้งาน Cloud Shell มาก่อน คุณจะเห็นหน้าจอตรงกลาง (ครึ่งหน้าล่าง) ซึ่งอธิบายว่านี่คืออะไร หากเป็นเช่นนั้น ให้คลิกดำเนินการต่อ (คุณจะไม่เห็นการดำเนินการนี้อีก) หน้าจอแบบครั้งเดียวมีลักษณะดังนี้
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ Chromebook เท่านั้น
เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าได้รับการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน 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`
- เรียกใช้คำสั่งต่อไปนี้ใน 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"
คุณจะเห็นหน้าเว็บ ASP.NET Core เริ่มต้น:
เมื่อคุณยืนยันว่าแอปพลิเคชันทำงานอยู่ ให้กด 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 อีกครั้งดังนี้
คุณควรเห็นหน้าเว็บ ASP.NET Core เริ่มต้นในแท็บใหม่
เมื่อยืนยันว่าแอปทำงานภายในคอนเทนเนอร์ 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 จะเข้าถึงและจัดการเป็นกลุ่มได้ซึ่งคุณจะเห็นภายในไม่กี่นาที
หากมีข้อสงสัย คุณสามารถดูรูปภาพคอนเทนเนอร์ขณะจัดเก็บอยู่ใน 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
สำหรับ 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>
เพื่อดูแอปก็ได้
10. ยินดีด้วย
คุณเพิ่งทำให้แอป ASP.NET Core พื้นฐานใช้งานได้ใน Kubernetes ที่ทำงานบน Google Kubernetes Engine (GKE) และกำหนดค่าให้มีการจัดการโดย Istio
คุณอาจสงสัยว่า "ประโยชน์ของ Istio มีอะไรบ้าง" เป็นคำถามที่ดีมาก ตอนนี้ยังไม่มีอะไรให้ Istio เป็นผู้จัดการแอปนี้ ในส่วนที่ 2 ของ Lab นี้ เราจะศึกษาเพิ่มเติมเกี่ยวกับฟีเจอร์ต่างๆ ของ Istio เช่น เมตริก, การติดตาม, การจัดการการรับส่งข้อมูลแบบไดนามิก, การแสดงภาพบริการ และ Fault Injection
ขั้นตอนถัดไป
- ทำให้แอป ASP.NET Core ใช้งานได้ใน GKE ด้วย Istio (ส่วนที่ 2)
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Istio
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Kubernetes
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Google Kubernetes Engine
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ .NET บน Google Cloud Platform
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 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