Instalasi Istio pada Kluster Kubernetes
By twahyono
Apa itu Istio?
Menurut dokumentasi, Istio adalah aplikasi yang membantu anda untuk menghubungkan, mengamankan, mengontrol dan memantau services (microservices). Istio mengatasi permasalahan kerumitan transisi dari aplikasi monolitik ke aplikasi terdistribusi dengan arsitektur microservices.
Ketika aplikasi berkembang kerumitan microservices semakin bertambah dan menyulitkan untuk mengelola dan memahami keterkaitan antara services satu dengan services lainnya. Dari sinilah istilah services mesh muncul. Istilah ini menggambarkan jaringan microservices yang membentuk suatu aplikasi dan interaksi antara services tsb.
Dengan Istio dapat dilakukan hal-hal berikut:
- Load balancing otomatis untuk HTTP, TCP, WebSocket dan gRPC.
- Traffic management dengan routing rules, retries, failovers, circuit breaker, fault injection.
- Metriks dan monitoring.
- Mengatur keamanan komunikasi antar services.
- Deployment dengan berbagai macam cara: rollout, A/B, canary dsb.
Instalasi Istio dengan Helm
Kali ini kita akan melakukan installasi Istio dengan helm charts. Jika anda belum memasang Helm pada kluster Kubernetes anda, silakan melihat artikel ini. Diasumsikan anda sudah memiliki kluster Kubernetes yang berjalan baik di lokal ataupun di Azure Kubernetes Services (AKS) ataupun Google Kubernetes Engine (GKE).
Tambahkan repo Istio terlebih dahulu:
$ helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.1.7/charts/
Periksa hasil dari penambahan repo Istio tsb:
helm repo list
Output:
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
local http://127.0.0.1:8879/charts
istio.io https://storage.googleapis.com/istio-release/releases/1.1.7/charts/
Kemudian lakukan instalasi Custom Resource Definition Istio (CRD) dengan chart istio-init:
$ helm install --name istio-init --namespace istio-system istio.io/istio-init
Anda akan mendapatkan output seperti berikut:
NAME: istio-init
LAST DEPLOYED: Sun Jul 14 23:22:36 2019
NAMESPACE: istio-system
STATUS: DEPLOYED
Sekarang lakukan instalasi Istio dengan helm chart. Sebaiknya turut diinstall juga grafana, aplikasi untuk menampilkan dashboard serta monitoring metriks serta kiali, aplikasi untuk melihat visualisasi keterkaitan antar microservices. Aktifkan pilihan konfigurasi dengan --set grafana.enabled=true
atau --set kiali.enabled=true
.
$ helm install --name istio --namespace istio-system --set grafana.enabled=true istio.io/istio
Periksa pods yang muncul dari hasil instalasi Istio:
kubectl get pods -n istio-system
Jika berhasil maka terlihat seperti berikut:
NAME READY STATUS RESTARTS AGE
grafana-85689d5548-6zbtc 1/1 Running 0 15h
grafana-85689d5548-ctzvg 1/1 Running 0 15h
istio-citadel-5fdf5ccf85-mkt2l 1/1 Running 0 15h
istio-egressgateway-6f887d4d46-vkvjh 1/1 Running 0 15h
istio-galley-88c6c64b7-49hmz 1/1 Running 0 15h
istio-ingressgateway-7646456c5c-hdvrl 1/1 Running 0 1d
istio-init-crd-10-sh7dn 0/1 Completed 0 6m
istio-init-crd-11-64nlt 0/1 Completed 0 6m
istio-pilot-65bd87cb4c-8s4zp 2/2 Running 0 1d
istio-policy-55cdb54666-hvshp 2/2 Running 0 15h
istio-sidecar-injector-596f6bf5d5-qbl6k 1/1 Running 0 1d
istio-telemetry-7dbb44954f-k2vgc 2/2 Running 0 15h
istio-tracing-d444f578-mc4b4 1/1 Running 1 1d
kiali-5bdc5b4d69-89lqn 1/1 Running 0 15h
kiali-5bdc5b4d69-cc624 1/1 Running 0 1d
prometheus-6c56b9bf49-46z97 1/1 Running 0 15h
Istio menggunakan mekanisme sidecar untuk memasang Envoy proxy pada tiap pod yang dijalankan di Kubernetes. Untuk melakukan otomatisasi hal ini perlu ditambahkan label istio-injection=true untuk namespace yang dituju:
kubectl label namespace default istio-injection=enabled
Kemudian periksa hasil dari pelabelan tsb
kubectl get namespaces -L istio-injection
Output:
NAME STATUS AGE ISTIO-INJECTION
default Active 31d enabled
istio-system Active 31d
kube-public Active 31d
kube-system Active 31d
Instalasi Istio sudah berhasil. Di artikel selanjutnya kita akan membahas bagaimana melakukan konfigurasi Istio untuk berbagai keperluan.