Ke Istio dan seterusnya: Antaramuka Mesh Perkhidmatan Azure

Pengembangan aplikasi moden dan cloud pertama, sekurang-kurangnya pada Azure, hampir bergantung kepada Kubernetes. Teknologi seperti Virtual Kubelets, AKS (Azure Kubernetes Service), dan Azure Service Fabric Mesh adalah kunci untuk membina aplikasi yang diedarkan berskala di Azure, menggunakan wadah untuk menyebarkan dan mengurus perkhidmatan mikro.

Melihat alat Kubernetes Azure, jelas bahawa Microsoft melakukan banyak pekerjaan di dalam dan di sekitar Cloud Native Computing Foundation, mengerjakan semua aspek kerangka sumber terbuka. Kita tidak boleh terkejut; Microsoft mengupah salah seorang pengasas projek Kubernetes dan kemudian memperoleh Deis, vendor yang penting. Pasukan Deis berada di belakang salah satu sumbangan Azure terbaru untuk ekosistem Kubernetes, Interface Mesh Perkhidmatan (SMI).

Memperkenalkan jaringan perkhidmatan

Mungkin lebih baik untuk menerangkan terlebih dahulu apa itu jala perkhidmatan dan mengapa penting bagi mana-mana aplikasi berasaskan Kubernetes.

Senibina IT moden adalah mengenai abstraksi. Dengan perkhidmatan cloud, kita tidak perlu lagi memikirkan perkakasan yang mendasari. Sekiranya kita menggunakan IaaS kita menentukan mesin maya untuk menghoskan kod kita. Dengan PaaS kami semakin jauh dari perkakasan, menggunakan perkhidmatan dan API yang kami pilih, memilih tahap prestasi yang sesuai untuk aplikasi dan anggaran kami. Dengan seni bina berasaskan kontena seperti Kubernetes, kita berada di suatu tempat di antara keduanya: menggunakan perkhidmatan seperti AKS kita dapat menentukan mesin maya yang mendasari, yang kemudian menjadi tuan rumah pod kontena kita dan skala dengan perubahan dalam komputasi dan memori (dan sekarang dengan KEDA (penskalaan automatik berdasarkan peristiwa berdasarkan Kubernetes), setelah menerima acara).

Itu hanya satu aspek pengabstrakan. Perkhidmatan mikro Kubernetes, pada dasarnya, tidak bernegara; mereka menggunakan storan luaran dan berada di atas sama ada rangkaian fizikal atau maya. Ini adalah aspek rangkaian menjalankan Kubernetes yang mungkin paling rumit: Apabila perkhidmatan diperkecil dan diperkecil, anda perlu mengubahsuai rangkaian anda agar sesuai dengan perubahan pada aplikasi anda. Tetapi bagaimana anda memastikan perkhidmatan tetap tersambung apabila bahagian depan dan hujung aplikasi mungkin berskala dengan kadar yang berbeza?

Di sinilah jaringan perkhidmatan masuk. Ini adalah lapisan abstraksi baru, yang menghilangkan kod anda dari rangkaian yang mendasarinya dengan memanfaatkan keupayaan rangkaian yang ditentukan perisian moden. Dengan bertindak sebagai sekumpulan proksi rangkaian yang disebarkan dengan kod anda, jaring servis menguruskan komunikasi servis ke perkhidmatan tanpa kod anda memerlukan kesedaran mengenai rangkaian yang mendasari. Anda boleh memikirkan jaringan perkhidmatan sebagai pesawat kawalan automatik untuk rangkaian aplikasi anda, menguruskan bidang kawalan yang mendasari kerana Kubernetes menimbang kod anda ke atas dan ke bawah.

Rangkaian yang ditentukan perisian untuk perkhidmatan mikro

Mungkin dianggap sebagai cara terbaik untuk mengimplementasikan pengimbangan beban yang cerdas, sadar latensi, berskala dengan penemuan perkhidmatan, jaringan perkhidmatan pada dasarnya adalah penghala yang diedarkan dengan peraturan perutean dinamik yang dikendalikan sebagai sebahagian dari penerapan Kubernetes. Anda boleh menentukan peraturan tambahan; sebagai contoh, memisahkan sistem pengeluaran dan ujian, atau menangani penyebaran pelepasan baru dan perubahan antara versi kontena. Setiap pod dalam aplikasi mempunyai instance mesh perkhidmatan yang berjalan sebagai sidecar, dengan penemuan perkhidmatan dan elemen bernegara lain yang berjalan di luar perkhidmatan anda.

Dengan jaringan servis, anda memasukkan kecerdasan ke lapisan rangkaian baru, jadi anda tidak perlu memasukkannya ke dalam perkhidmatan mikro anda. Perlu menyulitkan sambungan? Itu tugas untuk jaringan perkhidmatan anda. Perlu memberi kebenaran kepada pelanggan? Tugas lain untuk jaringan perkhidmatan.

Terlalu banyak jerat

Menggabungkan penyebaran Kubernetes dengan jaring servis masuk akal. Namun ada satu lagi masalah besar: yang mana yang anda gunakan? Utusan? Istio? Linkerd? Aspen Mesh? Sekiranya anda memilih satu, apa yang menghalang pasukan pembangunan di bahagian lain perniagaan anda daripada memilih yang lain? Lalu apa yang berlaku sekiranya syarikat anda memutuskan untuk menyeragamkan platform tertentu?

Itulah masalah yang akan diselesaikan Microsoft dengan Interface Mesh Perkhidmatan. Daripada setiap jaringan perkhidmatan yang mempunyai rangkaian API sendiri, SMI adalah cara untuk menerapkan API biasa yang berfungsi di pelbagai rangkaian perkhidmatan, menguruskan rangkaian pintar baru itu. Daripada mengunci kod anda ke jaringan perkhidmatan tertentu dan APInya, anda boleh menulis kod yang menangani kes penggunaan yang paling biasa melalui API biasa. Sekiranya anda perlu menukar jaringan perkhidmatan — jika anda menukar penyedia atau anda mendapati yang berfungsi lebih baik — tidak perlu mengubah kod anda, selagi jaringan perkhidmatan menerapkan IKS. Yang perlu anda lakukan hanyalah menukar barisan servis perkhidmatan anda dan menyebarkan semula kod anda.

SMI: API mesh perkhidmatan biasa

Bekerja dengan syarikat Kubernetes-ekosistem seperti Hashicorp dan Buoyant, Microsoft telah menentukan ciri utama untuk IKS yang menyokong permintaan umum dari pelanggannya. Dalam siaran awal, ia telah memfokuskan pada tiga bidang: kebijakan lalu lintas, telemetri lalu lintas, dan pengurusan lalu lintas. Ketiga-tiga bidang ini dikendalikan oleh kebanyakan jaringan perkhidmatan, dan tujuannya adalah untuk menjadikannya spesifikasi yang mudah dilaksanakan tanpa mengubah aplikasi yang mendasari.

Dengan menjadikan SMI sebagai satu set API standard, tidak ada yang dapat menghentikan vendor jaringan perkhidmatan daripada terus menawarkan API mereka sendiri atau ciri tambahan di luar yang ditentukan. Sebagai alternatif mereka tidak perlu membuat perubahan; pihak ketiga dapat membina lapisan terjemahan yang berada di antara SMI API dan API perkhidmatan proprietari. Anda juga tidak memerlukan versi baru Kubernetes, kerana SMI API dilaksanakan sebagai pelayan API pelanjutan dan definisi sumber tersuai. Anda boleh meneruskannya dan memasangnya dalam kluster mana pun, menggunakan alat pengurusan yang ada. Ini semestinya menjadikan SMI mudah bagi Azure dan perkhidmatan Kubernetes yang dihoskan oleh awan lain untuk menjadikannya perkhidmatan Kubernetes terurus yang ada.

Sama ada anda ingin menggunakan Linkerd atau Aspen Mesh atau NSX Service Mesh VMware, dengan SMI anda akan dapat memilih yang anda sukai, meningkatkan daya kod kod dan mengelakkan penguncian untuk perkhidmatan cloud tertentu. Kemudian ada peluang untuk menukar jaringan perkhidmatan tanpa mempengaruhi kod anda. Sekiranya jaringan perkhidmatan baru menawarkan prestasi yang lebih baik, yang perlu anda lakukan ialah menukar saluran paip membina anda untuk menggunakan jaringan baru dan kemudian menggunakan aplikasi yang dikemas kini.

Sangat menarik untuk melihat Microsoft memimpin projek seperti ini, bekerjasama dengan pelbagai bahagian komuniti Kubernetes. Dengan mengambil pendekatan yang secara jelas tidak tertumpu pada membangun jaringan perkhidmatan, Azure dapat menawarkan jaringan perkhidmatan yang berbeza sebagai bagian dari konfigurasi AKS, membiarkan anda memilih alat yang anda inginkan tanpa perlu mengubah kod apa pun.