1. Ringkasan
ASP.NET Core adalah framework lintas platform dan open source untuk membangun aplikasi berbasis cloud dan terhubung ke internet modern menggunakan bahasa pemrograman C#.
Kubernetes adalah sistem open source untuk mengotomatiskan deployment, penskalaan, dan pengelolaan aplikasi dalam container. Istio adalah framework terbuka untuk menghubungkan, mengamankan, mengelola, dan memantau layanan.
Di bagian pertama lab ini, Anda akan men-deploy aplikasi ASP.NET Core sederhana ke Kubernetes yang berjalan di Google Kubernetes Engine (GKE) dan mengonfigurasinya agar dikelola oleh Istio.
Di bagian kedua lab, Anda akan mempelajari lebih lanjut fitur Istio seperti metrik, pelacakan, pengelolaan traffic dinamis, injeksi kesalahan, dan lainnya.
Yang akan Anda pelajari
- Cara membuat dan mengemas aplikasi ASP.NET Core sederhana dalam container Docker.
- Cara membuat cluster Kubernetes dengan Google Kubernetes Engine (GKE).
- Cara menginstal Istio di cluster Kubernetes di GKE.
- Cara men-deploy aplikasi ASP.NET Core dan mengonfigurasi trafficnya agar dikelola oleh Istio.
Yang Anda butuhkan
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Google Cloud Platform?
2. Penyiapan dan persyaratan
Penyiapan lingkungan mandiri
- Login ke Cloud Console lalu buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.



Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai$300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Google Cloud.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell
.

Jika belum pernah memulai Cloud Shell, Anda akan melihat layar perantara (di paruh bawah) yang menjelaskan apa itu Cloud Shell. Jika demikian, klik Continue (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

Virtual machine ini dimuat dengan semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan hanya dengan browser atau Chromebook.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Membuat aplikasi ASP.NET Core di Cloud Shell
Di prompt Cloud Shell, Anda dapat memverifikasi bahwa alat command line dotnet sudah terinstal dengan memeriksa versinya. Perintah ini akan mencetak versi alat command line dotnet yang diinstal:
dotnet --version
Selanjutnya, buat aplikasi web ASP.NET Core skeleton baru.
dotnet new mvc -o HelloWorldAspNetCore
Perintah ini akan membuat project dan memulihkan dependensinya. Anda seharusnya melihat pesan yang mirip seperti di bawah ini.
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. Jalankan aplikasi ASP.NET Core
Aplikasi hampir siap untuk dijalankan. Buka folder aplikasi.
cd HelloWorldAspNetCore
Terakhir, jalankan aplikasi.
dotnet run --urls=http://localhost:8080
Aplikasi mulai memproses di port 8080.
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
Untuk memastikan aplikasi sudah berjalan, klik tombol pratinjau web di kanan atas, lalu pilih ‘Pratinjau di port 8080'.

Anda akan melihat halaman web ASP.NET Core default:

Setelah Anda memverifikasi bahwa aplikasi sedang berjalan, tekan Ctrl+C untuk mematikan aplikasi.
5. Mengemas aplikasi ASP.NET Core dalam container Docker
Selanjutnya, siapkan aplikasi Anda untuk dijalankan sebagai container. Langkah pertama adalah menentukan penampung dan isinya.
Di direktori dasar aplikasi, buat Dockerfile untuk menentukan image Docker.
touch Dockerfile
Tambahkan kode berikut ke Dockerfile menggunakan editor favorit Anda (vim, nano,emacs atau editor kode 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"]
Salah satu konfigurasi penting yang disertakan dalam Dockerfile Anda adalah port tempat aplikasi memproses traffic masuk (8080). Hal ini dilakukan dengan menyetel variabel lingkungan ASPNETCORE_URLS, yang digunakan aplikasi ASP.NET Core untuk menentukan port yang akan dipantau.
Simpan Dockerfile ini. Sekarang, mari kita buat gambar:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 .
Setelah selesai (perlu waktu beberapa saat untuk mendownload dan mengekstrak semuanya), Anda dapat melihat bahwa image telah dibuat dan disimpan secara lokal:
docker images REPOSITORY TAG gcr.io/yourproject-XXXX/hello-dotnet v1
Uji image secara lokal dengan perintah berikut yang akan menjalankan container Docker secara lokal di port 8080 dari image container yang baru dibuat:
docker run -p 8080:8080 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
Manfaatkan lagi fitur Pratinjau web Cloud Shell :

Anda akan melihat halaman web ASP.NET Core default di tab baru.

Setelah memverifikasi bahwa aplikasi berjalan dengan baik secara lokal dalam container Docker, Anda dapat menghentikan container yang sedang berjalan dengan Ctrl-> C.
Setelah image berfungsi seperti yang diharapkan, Anda dapat mengirimkannya ke Google Container Registry, repositori pribadi untuk image Docker Anda yang dapat diakses dari setiap project Google Cloud (tetapi juga dari luar Google Cloud Platform) :
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
Jika semuanya berjalan lancar dan setelah beberapa saat, Anda akan dapat melihat image container yang tercantum di bagian Container Registry. Pada tahap ini, Anda kini memiliki image Docker yang tersedia di seluruh project yang dapat diakses dan diatur oleh Kubernetes seperti yang akan Anda lihat dalam beberapa menit.

Jika penasaran, Anda dapat menjelajahi image penampung saat disimpan di Google Cloud Storage dengan mengikuti link ini: https://console.cloud.google.com/storage/browser/ (link lengkap yang dihasilkan harus dalam bentuk ini: https://console.cloud.google.com/project/PROJECT_ID/storage/browser/).
6. Membuat cluster Kubernetes/GKE dengan Istio
Pertama, pastikan Anda telah mengaktifkan Kubernetes Engine API:
gcloud services enable container.googleapis.com
Membuat cluster Kubernetes. Anda dapat mengubah region ke lokasi yang dekat dengan Anda, jika mau:
gcloud container clusters create hello-istio \ --cluster-version=latest \ --machine-type=n1-standard-2 \ --num-nodes=4 \ --region europe-west1
Tunggu beberapa saat selagi cluster Anda disiapkan untuk Anda. Cluster akan terlihat di bagian Kubernetes Engine pada konsol Google Cloud Platform.

Untuk codelab ini, kita akan mendownload dan menginstal Istio dari istio.io. Ada opsi penginstalan lain, termasuk add-on Istio untuk GKE dan Anthos Service Mesh. Langkah-langkah penerapan setelah langkah ini akan berfungsi di semua penginstalan Istio.
Pertama, download klien dan contoh Istio. Halaman rilis Istio menawarkan artefak download untuk beberapa OS. Dalam kasus ini, kita dapat menggunakan perintah yang mudah untuk mendownload dan mengekstrak rilis terbaru untuk platform saat ini:
curl -L https://istio.io/downloadIstio | sh -
Skrip akan memberi tahu Anda versi Istio yang telah didownload:
Istio has been successfully downloaded into the istio-1.8.1 folder on your system.
Direktori penginstalan berisi aplikasi contoh dan biner klien istioctl. Ubah ke direktori tersebut:
cd istio-1.8.1
Salin dan tempel perintah yang diberikan untuk menambahkan direktori bin ke PATH, sehingga Anda dapat menggunakan istioctl:
export PATH="$PATH:/home/<YOURHOMEID>/istio-1.8.1/bin"
Pastikan istioctl tersedia dengan memeriksa apakah cluster Anda siap untuk Istio:
istioctl x precheck
Anda akan melihat pesan yang menyatakan Install Pre-Check passed! The cluster is ready for Istio installation.
Instal Istio dengan profil demo:
istioctl install --set profile=demo
Istio kini diinstal di cluster Anda.
Penyisipan sidecar otomatis
Untuk mulai menggunakan Istio, Anda tidak perlu melakukan perubahan apa pun pada aplikasi. Saat Anda mengonfigurasi dan menjalankan layanan, sidecar Envoy akan otomatis disuntikkan ke setiap pod untuk layanan tersebut.
Agar dapat berfungsi, Anda perlu mengaktifkan penyisipan sidecar untuk namespace (‘default') yang Anda gunakan untuk microservice. Anda melakukannya dengan menerapkan label:
kubectl label namespace default istio-injection=enabled
Untuk memverifikasi bahwa label berhasil diterapkan, jalankan perintah berikut:
kubectl get namespace -L istio-injection
Output mengonfirmasi bahwa injeksi sidecar diaktifkan untuk namespace default:
NAME STATUS AGE ISTIO-INJECTION default Active 3m enabled istio-system Active 63s disabled ...
7. Memverifikasi penginstalan
Istio dilengkapi dengan tiga layanan: bidang kontrol istiod, serta gateway ingress dan egress (yang dapat Anda anggap sebagai "proxy sidecar untuk internet lainnya") , yang masing-masing bernama istio-ingressgateway dan istio-egressgateway.
kubectl get svc -n istio-system
Output Anda akan terlihat seperti ini:
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 memiliki jenis LoadBalancer sehingga dapat diakses dari Internet; yang lain hanya perlu dapat diakses dari dalam cluster.
Selanjutnya, pastikan pod Kubernetes yang sesuai di-deploy dan semua container sudah aktif dan berjalan:
kubectl get pods -n istio-system
Setelah semua pod berjalan, Anda dapat melanjutkan.
NAME READY STATUS istio-egressgateway-674988f895-m6tk4 1/1 Running istio-ingressgateway-6996f7dcc8-7lvm2 1/1 Running istiod-6bf5fc8b64-j79hj 1/1 Running
istiod: bidang kontrol Istio. Menangani konfigurasi dan pemrograman sidecar proxy, penemuan layanan, distribusi sertifikat, dan injeksi sidecaringress gateway: Menangani permintaan masuk dari luar cluster Anda.egress gateway: Menangani permintaan keluar ke endpoint di luar cluster Anda.
8. Men-deploy aplikasi
Setelah memverifikasi bahwa Istio telah diinstal dan berjalan, Anda dapat men-deploy aplikasi ASP.NET Core.
Deployment dan Layanan
Pertama, buat file aspnetcore.yaml menggunakan editor favorit Anda (vim, nano,emacs atau editor kode Cloud Shell) dan tentukan Deployment dan Layanan Kubernetes untuk aplikasi:
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
Isi file adalah Deployment dan Layanan standar untuk men-deploy aplikasi dan tidak berisi apa pun yang khusus untuk Istio.
Deploy layanan ke namespace default dengan kubectl:
kubectl apply -f aspnetcore.yaml
service "aspnetcore-service" created deployment.extensions "aspnetcore-v1" created
Verifikasi bahwa pod sedang berjalan:
kubectl get pods
NAME READY STATUS RESTARTS AGE aspnetcore-v1-6cf64748-mddb 2/2 Running 0 34s
Gateway dan VirtualService
Untuk mengizinkan traffic masuk menjangkau mesh, Anda perlu membuat Gateway dan VirtualService.
Gateway mengonfigurasi load balancer untuk traffic HTTP/TCP, yang paling umum beroperasi di tepi mesh untuk mengaktifkan traffic ingress untuk aplikasi. VirtualService menentukan aturan yang mengontrol cara permintaan untuk layanan dirutekan dalam mesh layanan Istio.
Buat file aspnetcore-gateway.yaml untuk menentukan Gateway:
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:
- "*"
Buat file aspnetcore-virtualservice.yaml untuk menentukan VirtualService:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: aspnetcore-virtualservice
spec:
hosts:
- "*"
gateways:
- aspnetcore-gateway
http:
- route:
- destination:
host: aspnetcore-service
Jalankan perintah kubectl untuk men-deploy Gateway dengan:
kubectl apply -f aspnetcore-gateway.yaml
Perintah akan menghasilkan output berikut:
gateway.networking.istio.io "aspnetcore-gateway" created
Selanjutnya, jalankan perintah berikut untuk men-deploy VirtualService:
kubectl apply -f aspnetcore-virtualservice.yaml
Perintah akan menghasilkan output berikut:
virtualservice.networking.istio.io "aspnetcore-virtualservice" created
Pastikan semuanya berjalan:
kubectl get gateway
NAME AGE aspnetcore-gateway 28s
kubectl get virtualservice
NAME AGE aspnetcore-virtualservice 33s
Selamat! Anda baru saja men-deploy aplikasi yang mendukung Istio. Selanjutnya, Anda akan melihat aplikasi yang sedang digunakan.
9. Menguji aplikasi
Anda akhirnya dapat melihat aplikasi beraksi. Anda perlu mendapatkan IP dan port eksternal gateway. Fitur ini tercantum di bagian EXTERNAL-IP:
kubectl get svc istio-ingressgateway -n istio-system
Ekspor IP dan port eksternal ke variabel 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
Gunakan curl untuk menguji aplikasi. Layanan harus merespons dengan kode respons 200:
curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/
Atau, Anda dapat membuka browser, membuka http://<gatewayurl> untuk melihat aplikasi:

10. Selamat!
Anda baru saja men-deploy aplikasi ASP.NET Core sederhana ke Kubernetes yang berjalan di Google Kubernetes Engine (GKE) dan mengonfigurasinya agar dikelola oleh Istio.
Anda mungkin bertanya-tanya "Apa manfaat Istio?". Pertanyaan yang bagus. Sejauh ini, tidak ada keuntungan menggunakan Istio untuk mengelola aplikasi ini. Di bagian kedua lab, kita akan mempelajari lebih lanjut fitur Istio, seperti metrik, pelacakan, pengelolaan traffic dinamis, visualisasi layanan, dan injeksi kesalahan.
Langkah Berikutnya
- Men-deploy aplikasi ASP.NET Core ke GKE dengan Istio (Bagian 2).
- Pelajari Istio lebih lanjut.
- Pelajari Kubernetes lebih lanjut.
- Pelajari lebih lanjut Google Kubernetes Engine.
- Pelajari lebih lanjut .NET di Google Cloud Platform.
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.
11. Pembersihan
Jika Anda tidak melanjutkan ke bagian kedua lab, Anda dapat menghapus aplikasi dan meng-uninstal Istio atau cukup menghapus cluster Kubernetes.
Menghapus aplikasi
Untuk menghapus aplikasi:
kubectl delete -f aspnetcore-gateway.yaml Kubectl delete -f aspnetcore-virtualservice.yaml kubectl delete -f aspnetcore.yaml
Untuk mengonfirmasi bahwa aplikasi sudah tidak ada:
kubectl get gateway kubectl get virtualservices kubectl get pods
Uninstal Istio
Untuk menghapus Istio:
kubectl delete -f install/kubernetes/istio-demo-auth.yaml
Untuk mengonfirmasi bahwa Istio sudah tidak ada:
kubectl get pods -n istio-system
Menghapus cluster Kubernetes
gcloud container clusters delete hello-istio