Çok sayıda mikroservis veya yoğun yönlendirme kuralı içeren uygulamalarda tek bir VirtualService büyüyebilir ve bakımı zorlaşabilir. Bu sorunu çözmek için Service Mesh (ASM), yönlendirme kurallarını birden çok VirtualService kaynağı arasında bölmenize olanak tanıyan bir delegate mekanizması sunar. Bu yaklaşım, yönlendirme yapılandırmalarında değişiklik yaparken ortaya çıkan riskleri azaltır. Bu konuda, Bookinfo uygulaması örnek alınarak birden çok VirtualService kullanılarak uygulama için yönlendirme kurallarının nasıl tanımlanacağı gösterilmektedir.
Ön koşullar
Bir küme, bir ASM örneğine eklenmiştir ve ASM örneği sürümü 1.8.6.4 veya üzeridir.
Bir giriş ağ geçidi dağıtılmıştır. Daha fazla bilgi için bkz. Giriş ağ geçidi oluşturma.
ASM örneği ile ilişkili kümede bir uygulama dağıtılmıştır. Daha fazla bilgi için bkz. ASM örneğinde uygulama dağıtma.
Arka plan bilgileri
Service Mesh (ASM) ortamında, trafiğin hizmetlere nasıl yönlendirileceğini kontrol eden yönlendirme kurallarını tanımlamak için VirtualService kullanırsınız. Pratikte, tek ve büyük bir VirtualService'in yönetimi zor olabilir. Her yönlendirme güncellemesi bu VirtualService üzerinde değişiklik yapılmasını gerektirir; bu durum genellikle güncelleme çakışmalarına, yinelenen yapılandırmalara ve sıkı bağımlılıklara yol açar. Kurallardaki herhangi bir yanlış yapılandırma, veri düzlemi kümesindeki hizmetleri etkileyebilir ve hatta tüm hizmet erişimini kesintiye uğratabilir.
ASM, yönlendirme kurallarının birbirinden ayrıştırılmasını sağlamak amacıyla VirtualService kaynağını bir delegate mekanizmasıyla genişletir. Bir VirtualService'i birincil bir VirtualService ve bir veya daha fazla ikincil VirtualService olarak bölebilirsiniz. Birincil VirtualService genel kuralları tanımlarken, ikincil VirtualService'ler uygulamanın belirli bölümleri için ayrıntılı yönlendirme kurallarını belirler. Birincil VirtualService genellikle merkezi bir yönetici tarafından yönetilir; ikincil VirtualService'ler ise ilgili hizmet sahipleri tarafından yönetilir. Bu sorumluluk ayrımı, yönlendirme kurallarında değişiklik yapılırken oluşabilecek riskleri önemli ölçüde azaltır ve bağımsız hizmet dağıtımları ile güncellemelerin verimliliğini artırır.
Notlar
ASM iç içe geçmiş Delegate yapılarını desteklemez. Delegate parametresi yalnızca birincil bir VirtualService içinde ayarlanabilir. Örneğin, hem birincil hem de ikincil bir VirtualService'te Delegate parametresi ayarlanırsa, ne birincil ne de ikincil VirtualService etkin hale gelir.
İkincil bir VirtualService içindeki
HTTPMatchRequestdeğeri, birincil VirtualService'teki karşılık gelen eşleşme koşulunun bir alt kümesi olmalıdır. Aksi takdirde bir çakışma oluşur veHTTPRouteetkin olmaz.Birincil VirtualService'in HTTP rotasındaki
routeveredirectalanları boş olduğunda yalnızcadelegatealanını belirtebilirsiniz. İkincil bir VirtualService'inhostsalanı boş olmalıdır. İkincil VirtualService'ten gelen yönlendirme kuralları, birincil VirtualService'teki kurallarla birleştirilir.
Adım 1: Gateway yapılandırma
ASM konsolu üzerinde oturum açın.
Sol gezinme bölmesinde seçeneklerini seçin.
Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adına tıklayın veya Actions sütunundaki Manage öğesine tıklayın.
ASM örneği ayrıntılar sayfasında sol gezinme bölmesinden seçeneğine gidin. Açılan sayfada Create from YAML düğmesine tıklayın.
-
Bir Namespaces seçin, aşağıdaki YAML içeriğini düzenleyiciye yapıştırın ve Create düğmesine tıklayın. Bu konuda örnek olarak
defaultad alanı kullanılmaktadır.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: - "*"Bookinfo hizmetinin 80 numaralı bağlantı noktasından gelen veya giden HTTP bağlantılarını alabilmesi için
numberdeğerini80olarak ayarlayın.
Adım 2: Birincil VirtualService yapılandırma
ASM konsolu üzerinde oturum açın.
Sol gezinme bölmesinde seçeneklerini seçin.
Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adına tıklayın veya Actions sütunundaki Manage öğesine tıklayın.
ASM örneği ayrıntılar sayfasında sol gezinme bölmesinden seçeneğine gidin. Açılan sayfada Create from YAML düğmesine tıklayın.
-
Bir Namespaces seçin, aşağıdaki YAML içeriğini düzenleyiciye yapıştırın ve Create düğmesine tıklayın. Bu konuda örnek olarak
defaultad alanı kullanılmaktadır.Aşağıdaki yapılandırma, vs-1 ve vs-2 için
delegatetanımlar. Burada vs-1, Bookinfo hizmetine erişmek için isteklerin/logiçermesini gerektirir; vs-2 ise Bookinfo hizmetine erişmek için isteklerin/içermesini gerektirir.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: /delegatealanındaki parametreler:name: Yetki devrinin adı.
namespace: Yetki devrinin ad alanı.
Adım 3: Alt VirtualService yapılandırma
ASM konsolu üzerinde oturum açın.
Sol gezinme bölmesinde seçeneklerini seçin.
Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adına tıklayın veya Actions sütunundaki Manage öğesine tıklayın.
ASM örneği ayrıntılar sayfasında sol gezinme bölmesinden seçeneğine gidin. Açılan sayfada Create from YAML düğmesine tıklayın.
-
Bir Namespaces seçin, aşağıdaki içeriği düzenleyiciye yapıştırın ve Create düğmesine tıklayın.
Bu konuda örnek olarak
ns1ad alanı kullanılmaktadır. Ad alanı oluşturma hakkında daha fazla bilgi için bkz. Genel ad alanlarını yönetme.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: 9080metadata: delegate parametresine bağlanmak için birincil VirtualService'in delegate parametresiyle tutarlı olmalıdır. Bu örnekte meta veriler, vs-1'in delegate parametresiyle tutarlıdır; bu da vs-1'in delegate parametresine bağlandığı anlamına gelir.
match: İstekler için filtreleme koşullarını belirtir. Bu örnekte
urideğeriexact: /loginveexact: /logoutolarak ayarlanmıştır. Bu sayede Bookinfo hizmetinde oturum açıp çıkabilirsiniz.
-
Yine
ns1Namespaces seçin, aşağıdaki YAML içeriğini düzenleyiciye yapıştırın ve Create düğmesine tıklayın.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: 9080metadata: Değer, birincil VirtualService'in delegate parametresiyle tutarlı olmalıdır. Bu parametre delegate parametresine bağlamak için kullanılır. Bu örnekte değer, vs-2'nin delegate parametresiyle tutarlıdır; yani vs-2'nin delegate parametresine bağlıdır.
match: Bir istek için filtreleme koşullarını belirtir. Bu örnekte istek /productpage, /static veya /api/v1/products içermelidir.
Sonuçları doğrulama
-
Web tarayıcınızda http://<giriş ağ geçidi IP adresi>/productpage adresine gidin.
Aşağıdaki sayfa görüntülenir. Bu durum,
/productpageparametresini içeren Bookinfo hizmetine yönelik isteğin başarılı olduğunu ve vs-2 için VirtualService'in başarıyla yapılandırıldığını gösterir. ASM ağ geçidi adresini elde etme hakkında bilgi için bkz. Giriş ağ geçidi IP adresini alma. Sayfa BookInfo Sample uygulamasını başarıyla yükler ve The Comedy of Errors adlı kitabın ürün sayfasını görüntüler. Sol taraftaki Book Details bölümünde Type, Pages, Publisher, Language ve ISBN gibi alanlar listelenir. Sağ taraftaki Book Reviews bölümünde ise birden çok kullanıcı yorumu ve yıldız derecelendirmesi görüntülenir. Bu durum, hizmet ağı uygulamasının ASM ağ geçidi üzerinden erişilebilir olduğunu doğrular. -
Sayfanın sağ üst köşesindeki Sign in öğesine tıklayın. Açılan iletişim kutusunda Bookinfo hizmetinde oturum açmak için bir kullanıcı adı ve parola girin.
Sayfa oturum açılmış duruma güncellenir. Bu durum,
vs-1VirtualService'in doğru yapılandırıldığını doğrular. Oturum açtıktan sonra sağ üst köşede kullanıcı adınız (örneğinjason) ve bir sign out bağlantısı görünür; bu da başarılı bir şekilde oturum açıldığını gösterir.