Revisi bidang kontrol Anthos Service Mesh
Halaman ini menjelaskan cara kerja revisi bidang kontrol dan nilai penggunaannya untuk upgrade mesh layanan yang aman (dan rollback).
Dasar-dasar penginstalan mesh layanan
Pada level tinggi, penginstalan Anthos Service Mesh terdiri dari dua fase utama:
Pertama, Anda menggunakan alat
asmcli
untuk menginstal bidang kontrol dalam cluster atau mengonfigurasi bidang kontrol terkelola. Bidang kontrol terdiri dari sekumpulan layanan sistem yang bertanggung jawab untuk mengelola konfigurasi mesh.Selanjutnya, Anda men-deploy proxy file bantuan khusus di seluruh lingkungan Anda yang mencegat komunikasi jaringan ke dan dari setiap beban kerja. Proxy berkomunikasi dengan bidang kontrol untuk mendapatkan konfigurasinya, sehingga Anda dapat mengarahkan dan mengontrol traffic (traffic bidang data) di sekitar mesh tanpa membuat perubahan apa pun pada workload.
Untuk men-deploy proxy, gunakan proses yang disebut injeksi file bantuan otomatis (injeksi otomatis) untuk menjalankan proxy sebagai penampung file bantuan tambahan di setiap Pod workload. Anda tidak perlu mengubah manifes Kubernetes yang digunakan untuk men-deploy workload, tetapi Anda perlu menambahkan label ke namespace dan memulai ulang Pod.
Gunakan revisi untuk mengupgrade mesh Anda dengan aman
Kemampuan untuk mengontrol traffic adalah salah satu manfaat utama penggunaan mesh layanan. Misalnya, Anda dapat mengalihkan traffic secara bertahap ke versi baru aplikasi saat pertama kali men-deploy-nya ke produksi. Jika mendeteksi masalah selama upgrade, Anda dapat mengalihkan traffic kembali ke versi asli, dengan cara yang mudah dan berisiko rendah untuk melakukan roll back. Prosedur ini dikenal sebagai rilis canary, dan sangat mengurangi risiko yang terkait dengan deployment baru.
Dengan menggunakan revisi bidang kontrol dalam upgrade canary, Anda akan menginstal bidang kontrol dan konfigurasi yang baru dan terpisah di samping bidang kontrol yang ada. Penginstal menetapkan string yang disebut revisi untuk mengidentifikasi bidang kontrol baru. Pada awalnya, proxy file bantuan terus menerima konfigurasi dari bidang kontrol versi sebelumnya. Anda secara bertahap akan mengaitkan workload ke bidang kontrol baru dengan memberi label namespace atau Pod-nya menggunakan revisi bidang kontrol baru. Setelah memberi label namespace atau Pod dengan revisi baru, mulai ulang Pod beban kerja agar file bantuan baru dimasukkan secara otomatis, dan menerima konfigurasinya dari bidang kontrol baru. Jika ada masalah, Anda dapat melakukan roll back dengan mudah dengan mengaitkan workload ke bidang kontrol asli.
Bagaimana cara kerja injeksi otomatis?
Injeksi otomatis menggunakan fitur Kubernetes yang disebut kontrol akses. Webhook penerimaan yang bermutasi didaftarkan untuk memantau Pod yang baru dibuat. Webhook dikonfigurasi dengan pemilih namespace agar hanya cocok dengan Pod yang sedang di-deploy ke namespace yang memiliki label tertentu. Jika Pod cocok, webhook akan berkonsultasi dengan layanan injeksi yang disediakan oleh bidang kontrol untuk mendapatkan konfigurasi baru yang bermutasi untuk Pod, yang berisi container dan volume yang diperlukan untuk menjalankan file bantuan.
- Konfigurasi webhook dibuat selama penginstalan. Webhook didaftarkan dengan server Kubernetes API.
- Server Kubernetes API mengamati deployment Pod di namespace yang cocok dengan webhook
namespaceSelector
. - Namespace diberi label sehingga akan dicocokkan dengan
namespaceSelector
. - Pod yang di-deploy ke namespace akan memicu webhook.
- Layanan
inject
yang disediakan oleh bidang kontrol mengubah spesifikasi Pod untuk memasukkan file bantuan secara otomatis.
Apa itu revisi?
Label yang digunakan untuk injeksi otomatis sama seperti label Kubernetes lainnya yang ditentukan pengguna. Label pada dasarnya adalah pasangan nilai kunci yang dapat digunakan untuk mendukung konsep pelabelan. Label banyak digunakan untuk pemberian tag dan revisi. Misalnya, tag Git, tag Docker, dan revisi Knative.
Dengan proses penginstalan Anthos Service Mesh saat ini, Anda dapat memberi label bidang kontrol yang diinstal dengan string revisi. {i>Installer<i} memberi label pada setiap objek
bidang kontrol dengan revisi tersebut. Kunci dalam key-value pair adalah istio.io/rev
, tetapi nilai label revisi berbeda untuk bidang kontrol terkelola dan bidang kontrol dalam cluster.
Untuk bidang kontrol dalam cluster, Layanan dan Deployment
istiod
biasanya memiliki label revisi yang mirip denganistio.io/rev=asm-1233-2
, denganasm-1233-2
mengidentifikasi versi Anthos Service Mesh. Revisi menjadi bagian dari nama layanan, misalnya:istiod-asm-1233-2.istio-system
Untuk bidang kontrol terkelola, label revisi sesuai dengan saluran rilis:
Label revisi Saluran istio.io/rev=asm-managed
Reguler istio.io/rev=asm-managed-rapid
Cepat istio.io/rev=asm-managed-stable
Stabil
Selain itu, Anda memiliki opsi untuk menggunakan
label injeksi default
(misalnya, istio-injection=enabled
).
Untuk mengaktifkan injeksi otomatis, tambahkan label revisi ke namespace Anda yang sesuai dengan label revisi di bidang kontrol. Misalnya, bidang kontrol
dengan revisi istio.io/rev=asm-1233-2
akan memilih Pod dalam namespace dengan
label istio.io/rev=asm-1233-2
dan memasukkan file bantuan.
Proses upgrade canary
Label revisi memungkinkan Anda melakukan upgrade canary dan rollback dengan mudah bidang kontrol dalam cluster. Kontrol terkelola menggunakan proses yang sama, tetapi cluster Anda otomatis diupgrade ke versi terbaru dalam saluran tersebut.
Langkah-langkah berikut menjelaskan cara kerja proses tersebut:
- Mulai dengan Anthos Service Mesh yang sudah ada atau penginstalan Istio open source. Tidak masalah apakah namespace menggunakan label
revisi atau label
istio-injection=enabled
. - Gunakan string revisi saat Anda menginstal versi baru bidang
kontrol. Karena string revisi, bidang kontrol baru diinstal
bersama versi yang sudah ada. Penginstalan baru ini mencakup konfigurasi webhook baru dengan
namespaceSelector
yang dikonfigurasi untuk memantau namespace dengan label revisi spesifik tersebut. - Anda memigrasikan proxy file bantuan ke bidang kontrol baru dengan menghapus label lama dari namespace, menambahkan label revisi baru, lalu memulai ulang Pod. Jika menggunakan revisi dengan Anthos Service Mesh, Anda harus berhenti menggunakan label
istio-injection=enabled
. Bidang kontrol dengan revisi tidak memilih Pod dalam namespace dengan labelistio-injection
, meskipun ada label revisi. Webhook untuk bidang kontrol baru memasukkan file bantuan ke dalam Pod. - Uji beban kerja yang terkait dengan bidang kontrol yang telah diupgrade dengan hati-hati dan lanjutkan meluncurkan upgrade atau roll back ke bidang kontrol awal.
Setelah mengaitkan Pod dengan bidang kontrol baru, bidang kontrol dan webhook yang ada masih diinstal. Webhook lama tidak berpengaruh untuk Pod di namespace yang telah dimigrasikan ke bidang kontrol baru. Anda dapat melakukan roll back Pod dalam namespace ke bidang kontrol asli dengan menghapus label revisi baru, menambahkan kembali label asli, dan memulai ulang Pod. Setelah yakin bahwa upgrade telah selesai, Anda dapat menghapus bidang kontrol lama.
Untuk langkah-langkah mendetail tentang cara mengupgrade menggunakan revisi, lihat Panduan upgrade.
Mempelajari lebih lanjut konfigurasi webhook yang bermutasi
Agar dapat lebih memahami webhook yang bermutasi untuk injeksi file bantuan otomatis, periksa sendiri konfigurasinya. Gunakan perintah berikut:
kubectl -n istio-system get mutatingwebhookconfiguration -l app=sidecar-injector -o yaml
Anda akan melihat konfigurasi terpisah untuk setiap bidang kontrol yang telah diinstal. Pemilih namespace untuk bidang kontrol berbasis revisi akan terlihat seperti ini:
namespaceSelector:
matchExpressions:
- key: istio-injection
operator: DoesNotExist
- key: istio.io/rev
operator: In
values:
- asm-1233-2
Pemilih dapat bervariasi, bergantung pada versi Anthos Service Mesh atau Istio yang Anda jalankan. Pemilih ini mencocokkan namespace dengan label revisi tertentu
selama tidak memiliki label istio-injection
.
Saat Pod di-deploy ke namespace yang cocok dengan pemilih, spesifikasi Pod-nya akan dikirim ke layanan injection untuk mutasi. Layanan injection yang akan dipanggil ditentukan sebagai berikut:
service:
name: istiod-asm-1233-2
namespace: istio-system
path: /inject
port: 443
Layanan diekspos oleh bidang kontrol pada port 443 pada jalur URL
inject
.
Bagian rules
menentukan bahwa webhook harus diterapkan untuk pembuatan Pod:
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
scope: '*'