Menyuntikkan proxy sidecar dengan Cloud Service Mesh
Dokumen ini membahas cara mengonfigurasi penyisipan proxy sidecar dengan Cloud Service Mesh untuk meningkatkan keamanan, keandalan, dan kemampuan observasi jaringan. Fungsi ini diabstrakkan dari penampung utama aplikasi dan diimplementasikan dalam proxy out-of-process umum (sidecar), yang dikirimkan sebagai penampung terpisah di Pod yang sama. Hal ini menyediakan fitur Cloud Service Mesh tanpa mendesain ulang aplikasi produksi Anda untuk berpartisipasi dalam mesh layanan.
Injeksi proxy sidecar otomatis (injeksi otomatis) terjadi saat Cloud Service Mesh mendeteksi label namespace yang Anda konfigurasi untuk Pod workload. Proxy mencegat semua traffic masuk dan keluar ke workload serta berkomunikasi dengan Cloud Service Mesh.
Mengaktifkan injeksi sidecar otomatis
Cara yang direkomendasikan untuk menyuntikkan proxy file bantuan adalah dengan menggunakan injektor file bantuan otomatis berbasis webhook, meskipun Anda dapat memperbarui konfigurasi Kubernetes Pod secara manual.
Untuk mengaktifkan injeksi otomatis, Anda memberi label pada namespace dengan
label injeksi default
jika tag default disiapkan, atau dengan
label revisi ke namespace Anda.
Label yang Anda tambahkan juga bergantung pada apakah Anda men-deploy
Cloud Service Mesh terkelola (dengan
fleet API atau dengan
asmcli), atau
menginstal bidang kontrol dalam cluster. Label digunakan oleh webhook injektor sidecar
untuk mengaitkan sidecar yang diinjeksi dengan revisi bidang kontrol
tertentu.
Untuk mengaktifkan penyuntikan otomatis:
Dalam cluster
Gunakan perintah berikut untuk menemukan label revisi di
istiod:kubectl -n istio-system get pods -l app=istiod --show-labelsOutputnya terlihat mirip dengan yang berikut ini:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-11910-9-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586 istiod-asm-11910-9-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
Dalam output, di kolom
LABELS, catat nilai label revisiistiod, yang mengikuti awalanistio.io/rev=. Dalam contoh ini, nilainya adalahasm-11910-9.Terapkan label revisi ke namespace dan hapus label istio-injection (jika ada). Pada perintah berikut,
NAMESPACEadalah nama namespace tempat Anda ingin mengaktifkan penyuntikan otomatis, danREVISIONadalah label revisi yang Anda catat pada langkah sebelumnya.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwriteAnda dapat mengabaikan pesan
"istio-injection not found"dalam output. Artinya, namespace sebelumnya tidak memiliki labelistio-injection, yang akan Anda lihat di penginstalan Cloud Service Mesh atau deployment baru. Karena perilaku injeksi otomatis tidak ditentukan saat namespace memiliki label revisi danistio-injection, semua perintahkubectl labeldalam dokumentasi Cloud Service Mesh secara eksplisit memastikan bahwa hanya satu yang ditetapkan.Mulai ulang pod yang terpengaruh, menggunakan langkah-langkah di bagian berikutnya.
Mesh layanan terkelola
Gunakan perintah berikut untuk menemukan saluran rilis yang tersedia:
kubectl -n istio-system get controlplanerevisionOutputnya mirip dengan hal berikut ini:
NAME AGE asm-managed 6d7hDalam output, pilih nilai di kolom
NAMEadalah labelREVISIONyang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh. Terapkan label ini ke namespace Anda, dan hapus labelistio-injection(jika ada). Pada perintah berikut, gantiREVISIONdengan label revisi yang Anda catat di atas, dan gantiNAMESPACEdengan nama namespace tempat Anda ingin mengaktifkan injeksi otomatis:kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwriteAnda dapat mengabaikan pesan
"istio-injection not found"dalam output. Artinya, namespace sebelumnya tidak memiliki labelistio-injection, yang akan Anda lihat di penginstalan Cloud Service Mesh atau deployment baru. Karena perilaku injeksi otomatis tidak ditentukan saat namespace memiliki label revisi danistio-injection, semua perintahkubectl labeldalam dokumentasi Cloud Service Mesh secara eksplisit memastikan bahwa hanya satu yang ditetapkan.Mulai ulang pod yang terpengaruh, menggunakan langkah-langkah di bagian berikutnya.
Jika Anda juga men-deploy bidang data yang dikelola Google opsional, anotasikan namespace
demosebagai berikut:kubectl annotate --overwrite namespace YOUR_NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Mulai ulang Pod untuk mengupdate proxy sidecar
Dengan injeksi sidecar otomatis, Anda dapat mengupdate sidecar untuk Pod yang ada dengan memulai ulang Pod:
Cara memulai ulang Pod bergantung pada apakah Pod dibuat sebagai bagian dari Deployment.
Jika Anda menggunakan Deployment, mulai ulang Deployment, yang akan memulai ulang semua Pod dengan sidecar:
kubectl rollout restart deployment -n YOUR_NAMESPACE
Jika Anda tidak menggunakan Deployment, hapus Pod, dan Pod akan otomatis dibuat ulang dengan sidecar:
kubectl delete pod -n YOUR_NAMESPACE --all
Pastikan semua Pod di namespace memiliki sidecar yang disuntikkan:
kubectl get pod -n YOUR_NAMESPACE
Dalam contoh output berikut dari perintah sebelumnya, perhatikan bahwa kolom
READYmenunjukkan ada dua container untuk setiap beban kerja Anda: container utama dan container untuk proxy sidecar.NAME READY STATUS RESTARTS AGE YOUR_WORKLOAD 2/2 Running 0 20s ...
Langkah berikutnya
Pelajari lebih lanjut: