Tutorial ini ditujukan untuk pengguna dan administrator Kubernetes yang tertarik menggunakan mesh layanan Istio untuk men-deploy Layanan Kubernetes secara aman dan mengaktifkan komunikasi TLS timbal balik (mTLS).
Istio dan Cloud Service Mesh
Istio bukan produk Google yang didukung. Sebaiknya jalankan Managed Cloud Service Mesh. Untuk mengetahui informasi selengkapnya, lihat Menyediakan Cloud Service Mesh di cluster GKE Autopilot.
Cloud Service Mesh memberikan manfaat berikut:
- Anda dapat menyediakan Cloud Service Mesh terkelola menggunakan
Fleet API tanpa alat
sisi klien seperti
istioctl
. - Cloud Service Mesh secara otomatis menyuntikkan proxy sidecar ke dalam beban kerja tanpa memberikan hak istimewa yang ditingkatkan ke container Anda.
- Anda dapat melihat dasbor lengkap untuk mesh dan layanan tanpa konfigurasi tambahan, lalu menggunakan metrik ini untuk mengonfigurasi tujuan tingkat layanan (SLO) dan pemberitahuan untuk memantau kondisi aplikasi Anda.
- Bidang kontrol Cloud Service Mesh terkelola diupgrade secara otomatis untuk memastikan Anda mendapatkan patch dan fitur keamanan terbaru.
- Bidang data terkelola Cloud Service Mesh secara otomatis mengupgrade proxy sidecar di workload Anda sehingga Anda tidak perlu memulai ulang layanan sendiri saat upgrade proxy dan patch keamanan tersedia.
- Cloud Service Mesh adalah produk yang didukung dan dapat dikonfigurasi menggunakan API Istio open source standar. Untuk mengetahui informasi selengkapnya, lihat fitur yang didukung.
Menyiapkan lingkungan
Untuk menyiapkan lingkungan Anda, ikuti langkah-langkah berikut:
Menetapkan variabel lingkungan:
export PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID gcloud config set compute/region us-central1
Ganti
PROJECT_ID
dengan Google Cloud project ID Anda.Buat clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Ubah ke direktori kerja:
cd kubernetes-engine-samples/service-mesh/istio-tutorial
Membuat cluster GKE
Aktifkan kemampuan Linux yang diperlukan Istio: NET_RAW
dan NET_ADMIN
.
GKE Autopilot tidak mengizinkan NET_ADMIN
secara default, tetapi
Anda dapat mengaktifkan NET_ADMIN
menggunakan perintah --workload-policies=allow-net-admin
di GKE versi 1.27 dan yang lebih baru:
gcloud container clusters create-auto istio-cluster \
--location="us-central1" \
--workload-policies="allow-net-admin"
Untuk mempelajari keamanan GKE Autopilot lebih lanjut, lihat Konfigurasi keamanan bawaan.
Instal Istio
Anda dapat menginstal Istio di cluster GKE menggunakan Istioctl.
Dalam tutorial ini, Anda akan menginstal Istio dengan profil konfigurasi default yang direkomendasikan untuk deployment produksi.
Instal Istio:
Untuk menginstal Istio versi terbaru:
curl -L https://istio.io/downloadIstio | sh -
Untuk menginstal Istio versi tertentu:
export ISTIO_VERSION=VERSION_NUMBER curl -L https://istio.io/downloadIstio | TARGET_ARCH=$(uname -m) sh -
Ganti VERSION_NUMBER dengan versi Istio yang ingin Anda instal. Untuk mengetahui informasi tentang rilis Istio, lihat Pengumuman rilis.
Tambahkan alat command line
istioctl
ke PATH:cd istio-* export PATH=$PWD/bin:$PATH
Instal Istio di cluster:
istioctl install --set profile="default" -y
Langkah ini mungkin memerlukan waktu beberapa menit.
Tunggu hingga Pod Istio siap:
watch kubectl get pods -n istio-system
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-5c47bff876-wjm96 1/1 Running 0 2m54s istiod-5fc7cb65cd-k8cp4 1/1 Running 0 2m57s
Jika Pod Istio berstatus
Running
, kembali ke command line dengan menekanCtrl+C
.
Men-deploy aplikasi contoh
Di bagian ini, Anda akan menggunakan aplikasi contoh Bank of Anthos untuk membuat service mesh dengan autentikasi mTLS.
Tambahkan label namespace yang menginstruksikan Istio untuk mengaktifkan injeksi otomatis proxy sidecar Envoy:
kubectl label namespace default istio-injection=enabled
Deploy aplikasi contoh:
cd .. git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git kubectl apply -f bank-of-anthos/extras/jwt/jwt-secret.yaml kubectl apply -f bank-of-anthos/kubernetes-manifests/
Tunggu hingga aplikasi siap:
watch kubectl get pods
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE accounts-db-0 2/2 Running 0 2m16s balancereader-5c695f78f5-x4wlz 2/2 Running 0 3m8s contacts-557fc79c5-5d7fg 2/2 Running 0 3m7s frontend-7dd589c5d7-b4cgq 2/2 Running 0 3m7s ledger-db-0 2/2 Running 0 3m6s ledgerwriter-6497f5cf9b-25c6x 2/2 Running 0 3m5s loadgenerator-57f6896fd6-lx5df 2/2 Running 0 3m5s transactionhistory-6c498965f-tl2sk 2/2 Running 0 3m4s userservice-95f44b65b-mlk2p 2/2 Running 0 3m4s
Jika Pod dalam status
Running
, kembali ke command line dengan menekanCtrl+C
.Tinjau manifes berikut:
Manifes ini menjelaskan resource Gateway dan VirtualService Istio yang mengekspos aplikasi dan menggunakan Istio sebagai pengontrol Ingress.
Terapkan manifes ke cluster Anda:
kubectl apply -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Mengonfigurasi mTLS
Autentikasi TLS timbal balik (mTLS) diaktifkan secara default di Istio. Artinya, Istio memantau workload server yang telah dimigrasikan ke proxy Istio dan secara otomatis mengonfigurasi proxy klien untuk membuat koneksi mTLS dengan workload ini. Istio juga mengonfigurasi proxy klien agar tidak menggunakan mTLS saat terhubung ke beban kerja tanpa proxy sidecar.
Istio dapat mengonfigurasi mTLS agar berfungsi dalam tiga mode:
PERMISSIVE
: Workload menerima traffic mTLS dan teks biasa.STRICT
: Workload hanya menerima traffic mTLS.DISABLE
: mTLS dinonaktifkan. Gunakan mode ini jika Anda ingin menggunakan solusi keamanan Anda sendiri.
Anda dapat menerapkan konfigurasi mTLS secara global, per namespace, atau per beban kerja. Dalam
tutorial ini, Anda akan menerapkan konfigurasi per namespace menggunakan mode mTLS STRICT
.
Tinjau manifes berikut:
Manifes ini menjelaskan Resource Kustom Istio Autentikasi Peer.
Terapkan manifes ke cluster Anda:
kubectl apply -f peer-authentication.yaml
Untuk mengetahui informasi selengkapnya tentang mTLS di Istio, lihat autentikasi TLS bersama.
Memastikan mTLS diaktifkan
Kiali adalah dasbor observabilitas berbasis web untuk mesh layanan Istio yang memberikan tampilan grafis lingkungan microservice Anda, sehingga Anda dapat memantau dan memecahkan masalah aplikasi Anda. Anda dapat menggunakan Kiali untuk memverifikasi bahwa autentikasi mTLS diaktifkan dan berfungsi dengan benar di mesh layanan Istio. Kiali memerlukan Prometheus sebagai sumber data telemetri. Tutorial ini menggunakan Google Cloud Managed Service for Prometheus.
Menginstal antarmuka kueri
Buat akun layanan IAM dengan
roles/monitoring.viewer
untuk mengizinkan antarmuka kueri mengakses metrik:gcloud iam service-accounts create monitoring \ --display-name="Service account for query interface" gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:monitoring@PROJECT_ID.iam.gserviceaccount.com" \ --role roles/monitoring.viewer gcloud iam service-accounts add-iam-policy-binding \ monitoring@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[monitoring/default]"
Membuat namespace Kubernetes:
kubectl create namespace monitoring
Anotasi akun layanan Kubernetes default di namespace untuk mengonfigurasi Workload Identity Federation for GKE:
kubectl annotate serviceaccount -n monitoring default \ iam.gke.io/gcp-service-account=monitoring@PROJECT_ID.iam.gserviceaccount.com --overwrite
Deploy workload antarmuka kueri:
kubectl -n monitoring apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.7.1/examples/frontend.yaml
Tinjau manifes berikut:
Manifes ini menjelaskan resource
PodMonitoring
yang mengumpulkan metrik Istio dan Envoy Proxy.Terapkan manifes ke cluster Anda:
kubectl apply -f pod-monitorings.yaml
Mendapatkan link ke aplikasi contoh:
INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
Buka link untuk melihat aplikasi contoh. Login dengan nama pengguna dan sandi default untuk membuat traffic antar-microservice.
Menginstal Kiali
Sebaiknya instal Kiali menggunakan Operator Kiali.
Instal Operator Kiali:
helm repo add kiali https://kiali.org/helm-charts helm repo update helm install \ --namespace kiali-operator \ --create-namespace \ kiali-operator \ kiali/kiali-operator
Tinjau manifes berikut:
Manifes ini menjelaskan resource kustom Operator yang menentukan server Kiali.
Terapkan manifes ke cluster Anda:
kubectl apply -f kiali.yaml
Tunggu hingga server Kiali siap:
watch kubectl get pods -n istio-system
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-6845466857-92zp8 1/1 Running 0 9m11s istiod-6b47d84cf-4cqlt 1/1 Running 0 12m
Jika Pod dalam status
Running
, kembali ke command line dengan menekanCtrl+C
.Siapkan penerusan port di Layanan server Kiali untuk mengakses dasbor:
kubectl -n istio-system port-forward svc/kiali 8080:20001
Buka Pratinjau Web. Di Kiali, buka bagian Graph, lalu pilih opsi Security di drop-down Display. Tampilan ini menampilkan status keamanan setiap node dalam grafik. Badge mTLS diaktifkan pada node menunjukkan bahwa mTLS diaktifkan untuk layanan tersebut, dan node tanpa badge menunjukkan bahwa mTLS tidak diaktifkan.