Tutorial ini ditujukan untuk pengguna dan administrator Kubernetes yang tertarik menggunakan mesh layanan Istio untuk men-deploy Layanan Kubernetes dengan aman dan mengaktifkan komunikasi TLS timbal balik (mTLS).
Istio dan Cloud Service Mesh
Istio bukan produk Google yang didukung. Sebaiknya jalankan Cloud Service Mesh terkelola. Untuk 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 memasukkan 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 sasaran tingkat layanan (SLOs) 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 yang dikelola Cloud Service Mesh akan otomatis mengupgrade proxy sidecar dalam 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.
Tujuan
Tutorial ini mencakup langkah-langkah berikut:
- Membuat cluster GKE Autopilot.
- Instal Istio menggunakan alat command line
istioctl
. - Men-deploy aplikasi contoh untuk menguji autentikasi TLS bersama (mTLS).
- Konfigurasikan Istio untuk menggunakan autentikasi mTLS untuk komunikasi
service-to-service menggunakan resource kustom
PeerAuthentication
. - Verifikasi autentikasi mTLS menggunakan dasbor Kiali.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Cloud Shell telah diinstal dengan software yang Anda perlukan untuk tutorial ini, termasuk kubectl
, gcloud CLI, dan Terraform.
Jika tidak menggunakan Cloud Shell, Anda harus menginstal gcloud CLI.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.clusterAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
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:
export ISTIO_VERSION=1.20.2 curl -L https://istio.io/downloadIstio | TARGET_ARCH=$(uname -m) sh -
Tambahkan alat command line
istioctl
ke PATH:cd istio-${ISTIO_VERSION} 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 adalah
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 mesh layanan 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 adalah
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 Bersama (mTLS) diaktifkan secara default di Istio. Artinya, Istio memantau beban kerja server yang telah dimigrasikan ke proxy Istio dan secara otomatis mengonfigurasi proxy klien untuk membuat koneksi mTLS dengan beban kerja 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
: Beban kerja 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 timbal balik.
Memastikan mTLS diaktifkan
Kiali adalah dasbor visibilitas berbasis web untuk mesh layanan Istio yang memberikan tampilan grafis lingkungan microservice, sehingga Anda dapat memantau dan memecahkan masalah aplikasi. 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." \ --role roles/monitoring.viewer gcloud iam service-accounts add-iam-policy-binding \ monitoring@PROJECT_ID. \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[monitoring/default]"
Membuat namespace Kubernetes:
kubectl create namespace monitoring
Anotasikan 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. --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 Proxy Envoy.Terapkan manifes ke cluster Anda:
kubectl apply -f pod-monitorings.yaml
Dapatkan 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 contoh aplikasi. Login dengan nama pengguna dan sandi default untuk menghasilkan 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 adalah
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 Grafik, lalu pilih opsi Keamanan di menu dropdown Tampilan. Tampilan ini menampilkan status keamanan setiap node dalam grafik. Node dengan badge mTLS diaktifkan menunjukkan bahwa mTLS diaktifkan untuk layanan tersebut, dan node tanpa badge menunjukkan bahwa mTLS tidak diaktifkan.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource satu per satu
Jika Anda telah menggunakan project yang sudah ada dan tidak ingin menghapusnya, hapus resource individual tersebut.
Menghapus Kiali:
kubectl -n istio-system delete kiali kiali helm uninstall --namespace kiali-operator kiali-operator
Hapus resource pemantauan:
kubectl -n monitoring delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.7.1/examples/frontend.yaml
Hapus aplikasi contoh:
kubectl delete -f bank-of-anthos/extras/istio/frontend-ingress.yaml kubectl delete -f bank-of-anthos/kubernetes-manifests
Uninstal Istio:
istioctl uninstall --purge -y
Hapus cluster GKE:
gcloud container clusters delete --region us-central1 istio-cluster --quiet
Langkah berikutnya
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.