Istio Service Mesh'te bir dizi gönderi

Istio Service Mesh'in Red Hat OpenShift ve Kubernetes ile birleştirildiğinde sahip olduğu pek çok özellikten bazılarını gösteren bir dizi gönderi başlatıyoruz.

Istio Service Mesh'te bir dizi gönderi

Birinci bölüm, bugün:

  • Kubernetes sepet konteynerleri konseptini açıklayalım ve bu yazı serisinin ana motifini formüle edelim: "kodunuzdaki hiçbir şeyi değiştirmenize gerek yok".
  • Istio'nun temel konusunu, yani yönlendirme kurallarını tanıtalım. Trafiği, hizmet kodunun dışındaki YAML dosyalarını kullanarak mikro hizmetlere yönlendirmenize izin veren kurallar olduğundan, diğer tüm Istio özellikleri bunların üzerine inşa edilmiştir. Ayrıca Kanarya Dağıtım dağıtım planını da düşünüyoruz. Yeni Yıl bonusu – Istio'da 10 interaktif ders


Yakında gelecek olan ikinci bölüm size şunu anlatacak:

  • Istio, Devre Kesici ile birlikte Havuz Çıkarmayı nasıl uyguluyor ve Istio'nun ölü veya kötü performans gösteren bir podu dengeleme devresinden çıkarmanıza nasıl izin verdiğini gösterecek.
  • Istio'nun burada nasıl kullanılabileceğini görmek için ilk gönderiden Devre Kesici konusuna da bakacağız. Hizmet kodunda en ufak bir değişiklik yapmadan YAML yapılandırma dosyalarını ve terminal komutlarını kullanarak trafiği nasıl yönlendireceğinizi ve ağ hatalarını nasıl yöneteceğinizi göstereceğiz.

Üçüncü bölüm:

  • Istio'ya zaten yerleşik olan veya kolayca eklenen izleme ve izlemeyle ilgili bir hikaye. Mikro hizmet mimarilerini zahmetsizce yönetmek için Prometheus, Jaeger ve Grafana gibi araçları OpenShift ölçeklendirmeyle birlikte nasıl kullanacağınızı göstereceğiz.
  • Hataları izlemek ve ele almaktan, onları kasıtlı olarak sisteme dahil etmeye geçiyoruz. Başka bir deyişle, kaynak kodunu değiştirmeden hata eklemenin nasıl yapılacağını öğreniyoruz ki bu, test açısından çok önemlidir - çünkü bunun için kodun kendisini değiştirirseniz, ek hataların ortaya çıkma riski vardır.

Son olarak Istio Service Mesh'teki son gönderide:

  • Hadi Karanlık Tarafa gidelim. Daha doğrusu, kod doğrudan üretim verileri üzerinde dağıtıldığında ve test edildiğinde, ancak sistemin çalışmasını hiçbir şekilde etkilemediğinde Dark Launch şemasını kullanmayı öğreneceğiz. Istio'nun trafiği bölme yeteneğinin kullanışlı olduğu yer burasıdır. Savaş sisteminin işleyişini hiçbir şekilde etkilemeden canlı üretim verileri üzerinde test yapma yeteneği, en ikna edici doğrulama yöntemidir.
  • Dark Launch'ı temel alarak, riski azaltmak ve yeni kodun üretime alınmasını kolaylaştırmak için Canary Dağıtım modelini nasıl kullanacağınızı göstereceğiz. Canary Deployment'ın kendisi yeni olmaktan çok uzaktır, ancak Istio bu şemayı yalnızca basit YAML dosyalarıyla uygulamanıza olanak tanır.
  • Son olarak, İnternet ile çalışırken Istio'nun yeteneklerini kullanmak amacıyla kümelerinizin dışındaki kişilere hizmetlere erişim sağlamak için Istio Egress'i nasıl kullanacağınızı göstereceğiz.

İşte başlıyoruz...

Istio izleme ve yönetim araçları - mikro hizmetleri bir hizmet ağında düzenlemek için ihtiyacınız olan her şey hizmet ağı.

Istio Hizmet Ağı Nedir?

Bir hizmet ağı, bir hizmet grubu için trafik izleme, erişim kontrolü, keşif, güvenlik, hata toleransı ve diğer yararlı şeyler gibi işlevleri uygular. Istio, tüm bunları hizmetlerin kodlarında en ufak bir değişiklik yapmadan yapmanıza olanak tanır. Büyünün sırrı nedir? Istio, her hizmete sepet konteyneri biçiminde kendi proxy'sini ekler (sepet, motosiklet sepetidir), ardından bu hizmete gelen tüm trafik, belirtilen politikalar tarafından yönlendirilen ve bu trafiğin nasıl, ne zaman ve olup olmadığına karar veren proxy üzerinden geçer. kesinlikle servise ulaşmalısınız. Istio ayrıca kanarya konuşlandırmaları, devre kesiciler, hata ekleme ve daha pek çok gelişmiş DevOps tekniğinin uygulanmasını da mümkün kılar.

Istio, konteynerler ve Kubernetes ile nasıl çalışır?

Istio hizmet ağı, mikro hizmetleri oluşturmak ve yönetmek için gereken her şeyin bir sepet uygulamasıdır: izleme, izleme, devre kesiciler, yönlendirme, yük dengeleme, hata ekleme, yeniden denemeler, zaman aşımları, yansıtma, erişim kontrolü, hız sınırlama ve çok daha fazlası. Bugün bu işlevleri doğrudan kodda uygulamak için tonlarca kitaplık olmasına rağmen, Istio ile kodunuzda hiçbir şeyi değiştirmeden aynı şeylerin hepsini alabilirsiniz.

Sepet modeline göre Istio, bir Linux konteynerinde çalışır. Kubernetes-kontrollü bir hizmete sahip bölme ve verilen konfigürasyona göre işlevsellik ve bilgileri enjekte eder ve çıkarır. Bunun sizin kendi konfigürasyonunuz olduğunu ve kodunuzun dışında yaşadığını vurguluyoruz. Bu nedenle kod çok daha basit ve kısa hale gelir.

Ayrıca önemli olan, mikro hizmetlerin operasyonel bileşeninin hiçbir şekilde kodun kendisiyle bağlantılı olmamasıdır, bu da operasyonlarının güvenli bir şekilde BT uzmanlarına aktarılabileceği anlamına gelir. Aslında geliştirici devre kesicilerden ve hata eklemeden neden sorumlu olsun ki? Tepki verin evet ama bunları işleyip yaratmak mı? Tüm bunları koddan çıkarırsanız programcılar tamamen uygulamanın işlevselliğine odaklanabilecektir. Kodun kendisi de kısalacak ve basitleşecek.

Servis ağı

Mikro hizmetleri kodlarının dışında yönetmeye yönelik işlevleri uygulayan Istio, Hizmet Ağı kavramıdır. Başka bir deyişle, ağ fonksiyonlarının bir ağını oluşturan bir veya daha fazla ikili dosyanın koordineli bir grubudur.

Istio mikro hizmetlerle nasıl çalışır?

Sepet konteynırlarının çalışması şu şekilde görünüyor: Kubernetes и mini vardiya kuş bakışı görünüm: Minishift'in bir örneğini başlatın, Istio için bir proje oluşturun (buna "istio-sistem" diyelim), Istio ile ilgili tüm bileşenleri kurun ve çalıştırın. Daha sonra, projeler ve bölmeler oluşturdukça dağıtımlarınıza yapılandırma bilgilerini eklersiniz ve bölmeleriniz Istio'yu kullanmaya başlar. Basitleştirilmiş bir diyagram şuna benzer:

Istio Service Mesh'te bir dizi gönderi

Artık Istio ayarlarını örneğin hata eklemeyi, desteği organize etmek için değiştirebilirsiniz. Kanarya Dağıtımı veya diğer Istio özellikleri - ve bunların hepsini uygulamaların kodlarına dokunmadan yapabilirsiniz. En büyük müşterinizin (Foo Corporation) kullanıcılarından gelen tüm web trafiğini sitenin yeni bir sürümüne yönlendirmek istediğinizi varsayalım. Bunu yapmak için, kullanıcı kimliğinde @foocorporation.com'u arayacak ve buna göre yönlendirecek bir Istio yönlendirme kuralı oluşturmanız yeterlidir. Diğer tüm kullanıcılar için hiçbir şey değişmeyecek. Bu arada sitenin yeni sürümünü sakin bir şekilde test edeceksiniz. Ve bunun için geliştiricileri hiçbir şekilde dahil etmenize gerek olmadığını unutmayın.

Peki bunun bedelini çok ağır ödemek zorunda kalacak mısın?

Hiç de bile. Istio oldukça hızlıdır ve Go ve çok az ek yük yaratır. Ayrıca çevrimiçi üretkenlikteki olası kayıp, geliştirici üretkenliğindeki artışla dengelenir. En azından teoride: Geliştiricilerin zamanının değerli olduğunu unutmayın. Yazılım maliyetlerine gelince, Istio açık kaynaklı bir yazılımdır, dolayısıyla ücretsiz olarak alıp kullanabilirsiniz.

Kendin ustalaş

Red Hat Geliştirici Deneyimi Ekibi, derinlemesine uygulamalı bir deneyim geliştirdi. liderlik Istio tarafından (İngilizce). Linux, MacOS ve Windows'ta çalışır ve kod Java ve Node.js'de mevcuttur.

Istio'da 10 interaktif ders

Blok 1 - Yeni Başlayanlar İçin

Istio'ya Giriş
30 dakika
Service Mesh'i tanıyalım, Istio'nun OpenShift Kubernetes kümesine nasıl kurulacağını öğrenelim.
Postalamak

Istio'da mikro hizmetleri dağıtma
30 dakika
Spring Boot ve Vert.x ile üç mikro hizmeti dağıtmak için Istio'yu kullanıyoruz.
Postalamak

Blok 2 – orta seviye

Istio'da izleme ve izleme
60 dakika
Istio'nun yerleşik izleme araçlarını, özel ölçümlerini ve Prometheus ve Grafana aracılığıyla OpenTracing'i keşfedeceğiz.
Postalamak

Istio'da basit yönlendirme
60 dakika
Basit kuralları kullanarak Istio'da yönlendirmeyi nasıl yöneteceğinizi öğrenin.
Postalamak

Gelişmiş yönlendirme kuralları
60 dakika
Istio'nun akıllı yönlendirme, erişim kontrolü, yük dengeleme ve hız sınırlama özelliklerine bir göz atalım.
Postalamak

Blok 3 – ileri düzey kullanıcı

Istio'da Arıza Enjeksiyonu
60 dakika
Dağıtılmış uygulamalardaki hata işleme senaryolarını inceliyoruz, HTTP hataları ve ağ gecikmeleri oluşturuyoruz ve ortamı geri yüklemek için kaos mühendisliğini kullanmayı öğreniyoruz.
Postalamak

Istio'da Devre Kesici
30 dakika
Stres testi siteleri için Siege'i kuruyoruz ve tekrarları, devre kesiciyi ve havuz çıkarma özelliğini kullanarak arka uç hata toleransının nasıl sağlanacağını öğreniyoruz.
Postalamak

Çıkış ve Istio
10 dakika
Dahili hizmetlerin harici API'ler ve hizmetlerle etkileşimine yönelik kurallar oluşturmak için Çıkış rotalarını kullanırız.
Postalamak

Istio ve Kiali
15 dakika
Hizmet ağına genel bir bakış elde etmek ve istek ile veri akışlarını keşfetmek için Kiali'yi kullanmayı öğrenin.
Postalamak

Istio'da karşılıklı TLS
15 dakika
Istio Gateway ve VirtualService'i oluşturuyoruz, ardından karşılıklı TLS (mTLS) ve ayarlarını detaylı olarak inceliyoruz.
Postalamak

Blok 3.1 - Derinlemesine İnceleme: Mikro Hizmetler için Istio Hizmet Ağı

Istio Service Mesh'te bir dizi gönderi
Kitap ne hakkında:

  • Hizmet ağı nedir?
  • Istio sistemi ve mikro hizmet mimarisindeki rolü.
  • Aşağıdaki sorunları çözmek için Istio'yu kullanma:
    • Hata toleransı;
    • Yönlendirme;
    • Kaos testi;
    • güvenlik;
    • İzleri, ölçümleri ve Grafana'yı kullanarak telemetri koleksiyonu.

Kitap indirmek için

Servis ağları ve Istio ile ilgili makale serisi

Dene kendini

Bu gönderi dizisinin amacı Istio dünyasına derinlemesine bir bakış sunmak değil. Size sadece konsepti tanıtmak istiyoruz ve belki de Istio'yu kendiniz denemeniz için size ilham vermek istiyoruz. Bunu yapmak tamamen ücretsizdir ve Red Hat, OpenShift, Kubernetes, Linux konteynerleri ve Istio'yu kullanmaya başlamanız için ihtiyacınız olan tüm araçları sağlar: Red Hat Geliştiricisi OpenShift Konteyner Platformu, Istio rehberimiz ve sitemizdeki diğer kaynaklar Service Mesh'teki mikro site. Gecikmeyin, bugün başlayın!

Istio yönlendirme kuralları: hizmet isteklerini gitmeleri gereken yere yönlendirmek

Açık Vardiya и Kubernetes mükemmel bir adresleme işi yapmak mikro hizmetler gerekli bölmelere yönlendirilir. Kubernetes'in varlığının nedenlerinden biri de budur; yönlendirme ve yük dengeleme. Peki ya daha incelikli ve karmaşık yönlendirmeye ihtiyacınız varsa? Örneğin, bir mikro hizmetin iki sürümünü aynı anda kullanmak için. Istio Rota Kuralları burada nasıl yardımcı olabilir?

Yönlendirme kuralları aslında rota seçimini belirleyen kurallardır. Sistemin karmaşıklık düzeyi ne olursa olsun, bu kuralların genel çalışma prensibi basit kalır: istekler belirli parametrelere ve HTTP başlık değerlerine göre yönlendirilir.
Örneklere bakalım:

Kubernetes varsayılanı: önemsiz "50/50"

Örneğimizde, OpenShift'te bir mikro hizmetin iki sürümünün aynı anda nasıl kullanılacağını göstereceğiz; bunlara v1 ve v2 diyelim. Her sürüm kendi Kubernetes bölmesinde çalışır ve varsayılan olarak eşit dengeli döngüsel yönlendirmeyi çalıştırır. Her pod, mikro hizmet örneklerinin, diğer bir deyişle kopyaların sayısına göre kendi istek payını alır. Istio bu dengeyi manuel olarak değiştirmenize olanak sağlar.

Öneri hizmetimizin iki sürümünü OpenShift'te, öneri-v1 ve öneri-v2'de konuşlandırdığımızı varsayalım.
İncirde. Şekil 1, her hizmet bir örnekte temsil edildiğinde isteklerin bunlar arasında eşit şekilde değiştiğini göstermektedir: 1-2-1-2-... Kubernetes yönlendirmesi varsayılan olarak şu şekilde çalışır:

Istio Service Mesh'te bir dizi gönderi

Versiyonlar arası ağırlıklı dağılım

İncirde. Şekil 2, v2 hizmet replikalarının sayısını birden ikiye çıkarırsanız ne olacağını gösterir (bu, oc Scale —replicas=2 dağıtım/recommendation-v2 komutuyla yapılır). Gördüğünüz gibi v1 ve v2 arasındaki istekler artık bire üç oranında bölünüyor: 1-2-2-1-2-2-…:

Istio Service Mesh'te bir dizi gönderi

Istio'yu kullanarak sürümü yoksay

Istio, isteklerin dağılımını ihtiyacımız olan şekilde değiştirmeyi kolaylaştırıyor. Örneğin, aşağıdaki Istio yaml dosyasını kullanarak tüm trafiği yalnızca öneri-v1'e gönderin:

Istio Service Mesh'te bir dizi gönderi

Burada şuna dikkat etmeniz gerekiyor: baklalar etiketlere göre seçiliyor. Örneğimizde v1 etiketi kullanılıyor. "Weight: 100" parametresi, trafiğin %100'ünün v1 etiketine sahip tüm hizmet podlarına yönlendirileceği anlamına gelir.

Sürümler arasındaki direktif dağıtımı (Canary Dağıtımı)

Daha sonra, ağırlık parametresini kullanarak, her birinde çalışan mikro hizmet örneklerinin sayısını göz ardı ederek trafiği her iki bölmeye de yönlendirebilirsiniz. Örneğin, burada trafiğin %90'ını v1'e ve %10'unu v2'ye yönlendiriyoruz:

Istio Service Mesh'te bir dizi gönderi

Mobil kullanıcılar için ayrı yönlendirme

Sonuç olarak, mobil kullanıcı trafiğinin v2 hizmetine ve diğer herkesin v1'e yönlendirilmeye nasıl zorlanacağını göstereceğiz. Bunu yapmak için istek başlığındaki kullanıcı aracısı değerini analiz etmek üzere normal ifadeler kullanırız:

Istio Service Mesh'te bir dizi gönderi

Şimdi siz

Başlıkları ayrıştırmaya yönelik normal ifadeler içeren örnek, sizi Istio yönlendirme kurallarının kendi kullanımlarını bulmaya motive etmelidir. Üstelik başlık değerleri uygulama kaynak kodunda oluşturulabildiğinden buradaki olanaklar oldukça kapsamlıdır.

Ve Dev'in değil Ops'un olduğunu unutmayın

Yukarıdaki örneklerde gösterdiğimiz her şey, özel istek başlıkları oluşturmanın gerekli olduğu durumlar dışında, kaynak kodunda en ufak bir değişiklik yapılmadan yapılır. Istio, hem örneğin test aşamasında kullanabilecek geliştiriciler hem de üretimde büyük ölçüde yardımcı olacağı BT sistemlerinin işletimindeki uzmanlar için faydalı olacaktır.

O halde bu yazı dizisinin ana motifini tekrarlayalım: kodunuzdaki hiçbir şeyi değiştirmenize gerek yok. Yeni görüntüler oluşturmaya veya yeni kapsayıcılar başlatmaya gerek yoktur. Bütün bunlar kodun dışında uygulanır.

Hayal gücünü kullan

Düzenli ifadeler kullanarak başlık analizinin olanaklarını hayal edin. En büyük müşterinizi ürününüzün özel bir sürümüne yönlendirmek mi istiyorsunuz? mikro hizmetler? Kolayca! Chrome tarayıcısı için ayrı bir sürüme mi ihtiyacınız var? Sorun değil! Trafiği hemen hemen her özelliğe göre yönlendirebilirsiniz.

Dene kendini

Istio, Kubernetes ve OpenShift hakkında bilgi edinmek başka bir şey ama neden her şeye kendiniz dokunmayasınız? Takım Red Hat Geliştirici Programı bu teknolojilere mümkün olduğunca çabuk hakim olmanıza yardımcı olacak ayrıntılı bir kılavuz (İngilizce) hazırladı. Kılavuz aynı zamanda %100 açık kaynak olduğundan kamuya açık olarak yayınlanmaktadır. Dosya macOS, Linux ve Windows'ta çalışır ve kaynak kodu Java ve node.js sürümlerinde mevcuttur (diğer dillerdeki sürümler yakında gelecektir). Tarayıcınızda ilgili git deposunu açmanız yeterli Red Hat Geliştirici Demosu.

Bir sonraki gönderide: Sorunları güzelce çözüyoruz

Bugün Istio yönlendirme kurallarının neler yapabileceğini gördünüz. Şimdi aynı şeyi hayal edin, ancak yalnızca hata yönetimiyle ilgili olarak. Bir sonraki yazımızda tam olarak bundan bahsedeceğiz.

Kaynak: habr.com

Yorum ekle