Pendahuluan
Cara praktis untuk mengelola layanan mikro aplikasi cloud-native adalah dengan mengotomatiskan fungsi jaringan aplikasi.
Istio adalah platform mesh layanan yang dapat dikonfigurasi yang bertindak sebagai bidang kontrol, mendistribusikan konfigurasi ke proxy dan gateway sespan. Ini adalah opsi populer untuk menghubungkan, memantau, dan mengamankan container di cluster Kubernetes.
Dalam tutorial ini, Anda akan mempelajari cara menginstal Istio, men-deploy aplikasi pengujian, dan menyiapkan cluster Kubernetes agar berfungsi dengan platform.
Prasyarat
- Kluster Kubernetes (atau minikube)
- alat baris perintah kubectl
Unduh Rilis Istio Terbaru
Untuk mengunduh rilis terbaru Istio, navigasikan ke halaman rilis Istio di GitHub.
Atau, pengguna Linux dapat menggunakan curl
untuk mengunduh dan mengekstrak rilis terbaru secara otomatis:
curl -L https://istio.io/downloadIstio | sh -
Perintah mengekstrak file instalasi ke folder bernama istio-[version]
:
Untuk mengunduh Istio versi lama, gunakan curl
, tetapi tentukan versi dan arsitektur prosesor dengan menggunakan sintaks berikut:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
Panduan Instalasi Istio
1. Mulai klaster Kubernetes Anda. Artikel ini menggunakan minikube:
minikube start
2. Selanjutnya, mulai instalasi Istio dengan pindah ke folder dengan file yang diekstrak:
cd istio-1.9.2
3. bin/
direktori berisi istioctl
biner klien. Di Linux, tambahkan klien ke jalur Anda dengan mengetik:
export PATH=$PWD/bin:$PATH
Variabel yang disetel dengan cara ini hanya bertahan sampai Anda mengakhiri sesi shell saat ini. Untuk menyetel variabel secara permanen, baca cara menyetel variabel lingkungan di Linux.
4. Gunakan istioctl
alat untuk memulai proses instalasi:
istioctl install --set profile=demo -y
Output mengkonfirmasi instalasi yang berhasil:
5. Istio dapat secara otomatis menyuntikkan proxy sespan Envoy saat penerapan aplikasi. Untuk mengaktifkannya, gunakan kubectl
untuk menambahkan label namespace yang berisi instruksi ini:
kubectl label namespace default istio-injection=enabled
Ini mengakhiri proses instalasi Istio.
Uji Penerapan melalui Aplikasi Bookinfo
Arsip instalasi Istio berisi semua file yang diperlukan untuk menerapkan contoh aplikasi yang disebut Bookinfo .
1. Mulailah dengan menerapkan bookinfo.yaml
file menggunakan kubectl
:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Sistem membuat beberapa penerapan, layanan, dan pod:
2. Periksa layanan yang berjalan:
kubectl get services
3. Periksa apakah pod sudah siap:
kubectl get pods
Saat pod naik, Istio menyebarkan sespan bersama mereka:
4. Tunggu hingga READY
label untuk setiap pod adalah 2/2
. Kemudian jalankan perintah berikut untuk melihat apakah aplikasi menyajikan halaman HTML dengan benar:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
Outputnya harus berupa tag judul halaman, bersama dengan judul itu sendiri:
5. Langkah selanjutnya adalah membuka aplikasi untuk lalu lintas luar. Terapkan bookinfo-gateway.yaml
file dari samples
map:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Output mengonfirmasi bahwa aplikasi berhasil dikaitkan dengan gateway Istio:
6. Gunakan istioctl
untuk menganalisis konfigurasi dan memeriksa kemungkinan masalah:
istioctl analyze
Jika sistem tidak menemukan masalah, pesan berikut akan ditampilkan:
7. Untuk mengakses pengaturan gateway pada langkah sebelumnya, atur variabel ingress. Pertama, ekspor INGRESS_PORT
:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
8. Sekarang, ulangi proses untuk SECURE_INGRESS_PORT
:
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
9. Gunakan perintah echo untuk memeriksa apakah port telah berhasil ditetapkan:
echo "$INGRESS_PORT" && echo "$SECURE_INGRESS_PORT"
Output menunjukkan nomor port:
10. Ekspor INGRESS_HOST
variabel:
export INGRESS_HOST=$(minikube ip)
11. Periksa variabel dengan echo
:
echo "$INGRESS_HOST"
12. Untuk mengarahkan lalu lintas ke Istio Ingress Gateway, buka jendela terminal baru dan ketik perintah berikut:
minikube tunnel
Minikube sekarang berfungsi sebagai penyeimbang beban untuk Istio. Outputnya menunjukkan minikube mengarahkan lalu lintas:
13. Kembali ke jendela terminal sebelumnya dan ekspor GATEWAY_URL
variabel, yang terdiri dari INGRESS_HOST
dan INGRESS_PORT
variabel:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
14. Gunakan echo
untuk melihat seluruh alamat IP dan nomor port:
echo "$GATEWAY_URL"
15. Ketik perintah berikut untuk melihat alamat eksternal aplikasi:
echo http://$GATEWAY_URL/productpage
16. Salin alamat yang diperoleh pada langkah sebelumnya dan tempel ke browser web. Situs web Bookinfo berhasil dimuat:
Siapkan Cluster Kubernetes untuk Istio
Istio hadir dengan sejumlah add-on untuk layanan Istio populer, seperti dasbor Grafana, perangkat lunak pelacakan transaksi Jaeger, pengikis metrik Prometheus, dan konsol manajemen Kiali.
1. Instal add-on tersebut dengan menerapkan samples/addons
map:
kubectl apply -f samples/addons
2. Sekarang, buat sumber daya Kubernetes Ingress untuk setiap add-on. Lakukan ini dengan menempelkan kode berikut ke yaml
berkas.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: istio-system
namespace: istio-system
annotations:
kubernetes.io/ingress.class: istio
spec:
rules:
- host: my-istio-dashboard.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: grafana
servicePort: 3000
- host: my-istio-tracing.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: tracing
servicePort: 9411
- host: my-istio-logs-database.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: prometheus
servicePort: 9090
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
servicePort: 20001
3. Simpan file dan terapkan konfigurasi dengan kubectl:
kubectl apply -f [file-name]
Add-on sekarang dikonfigurasi dan siap digunakan.