Tutorial ini ditujukan untuk pengguna dan administrator Kubernetes yang tertarik menggunakan Mesh layanan Istio untuk mengamankan men-deploy Layanan Kubernetes dan mengaktifkan komunikasi TLS (mTLS) bersama.
Mesh Layanan Istio dan Cloud
Istio bukan produk Google yang didukung. Sebaiknya jalankan pengelolaan di Cloud Service Mesh. Untuk informasi selengkapnya, lihat Menyediakan Cloud Service Mesh pada cluster GKE Autopilot.
Cloud Service Mesh memberikan manfaat berikut:
- Anda dapat menyediakan Cloud Service Mesh terkelola menggunakan
Fleet API tanpa sisi klien
alat seperti
istioctl
. - Cloud Service Mesh secara otomatis memasukkan proxy file bantuan ke dalam workload tanpa memberikan hak istimewa yang ditingkatkan ke container Anda.
- Anda dapat melihat dasbor yang kaya untuk mesh dan layanan Anda tanpa konfigurasi tambahan, lalu menggunakan metrik ini untuk mengonfigurasi tingkat layanan tujuan (SLO) dan pemberitahuan untuk memantau kondisi aplikasi Anda.
- Bidang kontrol Cloud Service Mesh terkelola diupgrade secara otomatis untuk memastikan Anda mendapatkan {i>patch<i} dan fitur keamanan terbaru.
- Bidang data terkelola Cloud Service Mesh otomatis mengupgrade file bantuan proxy di beban kerja 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 Istio API open source standar. Untuk informasi selengkapnya, lihat fitur yang didukung.
Tujuan
Tutorial ini mencakup langkah-langkah berikut:
- Membuat cluster GKE Autopilot.
- Instal Istio menggunakan alat command line
istioctl
. - Deploy aplikasi contoh untuk menguji autentikasi TLS bersama (mTLS).
- Mengonfigurasi Istio agar menggunakan autentikasi mTLS untuk layanan ke layanan
komunikasi menggunakan resource kustom
PeerAuthentication
. - Verifikasi autentikasi mTLS menggunakan dasbor Kiali.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang 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 diprainstal dengan software yang Anda perlukan untuk ini
tutorial, termasuk
kubectl
,
gcloud CLI, dan Terraform.
Jika tidak menggunakan Cloud Shell, Anda harus menginstal gcloud CLI.
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API GKE:
gcloud services enable container.googleapis.com
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API GKE:
gcloud services enable container.googleapis.com
-
Berikan peran ke Akun Google Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/container.clusterAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Ganti
PROJECT_ID
dengan project ID Anda. - Ganti
EMAIL_ADDRESS
dengan alamat email Anda. - Ganti
ROLE
dengan setiap peran individual.
- Ganti
Menyiapkan lingkungan
Untuk menyiapkan lingkungan, 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 project ID Google Cloud 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
Mengaktifkan kemampuan Linux yang diperlukan Istio: NET_RAW
dan NET_ADMIN
.
Autopilot GKE tidak mengizinkan NET_ADMIN
secara default, tetapi
Anda dapat mengaktifkan NET_ADMIN
menggunakan --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 lebih lanjut keamanan GKE Autopilot, lihat Konfigurasi keamanan bawaan.
Instal Istio
Anda dapat menginstal Istio di cluster GKE menggunakan Istioctl.
Dalam tutorial ini, Anda menginstal Istio dengan profil konfigurasi 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 Istio Pod 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 Istio Pod bernilai
Running
, kembali ke command line dengan menekanCtrl+C
.
Men-deploy aplikasi contoh
Di bagian ini, Anda akan menggunakan Bank of Anthos aplikasi contoh untuk membuat mesh layanan dengan otentikasi mTLS.
Menambahkan label namespace yang menginstruksikan Istio untuk mengaktifkan mode otomatis injeksi proxy file bantuan 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 Istio Gateway dan VirtualService yang mengekspos aplikasi dan menggunakan Istio sebagai Pengontrol masuk.
Terapkan manifes ke cluster Anda:
kubectl apply -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Mengonfigurasi mTLS
Autentikasi Mutual TLS (mTLS) diaktifkan secara default di Istio. Artinya bahwa Istio memantau beban kerja server yang telah dimigrasikan ke proxy Istio dan secara otomatis mengkonfigurasi {i>proxy<i} klien untuk membuat koneksi mTLS dengan workload ini. Istio juga mengonfigurasi proxy klien agar tidak menggunakan mTLS saat yang menghubungkan ke beban kerja tanpa proxy file bantuan.
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 mode ini solusi keamanan.
Anda dapat menerapkan konfigurasi mTLS secara global, per namespace, atau per beban kerja. Di beberapa
tutorial ini, Anda akan menerapkan konfigurasi per namespace menggunakan STRICT
mTLS
mode.
Tinjau manifes berikut:
Manifes ini menjelaskan Referensi 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 kemampuan observasi berbasis web untuk mesh layanan Istio yang menyediakan tampilan grafis dari lingkungan microservice Anda, yang memungkinkan Anda untuk memantau dan memecahkan masalah aplikasi Anda. Anda dapat menggunakan Kiali untuk memverifikasi bahwa mTLS autentikasi 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 dalam namespace untuk atur Workload Identity Federation untuk GKE:
kubectl annotate serviceaccount -n monitoring default \ iam.gke.io/gcp-service-account=monitoring@PROJECT_ID. --overwrite
Deploy beban kerja 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 Istio dan Metrik 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 default nama pengguna dan sandi untuk menghasilkan traffic antar microservice.
Instal Kiali
Sebaiknya Anda menginstal 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 mendefinisikan 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 Graph dan pilih Opsi Keamanan di drop-down Display. Tampilan ini menampilkan status keamanan setiap node dalam grafik. Node dengan mTLS yang diaktifkan badge 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
Menghapus project Google Cloud:
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.
Hapus 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 selanjutnya
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.