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). Hingga versi 1.6.8, proses penginstalan default untuk Anthos Service Mesh tidak menggunakan revisi bidang kontrol. Memperkenalkan revisi mungkin memerlukan beberapa upaya dan perubahan pada prosedur penginstalan Anda, tetapi kami sangat merekomendasikannya karena penggunaan revisi dapat memberikan manfaat yang signifikan.

Dasar-dasar mesh layanan

Penginstalan Anthos Service Mesh terdiri dari dua bagian utama, yang biasanya otomatis menggunakan skrip install_asm. Pertama, gunakan alat command line istioctl dan file YAML IstioOperator untuk menginstal bidang kontrol dan konfigurasinya. Bidang kontrol (juga disebut sebagai istiod) terdiri dari kumpulan 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 pada beban kerja Anda.

Untuk men-deploy proxy, gunakan proses yang disebut injeksi file bantuan otomatis (injeksi otomatis) untuk menjalankan proxy sebagai container sidecar tambahan di setiap Pod workload. Anda tidak perlu mengubah manifes Kubernetes yang digunakan untuk men-deploy workload. Namun, Anda perlu menambahkan label ke namespace dan memulai ulang Pod.

Sebelum Anthos Service Mesh 1.6, Anda melakukan upgrade dengan menginstal versi baru bidang kontrol yang segera menggantikan versi lama. Prosedur ini dikenal sebagai upgrade di tempat, dan berisiko karena jika terjadi kegagalan, roll back dapat menjadi sulit. Untuk memasukkan ulang proxy dan membuatnya berkomunikasi dengan versi bidang kontrol baru, Anda harus memulai ulang semua beban kerja di semua namespace. Bergantung pada jumlah workload dan namespace di mesh Anda, seluruh proses upgrade dapat memerlukan waktu satu jam atau lebih. Upgrade yang langsung dapat menyebabkan periode nonaktif dan harus dijadwalkan selama masa pemeliharaan.

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.

Demikian pula, Anda dapat meminimalkan risiko yang terkait dengan upgrade mesh layanan itu sendiri. Anthos Service Mesh 1.6 dan yang lebih baru mendukung upgrade canary menggunakan revisi bidang kontrol. Dengan upgrade canary, Anda menginstal konfigurasi dan bidang kontrol 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 versi bidang kontrol sebelumnya. Anda secara bertahap akan mengaitkan workload ke bidang kontrol baru dengan melabeli namespace-nya dengan revisi bidang kontrol baru. Setelah memberi label namespace dengan revisi baru, Anda akan memulai ulang Pod beban kerja sehingga file bantuan baru dimasukkan, dan menerima konfigurasinya dari bidang kontrol baru. Jika ada masalah, Anda dapat dengan mudah melakukan roll back dengan mengaitkan beban kerja dengan 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. Saat Pod cocok, webhook akan berkonsultasi dengan layanan injeksi yang disediakan oleh istiod untuk memperoleh konfigurasi baru yang bermutasi untuk Pod, yang berisi container dan volume yang diperlukan untuk menjalankan file bantuan.

injektor sespan

  1. Konfigurasi webhook dibuat selama penginstalan. Mendaftarkan webhook dengan server Kubernetes API.
  2. Server Kubernetes API mengamati deployment Pod di namespace yang cocok dengan webhook namespaceSelector.
  3. Namespace diberi label sehingga akan dicocokkan dengan namespaceSelector.
  4. Pod yang di-deploy ke namespace akan memicu webhook.
  5. Layanan inject yang disediakan oleh istiod mengubah spesifikasi Pod untuk memasukkan file bantuan.

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 pemberian tag. Label banyak digunakan untuk pemberian tag dan revisi. Misalnya, tag Git, tag Docker, dan revisi Knative.

Hingga Anthos Service Mesh versi 1.6.8, prosedur penginstalan default telah menetapkan konvensi untuk mengonfigurasi pemilih namespace di webhook agar dapat menggunakan label: istio-injection=enabled

Proses penginstalan Anthos Service Mesh saat ini memungkinkan Anda memberi tag pada bidang kontrol yang diinstal dengan string revisi, baik sebagai argumen revision untuk perintah istioctl dan sebagai kolom dalam resource kustom IstioOperator. Penginstal memberi label setiap objek bidang kontrol dengan revisi, termasuk Layanan dan Deployment istiod. Revisi menjadi bagian dari nama layanan, misalnya, istiod-asm-173-6.istio-system.

Kunci label yang sesuai untuk namespace adalah istio.io/rev dan nilainya biasanya ditetapkan untuk menunjukkan versi mesh. Misalnya, bidang kontrol dengan revisi asm-173-6 akan memilih Pod dalam namespace dengan label istio.io/rev=asm-173-6 dan memasukkan file bantuan.

Proses upgrade canary

Label revisi memungkinkan upgrade canary dan rollback yang mudah pada bidang kontrol.

upgrade canary

Langkah-langkah berikut menjelaskan cara kerja proses tersebut:

  1. 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.
  2. 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.
  3. 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 label istio-injection, meskipun ada label revisi. Webhook untuk bidang kontrol baru memasukkan file bantuan ke dalam Pod.
  4. 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 mengetahui langkah-langkah mendetail tentang cara mengupgrade menggunakan revisi, lihat Panduan upgrade.

Mempelajari lebih lanjut konfigurasi webhook yang bermutasi

Cara terbaik untuk memahami webhook yang bermutasi untuk injeksi sidecar otomatis adalah dengan memeriksa konfigurasinya sendiri. 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-173-6

Pemilih dapat bervariasi, bergantung pada versi Anthos Service Mesh atau Istio yang Anda jalankan. Pemilih ini mencocokkan namespace dengan label revisi tertentu selama namespace 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-173-6
        namespace: istio-system
        path: /inject
        port: 443

Layanan diekspos oleh istiod pada port 443 di jalur URL inject.

Bagian rules menentukan bahwa webhook harus diterapkan untuk pembuatan Pod:

   rules:
    - apiGroups:
      - ""
      apiVersions:
      - v1
      operations:
      - CREATE
      resources:
      - pods
      scope: '*'

Ringkasan

Meskipun penggantian label revisi pada namespace untuk mengaktifkan injeksi otomatis mungkin memerlukan waktu untuk membiasakan diri, manfaat yang diberikan label revisi untuk upgrade canary yang aman akan sepadan dengan usaha Anda.

Langkah selanjutnya