Serangkaian postingan di Istio Service Mesh

Kami memulai serangkaian postingan yang menampilkan beberapa dari sekian banyak kemampuan Istio Service Mesh ketika dikombinasikan dengan Red Hat OpenShift dan Kubernetes.

Serangkaian postingan di Istio Service Mesh

Bagian satu, hari ini:

  • Mari kita jelaskan konsep container sespan Kubernetes dan rumuskan motif utama rangkaian postingan ini: "Anda tidak perlu mengubah apa pun di kode Anda".
  • Mari kita perkenalkan hal mendasar dari Istio - aturan perutean. Semua fitur Istio lainnya dibangun berdasarkan aturan tersebut, karena aturanlah yang memungkinkan Anda mengarahkan lalu lintas ke layanan mikro, menggunakan file YAML di luar kode layanan. Kami juga mempertimbangkan skema penerapan Canary Deployment. Bonus Tahun Baru – 10 pelajaran interaktif di Istio


Bagian kedua, segera hadir, akan memberi tahu Anda:

  • Bagaimana Istio mengimplementasikan Pool Ejection yang dikombinasikan dengan Circuit Breaker dan akan mendemonstrasikan bagaimana Istio memungkinkan Anda mengeluarkan pod yang mati atau berperforma buruk dari sirkuit penyeimbang.
  • Kami juga akan melihat topik Circuit Breaker dari postingan pertama untuk melihat bagaimana Istio dapat digunakan di sini. Kami akan menunjukkan kepada Anda cara merutekan lalu lintas dan menangani kesalahan jaringan menggunakan file konfigurasi YAML dan perintah terminal tanpa perubahan sedikit pun pada kode layanan.

Bagian ketiga:

  • Sebuah cerita tentang penelusuran dan pemantauan, yang sudah ada di dalamnya atau mudah ditambahkan ke Istio. Kami akan menunjukkan kepada Anda cara menggunakan alat seperti Prometheus, Jaeger, dan Grafana yang dikombinasikan dengan penskalaan OpenShift untuk mengelola arsitektur layanan mikro dengan mudah.
  • Kami beralih dari memantau dan menangani kesalahan hingga memasukkannya ke dalam sistem dengan sengaja. Dengan kata lain, kita belajar bagaimana melakukan injeksi kesalahan tanpa mengubah kode sumber, yang sangat penting dari sudut pandang pengujian - karena jika Anda mengubah kode itu sendiri untuk ini, ada risiko menimbulkan kesalahan tambahan.

Terakhir, pada postingan terakhir di Istio Service Mesh:

  • Mari kita pergi ke Sisi Gelap. Lebih tepatnya, kita akan belajar menggunakan skema Peluncuran Gelap, ketika kode diterapkan dan diuji langsung pada data produksi, tetapi tidak mempengaruhi pengoperasian sistem dengan cara apa pun. Di sinilah kemampuan Istio untuk membagi lalu lintas berguna. Dan kemampuan untuk menguji data produksi langsung tanpa mempengaruhi pengoperasian sistem tempur dengan cara apa pun adalah metode verifikasi yang paling meyakinkan.
  • Berdasarkan Dark Launch, kami akan menunjukkan kepada Anda cara menggunakan model Canary Deployment untuk mengurangi risiko dan mempermudah memasukkan kode baru ke dalam produksi. Canary Deployment sendiri bukanlah hal baru, tetapi Istio memungkinkan Anda mengimplementasikan skema ini hanya dengan file YAML sederhana.
  • Terakhir, kami akan menunjukkan kepada Anda cara menggunakan Istio Egress untuk memberikan akses layanan kepada mereka yang berada di luar cluster Anda untuk menggunakan kemampuan Istio saat bekerja dengan Internet.

Jadi, ini dia...

Alat pemantauan dan manajemen Istio - semua yang Anda perlukan untuk mengatur layanan mikro dalam mesh layanan jaring layanan.

Apa itu Istio Service Mesh

Jaring layanan mengimplementasikan fungsi seperti pemantauan lalu lintas, kontrol akses, penemuan, keamanan, toleransi kesalahan, dan hal-hal berguna lainnya untuk sekelompok layanan. Istio memungkinkan Anda melakukan semua ini tanpa perubahan sedikit pun pada kode layanan itu sendiri. Apa rahasia sihir? Istio melampirkan proksinya sendiri ke setiap layanan dalam bentuk wadah sespan (sespan adalah sespan sepeda motor), setelah itu semua lalu lintas ke layanan ini melewati proksi, yang dipandu oleh kebijakan tertentu, memutuskan bagaimana, kapan, dan apakah lalu lintas ini harus mencapai layanan sama sekali. Istio juga memungkinkan penerapan teknik DevOps tingkat lanjut seperti penerapan canary, pemutus sirkuit, injeksi kesalahan, dan banyak lainnya.

Cara Istio bekerja dengan container dan Kubernetes

Jaring layanan Istio adalah implementasi sespan dari semua yang diperlukan untuk membuat dan mengelola layanan mikro: pemantauan, penelusuran, pemutus sirkuit, perutean, penyeimbangan beban, injeksi kesalahan, percobaan ulang, batas waktu, pencerminan, kontrol akses, pembatasan laju, dan banyak lagi lainnya. Dan meskipun saat ini ada banyak sekali perpustakaan yang mengimplementasikan fungsi-fungsi ini secara langsung dalam kode, dengan Istio Anda bisa mendapatkan semua hal yang sama tanpa mengubah apa pun dalam kode Anda.

Menurut model sespan, Istio berjalan dalam wadah Linux, yang terletak di satu wadah Kubernetes-pod dengan layanan terkontrol dan memasukkan serta mengekstrak fungsionalitas dan informasi sesuai dengan konfigurasi yang diberikan. Kami menekankan bahwa ini adalah konfigurasi Anda sendiri, dan berada di luar kode Anda. Oleh karena itu, kode menjadi lebih sederhana dan pendek.

Yang juga penting adalah bahwa komponen operasional layanan mikro sama sekali tidak ada hubungannya dengan kode itu sendiri, yang berarti pengoperasiannya dapat ditransfer dengan aman ke spesialis TI. Memang benar, mengapa pengembang harus bertanggung jawab atas pemutus sirkuit dan injeksi kesalahan? Bereaksi, ya, tapi proses dan ciptakan? Jika Anda menghapus semua ini dari kode, pemrogram akan dapat fokus sepenuhnya pada fungsionalitas aplikasi. Dan kodenya sendiri akan menjadi lebih pendek dan sederhana.

Jaring layanan

Istio, yang mengimplementasikan fungsi untuk mengelola layanan mikro di luar kodenya, adalah konsep Service Mesh. Dengan kata lain, ini adalah kelompok terkoordinasi dari satu atau lebih biner yang membentuk jaringan fungsi jaringan.

Bagaimana Istio bekerja dengan layanan mikro

Seperti inilah tampilan kerja kontainer sespan Kubernetes ΠΈ Pergeseran mini pandangan sekilas: meluncurkan instance Minishift, membuat proyek untuk Istio (sebut saja β€œistio-system”), menginstal dan menjalankan semua komponen terkait Istio. Kemudian, saat Anda membuat proyek dan pod, Anda menambahkan informasi konfigurasi ke penerapan Anda, dan pod Anda mulai menggunakan Istio. Diagram yang disederhanakan terlihat seperti ini:

Serangkaian postingan di Istio Service Mesh

Sekarang Anda dapat mengubah pengaturan Istio, misalnya untuk mengatur injeksi kesalahan, dukungan Penyebaran Canary atau fitur Istio lainnya - dan semua ini tanpa menyentuh kode aplikasi itu sendiri. Katakanlah Anda ingin mengalihkan semua lalu lintas web dari pengguna klien terbesar Anda (Foo Corporation) ke versi situs yang baru. Untuk melakukan ini, cukup buat aturan perutean Istio yang akan mencari @foocorporation.com di ID pengguna dan mengarahkan ulang sesuai dengan itu. Untuk semua pengguna lain, tidak ada yang berubah. Sementara itu, Anda akan dengan tenang menguji versi baru situs tersebut. Dan perhatikan bahwa Anda tidak perlu melibatkan pengembang sama sekali untuk ini.

Dan apakah Anda harus membayar mahal untuk itu?

Sama sekali tidak. Istio cukup cepat dan ditulis Go dan menciptakan overhead yang sangat sedikit. Selain itu, kemungkinan hilangnya produktivitas online diimbangi dengan peningkatan produktivitas pengembang. Setidaknya secara teori: jangan lupa bahwa waktu pengembang sangat berharga. Sedangkan untuk biaya software, Istio merupakan software open source sehingga Anda bisa mendapatkan dan menggunakannya secara gratis.

Kuasai sendiri

Tim Pengalaman Pengembang Red Hat telah mengembangkan praktik langsung yang mendalam panduan oleh Istio (dalam bahasa Inggris). Ini berjalan di Linux, MacOS dan Windows, dan kodenya tersedia di Java dan Node.js.

10 pelajaran interaktif di Istio

Blok 1 - Untuk Pemula

Pengantar Istio
30 menit
Mari berkenalan dengan Service Mesh, pelajari cara menginstal Istio di cluster OpenShift Kubernetes.
Pos

Menyebarkan layanan mikro di Istio
30 menit
Kami menggunakan Istio untuk menerapkan tiga layanan mikro dengan Spring Boot dan Vert.x.
Pos

Blok 2 – tingkat menengah

Monitoring dan tracing di Istio
60 menit
Kami akan menjelajahi alat pemantauan bawaan Istio, metrik khusus, dan OpenTracing melalui Prometheus dan Grafana.
Pos

Perutean sederhana di Istio
60 menit
Pelajari cara mengelola perutean di Istio menggunakan aturan sederhana.
Pos

Aturan perutean lanjutan
60 menit
Mari kita lihat perutean cerdas, kontrol akses, penyeimbangan beban, dan pembatasan kecepatan Istio.
Pos

Blok 3 – pengguna tingkat lanjut

Injeksi Kesalahan di Istio
60 menit
Kami mempelajari skenario penanganan kegagalan dalam aplikasi terdistribusi, menciptakan kesalahan HTTP dan penundaan jaringan, dan belajar menggunakan rekayasa kekacauan untuk memulihkan lingkungan.
Pos

Pemutus Arus di Istio
30 menit
Kami memasang Siege untuk situs pengujian stres dan mempelajari cara memastikan toleransi kesalahan backend menggunakan pemutaran ulang, pemutus sirkuit, dan ejeksi kumpulan.
Pos

Jalan Keluar dan Istio
10 menit
Kami menggunakan rute Egress untuk membuat aturan interaksi layanan internal dengan API dan layanan eksternal.
Pos

Istio dan Kiali
15 menit
Pelajari cara menggunakan Kiali untuk mendapatkan gambaran umum tentang mesh layanan dan menjelajahi aliran permintaan dan data.
Pos

Saling TLS di Istio
15 menit
Kami membuat Istio Gateway dan VirtualService, kemudian kami mempelajari mutual TLS (mTLS) dan pengaturannya secara detail.
Pos

Blok 3.1 - Penyelaman Mendalam: Istio Service Mesh untuk Layanan Mikro

Serangkaian postingan di Istio Service Mesh
Tentang apa buku itu:

  • Apa itu jaring layanan?
  • Sistem Istio dan perannya dalam arsitektur layanan mikro.
  • Menggunakan Istio untuk menyelesaikan masalah berikut:
    • Toleransi kesalahan;
    • Rute;
    • Pengujian kekacauan;
    • Keamanan;
    • Pengumpulan telemetri menggunakan jejak, metrik dan Grafana.

Untuk mengunduh buku

Serangkaian artikel tentang jerat layanan dan Istio

Coba sendiri

Rangkaian postingan ini tidak dimaksudkan untuk memberikan gambaran mendalam tentang dunia Istio. Kami hanya ingin memperkenalkan Anda pada konsep tersebut dan mungkin menginspirasi Anda untuk mencoba Istio sendiri. Ini sepenuhnya gratis untuk dilakukan, dan Red Hat menyediakan semua alat yang Anda perlukan untuk memulai dengan OpenShift, Kubernetes, container Linux, dan Istio, termasuk: Platform Kontainer OpenShift Pengembang Red Hat, panduan kami ke Istio dan sumber daya lainnya di kami situs mikro di Service Mesh. Jangan tunda lagi, mulailah hari ini!

Aturan perutean Istio: mengarahkan permintaan layanan ke tempat yang dituju

Pergeseran Terbuka ΠΈ Kubernetes melakukan pekerjaan yang sangat baik dalam menangani layanan mikro diarahkan ke pod yang diperlukan. Inilah salah satu alasan keberadaan Kubernetes - perutean dan penyeimbangan beban. Namun bagaimana jika Anda memerlukan perutean yang lebih halus dan canggih? Misalnya, untuk menggunakan dua versi layanan mikro secara bersamaan. Bagaimana Aturan Rute Istio dapat membantu di sini?

Aturan routing adalah aturan yang sebenarnya menentukan pilihan rute. Terlepas dari tingkat kompleksitas sistem, prinsip operasi umum dari aturan ini tetap sederhana: permintaan dirutekan berdasarkan parameter tertentu dan nilai header HTTP.
Mari kita lihat contohnya:

Default Kubernetes: sepele "50/50"

Dalam contoh kami, kami akan menunjukkan cara menggunakan dua versi layanan mikro secara bersamaan di OpenShift, sebut saja v1 dan v2. Setiap versi berjalan di pod Kubernetesnya sendiri, dan secara default ia menjalankan perutean round robin yang seimbang. Setiap pod menerima bagian permintaannya berdasarkan jumlah instans layanan mikro, dengan kata lain, replika. Istio memungkinkan Anda mengubah saldo ini secara manual.

Katakanlah kita menerapkan dua versi layanan rekomendasi di OpenShift, rekomendasi-v1 dan rekomendasi-v2.
Pada Gambar. Gambar 1 menunjukkan bahwa ketika setiap layanan direpresentasikan dalam satu instance, permintaan bergantian secara merata di antara layanan tersebut: 1-2-1-2-... Beginilah cara perutean Kubernetes bekerja secara default:

Serangkaian postingan di Istio Service Mesh

Distribusi tertimbang antar versi

Pada Gambar. Gambar 2 menunjukkan apa yang terjadi jika Anda menambah jumlah replika layanan v2 dari satu menjadi dua (hal ini dilakukan dengan perintah oc scale β€”replicas=2 deployment/recommendation-v2). Seperti yang Anda lihat, permintaan antara v1 dan v2 kini dibagi dalam rasio satu banding tiga: 1-2-2-1-2-2-…:

Serangkaian postingan di Istio Service Mesh

Abaikan versi menggunakan Istio

Istio memudahkan untuk mengubah distribusi permintaan sesuai kebutuhan. Misalnya, kirim semua lalu lintas hanya ke rekomendasi-v1 menggunakan file Istio yaml berikut:

Serangkaian postingan di Istio Service Mesh

Di sini Anda perlu memperhatikan hal ini: pod dipilih sesuai dengan labelnya. Contoh kita menggunakan label v1. Parameter β€œweight: 100” berarti 100% lalu lintas akan dialihkan ke semua pod layanan yang memiliki label v1.

Distribusi arahan antar versi (Canary Deployment)

Selanjutnya, dengan menggunakan parameter bobot, Anda dapat mengarahkan lalu lintas ke kedua pod, dengan mengabaikan jumlah instance layanan mikro yang berjalan di masing-masing pod. Misalnya, di sini kami mengarahkan 90% lalu lintas ke v1 dan 10% ke v2:

Serangkaian postingan di Istio Service Mesh

Perutean terpisah untuk pengguna seluler

Sebagai kesimpulan, kami akan menunjukkan cara memaksa lalu lintas pengguna seluler dialihkan ke layanan v2, dan semua orang ke layanan v1. Untuk melakukan hal ini, kami menggunakan ekspresi reguler untuk menganalisis nilai agen-pengguna di header permintaan:

Serangkaian postingan di Istio Service Mesh

Sekarang giliranmu

Contoh ekspresi reguler untuk penguraian header akan memotivasi Anda untuk menemukan kegunaan Anda sendiri atas aturan perutean Istio. Selain itu, kemungkinan di sini cukup luas, karena nilai header dapat dibentuk dalam kode sumber aplikasi.

Dan ingat itu Ops, bukan Dev

Segala sesuatu yang kami tunjukkan pada contoh di atas dilakukan tanpa perubahan sedikit pun pada kode sumber, kecuali ketika diperlukan untuk membuat header permintaan khusus. Istio akan berguna baik bagi pengembang, yang, misalnya, akan dapat menggunakannya pada tahap pengujian, dan bagi spesialis dalam pengoperasian sistem TI, yang akan sangat membantu dalam produksi.

Jadi mari kita ulangi motif utama rangkaian postingan ini: Anda tidak perlu mengubah apa pun di kode Anda. Tidak perlu membuat image baru atau meluncurkan container baru. Semua ini diimplementasikan di luar kode.

Gunakan imajinasimu

Bayangkan saja kemungkinan analisis header menggunakan ekspresi reguler. Ingin mengarahkan pelanggan terbesar Anda ke versi khusus Anda layanan mikro? Mudah! Butuh versi terpisah untuk browser Chrome? Tidak masalah! Anda dapat mengarahkan lalu lintas berdasarkan hampir semua karakteristik.

Coba sendiri

Membaca tentang Istio, Kubernetes, dan OpenShift adalah satu hal, tetapi mengapa tidak menyentuh semuanya sendiri? Tim Program Pengembang Red Hat telah menyiapkan panduan terperinci (dalam bahasa Inggris) yang akan membantu Anda menguasai teknologi ini secepat mungkin. Manual ini juga 100% open source, sehingga diposting di domain publik. File ini berfungsi di macOS, Linux, dan Windows, dan kode sumber tersedia dalam versi Java dan node.js (versi dalam bahasa lain segera hadir). Buka saja repositori git yang sesuai di browser Anda Demo Pengembang Red Hat.

Di postingan berikutnya: kami menyelesaikan masalah dengan indah

Hari ini Anda melihat apa yang dapat dilakukan oleh aturan perutean Istio. Sekarang bayangkan hal yang sama, tetapi hanya berkaitan dengan penanganan kesalahan. Inilah yang akan kita bicarakan di posting berikutnya.

Sumber: www.habr.com

Tambah komentar