Istio adalah service mesh open source yang menyediakan kemampuan manajemen traffic, observabilitas, keamanan, dan kebijakan. Integrasi Istio dengan Kubernetes membantu Anda mengelola dan mengontrol aplikasi kontainer secara lebih efektif serta meningkatkan kinerja, keamanan, dan keandalan aplikasi. Topik ini menjelaskan cara menggunakan Istio untuk menerapkan aplikasi Bookinfo dalam kluster Kubernetes yang dikelola sendiri yang terhubung ke Elastic Container Instance melalui VNode.
Informasi latar belakang
Istio adalah platform service mesh open source yang digunakan untuk mengelola traffic antar layanan mikro serta menangani komunikasi jaringan dan risiko keamanan. Dengan integrasi ke Kubernetes, Istio menyediakan manajemen traffic yang standar dan aman serta menyederhanakan penerapan dan operasi & pemeliharaan (O&M) aplikasi.
Bookinfo meniru entri katalog tunggal dari toko buku daring untuk menampilkan informasi tentang sebuah buku, termasuk deskripsi, detail seperti ISBN dan jumlah halaman, serta ulasan. Aplikasi ini bersifat heterogen dan terdiri dari empat layanan mikro yang ditulis dalam bahasa pemrograman berbeda untuk mendemonstrasikan berbagai fitur Istio. Arsitektur end-to-end Bookinfo:

Productpage: layanan mikro Python yang memanggil layanan mikro Details dan Reviews untuk menghasilkan halaman. Layanan ini juga menyediakan fitur logon dan logoff.
Details: layanan mikro Ruby yang berisi informasi buku.
Reviews: layanan mikro Java yang berisi ulasan buku. Layanan ini memiliki tiga versi:
Versi 1 tidak memanggil layanan mikro Ratings.
Versi 2 memanggil layanan mikro Ratings dan menampilkan peringkat buku menggunakan satu hingga lima bintang hitam.
Versi 3 memanggil layanan mikro Ratings dan menampilkan peringkat buku menggunakan satu hingga lima bintang merah.
Ratings: layanan mikro Node.js yang menyediakan peringkat berdasarkan ulasan buku.
Untuk informasi selengkapnya, kunjungi Istio.
Prasyarat
Petunjuk dalam topik ini berlaku untuk kluster Kubernetes yang dikelola sendiri. Pastikan kluster Anda memenuhi kondisi berikut:
VNode telah diterapkan di kluster Kubernetes yang dikelola sendiri.
Jika kluster Kubernetes yang dikelola sendiri ditempatkan di pusat data, pusat data tersebut harus terhubung ke Alibaba Cloud.
Jika kluster Kubernetes yang dikelola sendiri ditempatkan pada instans Elastic Compute Service (ECS) dan menggunakan plug-in jaringan Flannel, pastikan Kubernetes cloud control manager (CCM) telah diterapkan di kluster tersebut. Hal ini memastikan Elastic Container Instance dapat berkomunikasi dengan Pod di node nyata. Untuk informasi selengkapnya, lihat Deploy the CCM.
Persiapan
Instal Istio. Untuk informasi selengkapnya, lihat Getting Started.
Buat namespace dan konfigurasikan label untuk namespace tersebut.
kubectl create namespace istio-test kubectl label namespace istio-test istio-injection=enabled
Prosedur
Terapkan aplikasi Bookinfo
-
Buat file bernama bookinfo.yaml dan salin templat berikut ke dalam file tersebut:
CatatanPada contoh kode YAML berikut, nodeSelector ditambahkan untuk menjadwalkan Pod ke VNode. Anda juga dapat mengonfigurasi eci-profile untuk menjadwalkan Pod ke VNode. Untuk informasi selengkapnya, lihat Schedule pods to a VNode dan Use eci-profile to schedule pods to a VNode.
-
Terapkan aplikasi Bookinfo.
kubectl -n istio-test apply -f bookinfo.yamlOutput perintah berikut dikembalikan:
xxx# kubectl -n istio-test apply -f bookinfo.yaml service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created -
Lihat status Bookinfo.
kubectl -n istio-test get pods -o wideOutput perintah berikut dikembalikan:
[xxx@xxx ~]# kubectl -n istio-test get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES details-v1-5f957dd5ff-kdvpc 2/2 Running 0 14m 192.168.xxx cn-qingdao.vnd-m5echu4xxx <none> <none> productpage-v1-85976f8df7-ht5dg 2/2 Running 0 72s 192.168.xxx cn-qingdao.vnd-m5echu4xxx <none> <none> ratings-v1-69fb6864cf-9l7fp 2/2 Running 0 23m 192.168.xxx cn-qingdao.vnd-m5echu4xxx <none> <none> reviews-v1-77f77b5-sssgw 2/2 Running 0 7m13s 192.168.xxx cn-qingdao.vnd-m5echu4xxx <none> <none> reviews-v2-5b9b5676c-bcjx9 2/2 Running 0 23m 192.168.xxx cn-qingdao.vnd-m5echu4xxx <none> <none> reviews-v3-6ff46dbb9c-kf2gl 2/2 Running 0 13m 192.168.xxx cn-qingdao.vnd-m5echu4xxx <none> <none> -
Periksa layanan mikro Bookinfo.
kubectl -n istio-test get servicesOutput perintah berikut dikembalikan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.96.1.xxx <none> 9080/TCP 25m productpage ClusterIP 10.96.2.xxx <none> 9080/TCP 25m ratings ClusterIP 10.96.1.xxx <none> 9080/TCP 25m reviews ClusterIP 10.96.1.xxx <none> 9080/TCP 25m
Terapkan gateway Istio
Buat file bernama bookinfo-gateway.yaml dan salin templat berikut ke dalam file tersebut:
-
Terapkan gateway Istio.
kubectl -n istio-test apply -f bookinfo-gateway.yamlOutput yang diharapkan:
[root@xxx ~]# kubectl -n istio-test apply -f bookinfo-gateway.yaml gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created -
Lihat gateway Istio.
kubectl -n istio-test get gatewayOutput perintah berikut dikembalikan:
NAME AGE bookinfo-gateway 88s
Verifikasi layanan mikro Bookinfo
-
Dapatkan alamat host gateway Istio.
Pilih Layanan Ingress Istio berdasarkan jenis kluster. Dalam topik ini, gunakan LoadBalancer sebagai Layanan Ingress Istio.
kubectl -n istio-system get service istio-ingressgatewayOutput perintah berikut dikembalikan:
[xxx@xxx ~]# kubectl -n istio-system get service istio-ingressgateway NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.96.xxx <pending> 15021:31682/TCP,80:32247/TCP,443:31049/TCP,31400:30519/TCP,15443:31511/TCP 43mParameter istio-ingressgateway pada pesan yang dikembalikan menunjukkan alamat host (dalam format
IP:Port) dari Istio Ingress Gateway. Dalam contoh ini, alamat host-nya adalah10.96.XX.XX:80. Buat Pod pengujian untuk memverifikasi layanan mikro Bookinfo.
Buat file bernama test-pod.yaml dan salin templat berikut ke dalam file tersebut:
Terapkan Pod tersebut.
kubectl apply -f test-pod.yaml
-
Login ke Pod pengujian dan jalankan perintah berikut untuk memverifikasi layanan mikro Bookinfo.
kubectl exec -it centos -- bashcurl -s http://10.96.XX.XX:80/productpage | grep -o "<title>.*</title>"Ganti
10.96.xxx:80dengan alamat internal gerbang masuk Anda. Jika perintah mengembalikan<title>Simple BookStore App</title>, berarti aplikasi Bookinfo dapat diakses melalui gerbang masuk Istio.