Untuk aplikasi dengan banyak layanan mikro atau aturan routing yang kompleks, satu VirtualService dapat menjadi besar dan sulit dipelihara. Untuk mengatasi hal ini, Service Mesh (ASM) menyediakan mekanisme delegate yang memungkinkan Anda membagi aturan routing ke beberapa resource VirtualService. Pendekatan ini mengurangi risiko yang terkait dengan perubahan konfigurasi routing. Topik ini menggunakan aplikasi Bookinfo sebagai contoh untuk menunjukkan cara mendefinisikan aturan routing untuk aplikasi tersebut dengan menggunakan beberapa VirtualService.
Prasyarat
-
Sebuah kluster telah ditambahkan ke instans ASM, dan instans ASM tersebut menggunakan versi 1.8.6.4 atau lebih baru.
Gerbang masuk (ingress gateway) telah diterapkan. Untuk informasi selengkapnya, lihat Create an ingress gateway.
-
Aplikasi telah diterapkan di kluster yang terkait dengan instans ASM. Untuk informasi selengkapnya, lihat Deploy an application in an ASM instance.
Informasi latar belakang
Di Service Mesh (ASM), Anda menggunakan VirtualService untuk mendefinisikan aturan routing yang mengontrol bagaimana traffic diarahkan ke layanan. Dalam praktiknya, memelihara satu VirtualService besar bisa sangat menantang. Setiap penyesuaian routing mengharuskan Anda memodifikasi VirtualService tersebut, yang sering menyebabkan konflik pembaruan, redundansi, dan ketergantungan erat dalam konfigurasi routing. Salah konfigurasi pada aturan apa pun dapat memengaruhi layanan di kluster bidang data dan bahkan mengganggu seluruh akses layanan.
ASM memperluas resource VirtualService dengan mekanisme delegate untuk memisahkan aturan routing. Anda dapat membagi satu VirtualService menjadi satu VirtualService utama (primary) dan satu atau beberapa VirtualService sekunder (secondary). VirtualService utama mendefinisikan aturan keseluruhan, sedangkan VirtualService sekunder mendefinisikan aturan routing rinci untuk bagian tertentu dari aplikasi. VirtualService utama biasanya dikelola oleh administrator pusat, sedangkan VirtualService sekunder dikelola oleh pemilik layanan masing-masing. Pemisahan tanggung jawab ini secara signifikan mengurangi risiko perubahan aturan routing dan meningkatkan efisiensi penerapan serta peningkatan layanan secara independen.
Catatan
-
ASM tidak mendukung Delegate bersarang. Parameter Delegate hanya dapat diatur di VirtualService utama. Misalnya, jika parameter Delegate diatur baik di VirtualService utama maupun di VirtualService sekunder, maka baik VirtualService utama maupun sekunder tidak akan berlaku.
-
HTTPMatchRequestdi VirtualService sekunder harus merupakan subset dari kondisi match yang sesuai di VirtualService utama. Jika tidak, terjadi konflik danHTTPRoutetidak akan berlaku. -
Anda hanya dapat menentukan field
delegateketika fieldroutedanredirectpada HTTP route VirtualService utama kosong. Fieldhostspada VirtualService sekunder harus kosong. Aturan routing dari VirtualService sekunder digabungkan dengan aturan dari VirtualService utama.
Langkah 1: Konfigurasi Gateway
-
Masuk ke Konsol ASM.
-
Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM tersebut atau klik Manage di kolom Actions.
-
Pada halaman detail instans ASM, pilih di panel navigasi sebelah kiri. Pada halaman yang muncul, klik Create from YAML.
-
Pilih Namespaces, tempel konten YAML berikut ke editor, lalu klik Create. Topik ini menggunakan namespace
defaultsebagai contoh.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"Atur
numberke80agar layanan Bookinfo dapat menerima koneksi HTTP masuk atau keluar pada Port 80.
Langkah 2: Konfigurasi VirtualService utama
-
Masuk ke Konsol ASM.
-
Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM tersebut atau klik Manage di kolom Actions.
-
Pada halaman detail instans ASM, pilih di panel navigasi sebelah kiri. Pada halaman yang muncul, klik Create from YAML.
-
Pilih Namespaces, tempel konten YAML berikut ke editor, lalu klik Create. Topik ini menggunakan namespace
defaultsebagai contoh.Berikut ini membuat
delegateuntuk vs-1 dan vs-2, di mana vs-1 mengharuskan permintaan berisi/loguntuk mengakses layanan Bookinfo, dan vs-2 mengharuskan permintaan berisi/untuk mengakses layanan Bookinfo.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: bookinfo namespace: default spec: gateways: - bookinfo-gateway hosts: - '*' http: - delegate: name: vs-1 namespace: ns1 match: - uri: prefix: /log - delegate: name: vs-2 namespace: ns1 match: - uri: prefix: /Parameter dalam field
delegate:-
name: Nama delegate.
-
namespace: Namespace delegate.
-
Langkah 3: Konfigurasi VirtualService anak
-
Masuk ke Konsol ASM.
-
Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM tersebut atau klik Manage di kolom Actions.
-
Pada halaman detail instans ASM, pilih di panel navigasi sebelah kiri. Pada halaman yang muncul, klik Create from YAML.
-
Pilih Namespaces, tempel konten berikut ke editor, lalu klik Create.
Topik ini menggunakan namespace
ns1sebagai contoh. Untuk informasi selengkapnya tentang cara membuat namespace, lihat Manage global namespaces.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: vs-1 namespace: ns1 spec: http: - match: - uri: exact: /login - uri: exact: /logout route: - destination: host: productpage.default.svc.cluster.local port: number: 9080-
metadata: Harus konsisten dengan parameter delegate dari VirtualService utama untuk mengikat parameter delegate. Dalam contoh ini, metadata konsisten dengan parameter delegate dari vs-1, yang mengikat parameter delegate dari vs-1.
-
match: Menentukan kondisi filter untuk permintaan. Dalam contoh ini,
uridiatur keexact: /logindanexact: /logout. Hal ini memungkinkan Anda masuk dan keluar dari layanan Bookinfo.
-
-
Sekali lagi, pilih
ns1Namespaces, tempel konten YAML berikut ke editor, lalu klik Create.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: vs-2 namespace: ns1 spec: http: - match: - uri: exact: /productpage - uri: prefix: /static - uri: prefix: /api/v1/products route: - destination: host: productpage.default.svc.cluster.local port: number: 9080-
metadata: Nilainya harus konsisten dengan parameter delegate dari VirtualService utama. Ini digunakan untuk mengikat parameter delegate. Dalam contoh ini, nilainya konsisten dengan parameter delegate dari vs-2, yang berarti diikat ke delegate dari vs-2.
-
match: Menentukan kondisi filter untuk permintaan. Dalam contoh ini, permintaan harus berisi /productpage, /static, atau /api/v1/products.
-
Verifikasi hasil
-
Buka browser web Anda dan akses http://<alamat IP ingress gateway>/productpage.
Halaman berikut ditampilkan. Hal ini menunjukkan bahwa permintaan ke layanan Bookinfo yang berisi parameter
/productpageberhasil, dan VirtualService untuk vs-2 telah dikonfigurasi dengan benar. Untuk informasi tentang cara mendapatkan alamat gateway ASM, lihat Obtain the ingress gateway IP address. Halaman berhasil memuat aplikasi BookInfo Sample dan menampilkan halaman produk buku The Comedy of Errors. Bagian Book Details di sebelah kiri mencantumkan bidang seperti Type, Pages, Publisher, Language, dan ISBN. Bagian Book Reviews di sebelah kanan menampilkan beberapa ulasan pengguna dan peringkat bintang. Hal ini mengonfirmasi bahwa aplikasi service mesh dapat diakses melalui gateway ASM. -
Klik Sign in di pojok kanan atas halaman. Pada kotak dialog yang muncul, masukkan username dan password untuk masuk ke layanan Bookinfo.
Halaman diperbarui ke status login. Hal ini mengonfirmasi bahwa VirtualService
vs-1telah dikonfigurasi dengan benar. Setelah Anda masuk, username Anda (misalnya,jason) dan tautan sign out muncul di pojok kanan atas, yang mengonfirmasi keberhasilan proses login.