Pelancaran Gelap di Istio: Perkhidmatan Rahsia

"Bahaya ialah nama tengah saya," Austin Powers, seorang lelaki misteri antarabangsa, pernah berkata. Tetapi apa yang dipandang tinggi oleh ejen super dan perkhidmatan perisikan sama sekali tidak sesuai untuk perkhidmatan komputer, di mana kebosanan adalah lebih baik daripada bahaya.

Pelancaran Gelap di Istio: Perkhidmatan Rahsia

Dan Istio, bersama OpenShift dan Kubernetes, menjadikan penggunaan perkhidmatan mikro benar-benar membosankan dan boleh diramal - dan itu bagus. Kami akan membincangkan perkara ini dan banyak lagi dalam siaran keempat dan terakhir dalam siri Istio.

Bila bosan betul

Dalam kes kami, kebosanan hanya berlaku pada fasa terakhir, apabila yang tinggal hanyalah duduk dan menonton prosesnya. Tetapi untuk ini anda perlu mengkonfigurasi segala-galanya terlebih dahulu, dan banyak perkara menarik menanti anda di sini.

Apabila menggunakan versi baharu perisian anda, adalah wajar mempertimbangkan semua pilihan untuk meminimumkan risiko. Berjalan secara selari ialah cara yang sangat berkuasa dan terbukti untuk menguji, dan Istio membenarkan anda menggunakan "perkhidmatan rahsia" (versi tersembunyi perkhidmatan mikro anda) untuk melakukan ini tanpa mengganggu sistem pengeluaran. Malah terdapat istilah khas untuk ini - "Pelancaran Gelap", yang seterusnya diaktifkan oleh fungsi dengan nama pengintip yang sama "pencerminan lalu lintas".

Sila ambil perhatian bahawa ayat pertama perenggan sebelumnya menggunakan istilah "deploy" dan bukannya "release". Anda seharusnya benar-benar dapat menggunakan—dan, sudah tentu, menggunakan—perkhidmatan mikro anda sekerap yang anda mahu. Perkhidmatan ini mesti boleh menerima dan memproses trafik, menghasilkan hasil, dan juga menulis ke log dan memantau. Tetapi pada masa yang sama, perkhidmatan ini sendiri tidak semestinya perlu dikeluarkan ke dalam pengeluaran. Menggunakan dan mengeluarkan perisian tidak selalunya perkara yang sama. Anda boleh menggunakan bila-bila masa anda mahu, tetapi lepaskan hanya apabila anda sudah bersedia.

Mengadakan kebosanan adalah menarik

Lihat peraturan penghalaan Istio berikut, yang menyalurkan semua permintaan HTTP ke pengesyoran perkhidmatan mikro v1 (semua contoh diambil daripada Istio Tutorial GitHub repo), sambil pada masa yang sama mencerminkannya kepada cadangan v2 microservice:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Perhatikan label mirror: di bahagian bawah skrin - inilah yang menetapkan pencerminan trafik. Ya, ia semudah itu!

Hasil daripada peraturan ini ialah sistem pengeluaran anda (v1) akan terus memproses permintaan masuk, tetapi permintaan itu sendiri akan dicerminkan secara tak segerak kepada v2, iaitu pendua lengkap mereka akan pergi ke sana. Dengan cara ini, anda boleh menguji v2 dalam keadaan sebenar - pada data dan trafik sebenar - tanpa campur tangan dalam apa-apa cara dengan pengendalian sistem pengeluaran. Adakah ini menjadikan penganjuran ujian membosankan? Ya sememangnya. Tetapi ia dilakukan dengan cara yang menarik.

Jom tambah drama

Sila ambil perhatian bahawa dalam kod v2 adalah perlu untuk menyediakan situasi di mana permintaan masuk boleh membawa kepada perubahan data. Permintaan itu sendiri dicerminkan dengan mudah dan telus, tetapi pilihan kaedah pemprosesan dalam ujian terpulang kepada anda - dan ini agak membimbangkan.

Mari kita ulangi satu perkara penting

Pelancaran rahsia dengan pencerminan trafik (Pelancaran Gelap/Pencerminan Permintaan) boleh dilakukan tanpa menjejaskan kod dalam apa jua cara.

Makanan untuk difikirkan

Bagaimana jika tempat di mana permintaan dicerminkan menghantar sebahagian daripadanya bukan ke v1, tetapi ke v2? Contohnya, satu peratus daripada semua permintaan atau hanya permintaan daripada kumpulan pengguna tertentu. Dan kemudian, sudah melihat cara v2 berfungsi, pindahkan semua permintaan secara beransur-ansur ke versi baharu. Atau sebaliknya, kembalikan semuanya kepada v1 jika ada masalah dengan v2. Saya rasa ia dipanggil Canary Deployment. kembali kepada perlombongan, dan jika ia berasal dari Rusia, ia mungkin mengandungi rujukan kepada kucing), dan sekarang kita akan melihat perkara ini dengan lebih terperinci.

Deployment Canary di Istio: memudahkan pentauliahan

Berhati-hati dan beransur-ansur

Intipati model penggunaan Canary Deployment adalah sangat mudah: apabila anda melancarkan versi baharu perisian anda (dalam kes kami, perkhidmatan mikro), anda mula-mula memberikan akses kepadanya kepada sekumpulan kecil pengguna. Jika semuanya berjalan lancar, anda perlahan-lahan meningkatkan kumpulan ini sehingga versi baharu mula bertindak, atau - jika tidak - akhirnya memindahkan semua pengguna kepadanya. Dengan bertimbang rasa dan beransur-ansur memperkenalkan versi baharu dan menukar pengguna kepadanya secara terkawal, anda boleh mengurangkan risiko dan memaksimumkan maklum balas.

Sudah tentu, Istio memudahkan Penerapan Canary dengan menawarkan beberapa pilihan yang baik untuk penghalaan permintaan pintar. Dan ya, semua ini boleh dilakukan tanpa menyentuh kod sumber anda dalam apa jua cara.

Menapis penyemak imbas

Salah satu kriteria penghalaan yang paling mudah ialah pengalihan semula berasaskan penyemak imbas. Katakan anda hanya mahu permintaan daripada penyemak imbas Safari untuk pergi ke v2. Begini caranya:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Mari gunakan peraturan penghalaan ini dan kemudian gunakan arahan itu curl Kami akan mensimulasikan permintaan sebenar kepada perkhidmatan mikro dalam satu gelung. Seperti yang anda lihat dalam tangkapan skrin, mereka semua pergi ke v1:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Di manakah trafik pada v2? Oleh kerana dalam contoh kami semua permintaan hanya datang dari baris arahan kami sendiri, ia tidak wujud. Tetapi perhatikan garis bawah dalam skrin di atas: ini adalah tindak balas kepada fakta bahawa kami melaksanakan permintaan daripada penyemak imbas Safari, yang seterusnya menghasilkan ini:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia

Kuasa tanpa had

Kami telah menulis bahawa ungkapan biasa menyediakan keupayaan yang sangat berkuasa untuk permintaan penghalaan. Lihat contoh berikut (kami fikir anda akan memahami fungsinya):

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Sekarang anda mungkin mempunyai idea tentang apa yang boleh dilakukan oleh ungkapan biasa.

Bertindak Bijak

Penghalaan pintar, khususnya memproses pengepala paket menggunakan ungkapan biasa, membolehkan anda mengemudi trafik mengikut cara yang anda mahukan. Dan ini sangat memudahkan pelaksanaan kod baharu - ia mudah, ia tidak memerlukan perubahan kod itu sendiri, dan jika perlu, semuanya boleh dikembalikan dengan cepat seperti sedia ada.

Berminat?

Adakah anda tidak sabar-sabar untuk mencuba Istio, Kubernetes dan OpenShift pada komputer anda? Pasukan Pasukan Pembangun Red Hat disediakan yang cemerlang buku teks mengenai topik ini dan menjadikan semua fail yang disertakan tersedia secara terbuka. Jadi teruskan dan jangan menafikan diri anda apa-apa.

Istio Egress: keluar melalui kedai cenderamata

Dengan menggunakan Istio bersama Red Hat OpenShift dan Kubernetes, anda boleh menjadikan hidup anda lebih mudah dengan perkhidmatan mikro. Jaringan perkhidmatan Istio tersembunyi di dalam pod Kubernetes dan kod anda berjalan (kebanyakannya) secara berasingan. Prestasi, kemudahan perubahan, pengesanan, dsb. – semua ini mudah digunakan berkat penggunaan bekas kereta sampingan. Tetapi bagaimana jika perkhidmatan mikro anda perlu berkomunikasi dengan perkhidmatan lain yang terletak di luar sistem OpenShift-Kubernetes anda?

Di sinilah Istio Egress datang untuk menyelamatkan. Secara ringkasnya, ia hanya membenarkan anda mengakses sumber (baca: “perkhidmatan”) yang bukan sebahagian daripada sistem pod Kubernetes anda. Jika anda tidak melakukan konfigurasi tambahan, maka dalam persekitaran Istio Egress lalu lintas hanya dihalakan dalam kelompok pod dan antara kelompok tersebut berdasarkan jadual IP dalaman. Dan pupation sedemikian berfungsi dengan baik selagi anda tidak memerlukan akses kepada perkhidmatan dari luar.

Egress membolehkan anda memintas jadual IP di atas, sama ada berdasarkan peraturan Egress atau pada julat alamat IP.

Katakan kita mempunyai program Java yang membuat permintaan GET ke httpbin.org/headers.

(httpbin.org hanyalah sumber yang mudah untuk menguji permintaan perkhidmatan keluar.)

Jika anda masuk pada baris arahan curl http://httpbin.org/headers, kita akan melihat perkara berikut:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Atau anda boleh membuka alamat yang sama dalam penyemak imbas:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Seperti yang anda lihat, perkhidmatan yang terletak di sana hanya mengembalikan pengepala yang dihantar kepadanya.

Kami menggantikan import secara langsung

Sekarang mari kita ambil kod Java perkhidmatan ini, di luar sistem kami, dan jalankannya sendiri, di mana, ingat, Istio dipasang. (Anda boleh melakukannya sendiri dengan menghubungi tutorial Istio kami.) Setelah membina imej yang sesuai dan melancarkannya pada platform OpenShift, kami akan memanggil perkhidmatan ini dengan arahan curl egresshttpbin-istioegress.$(minishift ip).nip.io, selepas itu kita akan melihat ini pada skrin:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Aduh, apa yang berlaku? Semuanya hanya berfungsi. Apakah maksud Tidak Ditemui? Kami hanya melakukannya untuknya curl.

Memanjangkan jadual IP ke seluruh Internet

Istio harus dipersalahkan (atau berterima kasih) untuk ini. Lagipun, Istio hanyalah bekas kereta sampingan yang bertanggungjawab untuk pengesanan dan penghalaan (dan banyak perkara lain yang kami bincangkan sebelum ini). Atas sebab ini, jadual IP hanya mengetahui perkara yang ada di dalam sistem kluster anda. Dan httpbin.org terletak di luar dan oleh itu tidak boleh diakses. Dan di sinilah Istio Egress datang untuk menyelamatkan - tanpa sedikit pun perubahan pada kod sumber anda.

Peraturan Egress di bawah memaksa Istio mencari (jika perlu, kemudian di seluruh Internet) untuk perkhidmatan yang diperlukan, dalam kes ini, httpbin.org. Seperti yang anda lihat daripada fail ini (egress_httpbin.yml), fungsi di sini agak mudah:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Yang tinggal hanyalah menggunakan peraturan ini:

istioctl create -f egress_httpbin.yml -n istioegress

Anda boleh melihat peraturan Egress dengan arahan istioctl get egressrules:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia
Dan akhirnya, kami menjalankan arahan sekali lagi curl – dan kami melihat bahawa semuanya berfungsi:

Pelancaran Gelap di Istio: Perkhidmatan Rahsia

Kita berfikir secara terbuka

Seperti yang anda lihat, Istio membolehkan anda mengatur interaksi dengan dunia luar. Dalam erti kata lain, anda masih boleh mencipta perkhidmatan OpenShift dan mengurusnya melalui Kubernetes, mengekalkan segala-galanya dalam pod yang naik dan turun mengikut keperluan. Dan pada masa yang sama, anda boleh mengakses perkhidmatan luar persekitaran anda dengan selamat. Dan ya, kami mengulangi sekali lagi bahawa semua ini boleh dilakukan tanpa menyentuh kod anda dalam apa jua cara.

Ini adalah siaran terakhir dalam siri ini di Istio. Nantikan - terdapat banyak perkara menarik di hadapan!

Sumber: www.habr.com

Tambah komen