Kubernetes için Giriş denetleyicilerine genel bakış ve karşılaştırma

Kubernetes için Giriş denetleyicilerine genel bakış ve karşılaştırma

Belirli bir uygulama için bir Kubernetes kümesi başlatırken, uygulamanın kendisinin, işletmenin ve geliştiricilerin bu kaynak için ne ifade ettiğini anlamanız gerekir. Bu bilgilerle, mimari bir karar vermeye ve özellikle bugün zaten çok sayıda bulunan belirli bir Giriş kontrolörü seçmeye başlayabilirsiniz. Çok sayıda makale / belge vb. gözden geçirmek zorunda kalmadan mevcut seçenekler hakkında temel bir fikir edinmek için, ana (üretime hazır) Giriş kontrolörleri dahil olmak üzere bu genel bakışı hazırladık.

Meslektaşlarımıza mimari bir çözüm seçmede yardımcı olacağını umuyoruz - en azından daha ayrıntılı bilgi ve pratik deneyler elde etmek için bir başlangıç ​​noktası olacaktır. Daha önce, ağdaki diğer benzer materyalleri inceledik ve garip bir şekilde, aşağı yukarı eksiksiz ve en önemlisi - yapılandırılmış - tek bir inceleme bulamadık. Öyleyse bu boşluğu dolduralım!

kriterler

Prensip olarak, bir karşılaştırma yapmak ve faydalı bir sonuç elde etmek için, sadece konu alanını anlamanız değil, aynı zamanda araştırma vektörünü belirleyecek belirli bir kriter listesine de sahip olmanız gerekir. Ingress / Kubernet'leri kullanmanın tüm olası durumlarını analiz ediyormuş gibi yapmadan, denetleyiciler için en genel gereksinimleri vurgulamaya çalıştık - her durumda tüm ayrıntılarınızı ve ayrıntılarınızı ayrı ayrı incelemeniz gerekeceğine hazırlıklı olun.

Ancak, tüm çözümlerde uygulandıkları ve dikkate alınmadıkları için çok tanıdık hale gelen özelliklerle başlayacağım:

  • hizmetlerin dinamik keşfi (hizmet keşfi);
  • SSL sonlandırma;
  • websockets ile çalışmak.

Şimdi karşılaştırma noktaları için:

Desteklenen protokoller

Temel seçim kriterlerinden biri. Yazılımınız standart HTTP üzerinde çalışmayabilir veya aynı anda birden fazla protokol üzerinde çalışmayı gerektirebilir. Durumunuz standart değilse, kümeyi daha sonra yeniden yapılandırmak zorunda kalmamak için bu faktörü dikkate aldığınızdan emin olun. Tüm denetleyiciler için desteklenen protokollerin listesi değişir.

çekirdekteki yazılım

Denetleyicinin temel aldığı çeşitli uygulama varyasyonları vardır. Popüler olanlar nginx, traefik, haproxy, envoy'dur. Genel durumda, trafiğin nasıl alındığı ve iletildiği üzerinde fazla bir etkisi olmayabilir, ancak "gizli bilgi"nin potansiyel nüanslarını ve özelliklerini bilmek her zaman yararlıdır.

trafik yönlendirme

Belirli bir hizmete giden trafiğin yönü hakkında neye dayanarak karar verebilirsiniz? Genellikle bunlar ana bilgisayar ve yoldur, ancak ek olasılıklar da vardır.

Küme içindeki ad alanı

Ad alanı (ad alanı) - Kubernet'lerde kaynakları mantıksal olarak bölme yeteneği (örneğin, sahnede, üretimde vb.). Her ad alanına ayrı ayrı yüklenmesi gereken Giriş denetleyicileri vardır (ve ardından trafiği yönlendirebilir) sadece bu alanın bölmelerine). Ve tüm küme için küresel olarak çalışanlar (ve bunların açık çoğunluğu) vardır - bunlarda trafik, ad alanından bağımsız olarak kümenin herhangi bir bölmesine yönlendirilir.

Yukarı akış örnekleri

Trafik, uygulamanın sağlıklı örneklerine, hizmetlere nasıl yönlendirilir? Aktif ve pasif kontroller, yeniden denemeler, devre kesiciler içeren seçenekler mevcuttur. (Daha fazla ayrıntı için örneğin bkz. Istio hakkında makale), özel durum denetimleri vb. Başarısız hizmetlerin dengelemeden zamanında kaldırılması ve kullanılabilirliği için yüksek gereksinimleriniz varsa çok önemli bir parametre.

Dengeleme algoritmaları

Birçok seçenek var: gelenekselden yuvarlak robin egzotik rdp-çerezgibi bireysel özelliklerin yanı sıra yapışkan oturumlar.

kimlik doğrulama

Denetleyici hangi yetkilendirme şemalarını destekler? Temel, özet, oauth, harici kimlik doğrulama - Bence bu seçenekler tanıdık gelmeli. Giriş aracılığıyla erişilen çok sayıda geliştirici (ve/veya yalnızca özel) döngü varsa bu önemli bir kriterdir.

Trafik dağılımı

Denetleyici, canary rollouts (canary), A / B testi, trafik yansıtma (mirroring / shadowing) gibi yaygın olarak kullanılan trafik dağıtım mekanizmalarını destekliyor mu? Bu, üretken testler için doğru ve hassas trafik yönetimi, çevrimdışı (veya minimum kayıpla) ürün hatalarını ayıklama, trafik analizi vb. gerektiren uygulamalar için gerçekten hassas bir konudur.

ücretli abonelik

Gelişmiş işlevselliğe ve/veya teknik desteğe sahip, denetleyici için ücretli bir seçenek var mı?

Grafik kullanıcı arabirimi (Web UI)

Denetleyici yapılandırmasını yönetmek için herhangi bir GUI var mı? Temelde "elverişlilik" ve/veya Ingress'a yapılandırmasında bazı değişiklikler yapması gerekenler için, ancak "ham" şablonlarla çalışmak sakıncalıdır. Geliştiriciler, hareket halindeyken trafikle ilgili bazı deneyler yapmak istiyorsa yararlı olabilir.

JWT doğrulaması

Kullanıcının son uygulamaya yetkilendirilmesi ve doğrulanması için JSON web belirteçlerinin yerleşik doğrulamasının varlığı.

Yapılandırma özelleştirme olanakları

Standart yapılandırma şablonlarına kendi direktiflerinizi, bayraklarınızı vb. eklemenizi sağlayan mekanizmalara sahip olma anlamında şablon genişletilebilirliği.

Temel DDOS koruma mekanizmaları

Adreslere, beyaz listelere, ülkelere vb. dayalı basit oran sınırı algoritmaları veya daha karmaşık trafik filtreleme seçenekleri.

İzleme iste

Girişlerden belirli hizmetlere / bölmelere ve ideal olarak hizmetler / bölmeler arasında da istekleri izleme, izleme ve hata ayıklama yeteneği.

WAF

Destek uygulama güvenlik duvarı.

Kontrolörler

Denetleyici listesi aşağıdakilere göre oluşturulmuştur: resmi Kubernetes belgeleri и bu masa. Spesifiklik veya düşük prevalans (gelişimin erken aşaması) nedeniyle bazılarını incelemeden çıkardık. Geri kalanı aşağıda tartışılmaktadır. Çözümlerin genel bir açıklamasıyla başlayıp özet tabloyla devam edelim.

Kubernet'lerden giriş

Web sitesi: github.com/kubernetes/ingress-nginx
Lisans: Apache 2.0

Bu, Kubernetes için resmi denetleyicidir ve topluluk tarafından geliştirilmektedir. Adından da anlaşılacağı gibi, nginx'e dayanmaktadır ve ek özellikleri uygulamak için kullanılan farklı bir Lua eklenti seti ile tamamlanmaktadır. Nginx'in popülaritesi ve denetleyici olarak kullanıldığında üzerinde yapılan minimum değişiklikler nedeniyle, bu seçenek (web deneyimi olan) ortalama bir mühendis için yapılandırması en kolay ve en kolay seçenek olabilir.

NGINX Inc. tarafından giriş

Web sitesi: github.com/nginxinc/kubernetes-ingress
Lisans: Apache 2.0

nginx geliştiricilerinin resmi ürünü. dayalı bir ücretli sürümü vardır NGINX Artı. Ana fikir, Lua'nın reddedilmesi nedeniyle elde edilen yüksek düzeyde kararlılık, sürekli geriye dönük uyumluluk, herhangi bir harici modülün olmaması ve beyan edilen artırılmış hızdır (resmi denetleyiciye kıyasla).

Ücretsiz sürüm, resmi denetleyiciyle karşılaştırıldığında bile (aynı Lua modüllerinin olmaması nedeniyle) önemli ölçüde azaltılmıştır. Aynı zamanda, ücretli olan oldukça geniş bir ek işlevselliğe sahiptir: gerçek zamanlı ölçümler, JWT doğrulaması, aktif sağlık kontrolleri ve daha fazlası. NGINX Ingress'e göre önemli bir avantaj, TCP / UDP trafiği için tam destektir (ve topluluk sürümünde de!). eksi - yokluk Bununla birlikte, "geliştiriciler için en yüksek önceliğe sahip olan" ancak uygulanması zaman alan trafik dağıtım özelliği.

Kong Girişi

Web sitesi: github.com/Kong/kubernetes-ingress-controller
Lisans: Apache 2.0

Kong Inc. tarafından geliştirilen ürün iki versiyonda: ticari ve ücretsiz. Çok sayıda Lua modülüyle genişletilen nginx'e dayanmaktadır.

Başlangıçta, API isteklerini işlemeye ve yönlendirmeye, yani bir API Ağ Geçidi olarak, ancak şu anda tam teşekküllü bir Giriş denetleyicisi haline geldi. Ana avantajlar: Kurulumu ve yapılandırması kolay olan ve yardımıyla çok çeşitli ek özelliklerin uygulandığı birçok ek modül (üçüncü taraf geliştiricilerinkiler dahil). Ancak, yerleşik işlevler zaten birçok olasılık sunuyor. İş yapılandırması, CRD kaynakları kullanılarak yapılır.

Ürünün önemli bir özelliği - aynı kontur içinde çalışmak (çapraz isim-aralığı yerine) tartışmalı bir konudur: bazıları için bir dezavantaj gibi görünecektir (her kontur için varlıklar üretmeniz gerekir) ve birisi için bu bir özelliktir ( BоDaha yüksek izolasyon seviyesi, bir denetleyici bozulursa, sorun yalnızca devre ile sınırlıdır).

traefik

Web sitesi: github.com/containous/traefik
Lisans: MİT

Başlangıçta mikro hizmetler ve onların dinamik ortamı için istek yönlendirmeyle çalışmak üzere oluşturulmuş bir proxy. Bu nedenle, pek çok kullanışlı özellik: yapılandırmayı hiç yeniden başlatmadan güncelleme, çok sayıda dengeleme yöntemi desteği, web arayüzü, metrik yönlendirme, çeşitli protokoller için destek, REST API, kanarya yayınları ve çok daha fazlası. Bir başka güzel özellik de, Let's Encrypt sertifikalarının kutudan çıkar çıkmaz desteklenmesidir. Dezavantajı, yüksek kullanılabilirliği (HA) organize etmek için kontrolörün kendi KV depolamasını kurması ve bağlaması gerekmesidir.

HAProxy

Web sitesi: github.com/jcmoraisjr/haproxy-ingress
Lisans: Apache 2.0

HAProxy uzun zamandır bir proxy ve trafik dengeleyici olarak biliniyor. Bir Kubernetes kümesinin parçası olarak, "yumuşak" bir yapılandırma güncellemesi (trafik kaybı olmadan), DNS'ye dayalı hizmet keşfi, API kullanarak dinamik yapılandırma sunar. CM'yi değiştirerek yapılandırma şablonunu tamamen özelleştirmek ve ayrıca içindeki Sprig kitaplık işlevlerini kullanma yeteneği çekici olabilir. Genel olarak, çözümün ana vurgusu yüksek hız, optimizasyon ve tüketilen kaynaklardaki verimliliktir. Kontrolörün avantajı, rekor sayıda farklı dengeleme yöntemini desteklemesidir.

Yolcu

Web sitesi: github.com/appscode/voyager
Lisans: Apache 2.0

Çok sayıda sağlayıcıda çok çeşitli özellikleri destekleyen evrensel bir çözüm olarak konumlandırılan HAproxy denetleyicisine dayalıdır. L7 ve L4 üzerindeki trafiğin dengelenmesi için bir fırsat sunuluyor ve TCP L4 trafiğinin bir bütün olarak dengelenmesi, çözümün temel özelliklerinden biri olarak adlandırılabilir.

çevre

Web sitesi: github.com/heptio/contour
Lisans: Apache 2.0

Bu çözüm yalnızca Envoy'a dayalı değildir: tarafından geliştirilmiştir. ortaklaşa bu popüler proxy'nin yazarlarıyla. Önemli bir özellik, IngressRoute CRD kaynaklarını kullanarak Giriş kaynaklarının denetimini ayırma yeteneğidir. Aynı kümeyi kullanan birçok geliştirme ekibine sahip kuruluşlar için bu, komşu döngülerdeki trafikle çalışma güvenliğini en üst düzeye çıkarmaya ve Giriş kaynaklarını değiştirirken onları hatalardan korumaya yardımcı olur.

Ayrıca, genişletilmiş bir dizi dengeleme yöntemi sunar (isteklerin yansıtılması, otomatik tekrarlama, isteklerin hızının sınırlandırılması ve çok daha fazlası vardır), trafik akışının ve arızaların ayrıntılı izlenmesi. Belki birileri için, yapışkan oturumlar için desteğin olmaması önemli bir dezavantaj olacaktır (iş olmasına rağmen zaten devam ediyor).

Istio Girişi

Web sitesi: istio.io/docs/tasks/traffic-management/ingress
Lisans: Apache 2.0

Yalnızca dışarıdan gelen trafiği yöneten bir Giriş denetleyicisi değil, aynı zamanda küme içindeki tüm trafiği de denetleyen kapsamlı bir hizmet ağı çözümü. Kaputun altında, Envoy her hizmet için sepet proxy'si olarak kullanılır. Özünde bu, “her şeyi yapabilen” büyük bir birleştirmedir ve ana fikri maksimum yönetilebilirlik, genişletilebilirlik, güvenlik ve şeffaflıktır. Bununla, trafik yönlendirme, hizmetler arasında erişim yetkilendirme, dengeleme, izleme, kanarya yayınları ve çok daha fazlasını ince ayar yapabilirsiniz. Makale dizisinde Istio hakkında daha fazlasını okuyun "Istio ile mikro hizmetlere geri dön'.

büyükelçi

Web sitesi: github.com/datawire/ambassador
Lisans: Apache 2.0

Envoy'a dayalı başka bir çözüm. Ücretsiz ve ticari sürümleri vardır. İlgili avantajları (K8s kümesinin yöntemleri ve varlıkları ile sıkı entegrasyon) getiren "tamamen Kubernetes'e özgü" olarak konumlandırılmıştır.

Karşılaştırma tablosu

Yani, makalenin doruk noktası şu devasa tablo:

Kubernetes için Giriş denetleyicilerine genel bakış ve karşılaştırma

Daha yakından görmek için tıklanabilir ve şu formatta da mevcuttur: Google E-Tablolar.

özetlemek gerekirse

Bu makalenin amacı, özel durumunuzda hangi seçimi yapmanız gerektiğine dair daha eksiksiz bir anlayış sağlamaktır (ancak, hiçbir şekilde ayrıntılı değildir!). Her zaman olduğu gibi, her kontrolörün kendi avantajları ve dezavantajları vardır…

Kubernetes'ten klasik Ingress, kullanılabilirliği ve kanıtlanmışlığı açısından iyidir, yeterince zengin özelliklere sahiptir - genel durumda, "gözler için yeterli" olmalıdır. Bununla birlikte, kararlılık, özellik düzeyi ve geliştirme için artan gereksinimler varsa, Ingress with NGINX Plus ve ücretli bir aboneliğe dikkat etmelisiniz. Kong, en zengin eklenti grubuna (ve buna bağlı olarak sağladıkları fırsatlara) sahiptir ve ücretli sürümde bunlardan daha da fazlası vardır. Temel Kubernetes hizmetlerinin yanı sıra bir API Ağ Geçidi olarak çalışmak için birçok fırsata, CRD kaynaklarına dayalı dinamik yapılandırmaya sahiptir.

Dengeleme ve yetkilendirme yöntemleri için artan gereksinimlerle, Traefik ve HAProxy'ye bir göz atın. Bunlar, yıllar içinde kanıtlanmış, çok istikrarlı ve aktif olarak gelişen Açık Kaynak projeleridir. Contour çıkalı birkaç yıl oldu ama hala çok genç görünüyor ve Envoy'un üzerine yalnızca temel özellikler eklendi. Uygulama önünde WAF'ın varlığı / gömülmesi için gereksinimler varsa, Kubernetes veya HAProxy'den aynı Girişe dikkat etmelisiniz.

Ve özellikler açısından en zengin olanı, başta Istio olmak üzere Envoy üzerine inşa edilen ürünlerdir. "Her şeyi yapabilen" kapsamlı bir çözüm gibi görünüyor, ancak bu aynı zamanda yapılandırma / başlatma / yönetim için diğer çözümlerden önemli ölçüde daha yüksek bir giriş eşiği anlamına geliyor.

Standart denetleyici olarak, ihtiyaçların %80-90'ını karşılayan Ingress from Kubernetes'i seçtik ve kullanmaya devam ediyoruz. Oldukça güvenilirdir, yapılandırması ve genişletmesi kolaydır. Genel olarak, özel gereksinimlerin yokluğunda, çoğu kümeye/uygulamaya uygun olmalıdır. Aynı evrensel ve nispeten basit ürünlerden Traefik ve HAProxy önerilebilir.

PS

Blogumuzda da okuyun:

Kaynak: habr.com

Yorum ekle