Azure Kubernetes Service(AKS)- Yönetilen L7 Loadbalancer — Application Gateway

Firat Yasar
Devops Türkiye☁️ 🐧 🐳 ☸️
4 min readMar 22, 2020

Application Gateway Ingress Controller(AGIC) Azure üzerinde bir platform servisi olan Application Gateway ile Azure Kubernetes Service’in(AKS) birbirlerine bind edilmesiyle oluşmuş olan bir çözümdür. Bu çözüm ile AGIC open source bir controller olarak sunulmaktadır. Böylece fully managed ,scalable ve yüksek erişilebilir bir L7 load balancer olan Application Gateway AKS mimarisi ile birlikte kullanılabilir hale gelir.

Application Gateway Ingress Controller nedir? Nasıl çalışır?

AGIC, Azure Kubernetes Service(AKS) kullanan kişilerin uygulamalarını internet üzerinden erişilebilir hale getirebilmesi için Application Gateway gibi L7 loadbalancer olarak çalışan bir yönetilen servisi kullanmasına olanak sağlayan bir Kubernetes uygulamasıdır ve cluster içerisinde bir agent gibi çalışır.

Temel olarak AGIC Kubernetes cluster’ı izler ve değişiklik durumunda devamlı olarak application gateway’i update eder. Bu mimari yapıda load balancing mekanizmasi Kubernetes cluster dışında, application gateway tarafından kontrol edilir.

AGIC AKS cluster üzerinde pod içerisinde çalışır. Bu pod yardımı ile Kubernetes mimarisindeki belirli kaynaklar üzerindeki değişiklikleri kontrol eder. Değişiklik olduğunu algıladığı anda ARM (Azure Resource Manager) yardımıyla Azure platformu üzerindeki Application Gateway’i update eder.

Temel olarak AGIC’in çalışmasına ilişkin diagram aşağıdaki gibidir.

Şekilden de anlaşıldığı gibi Kubernetes API AGIC tarafından devamlı monitör edilir. Ingress resource’ları ile ilgili herhangi bir değişiklik olduğunda Azure Resource Manager’ı kullanarak Azure platformu üzerindeki APP Gateway’i update eder. Cluster’a gelen trafik application gateway üzerinden geçerken belirlenen routing mekanizmalarına göre pod’lara yönlendirilir.

AGIC’te diğer ingress controller’larda olduğu gibi Kubernetes üzerindeki ingress objelerini kullanır. Bu objelerin kontrolü içinde ortama gerekli olan pod ve service’lerin deployment’larını yapar.

Ingress controller olarak AGIC kullandığınızda Kubernetes cluster’ınız üzerinde elde edeceğiniz gelişmiş özellikler aşağıdaki gibidir;

  • URL routing
  • Cookie-based affinity
  • SSL termination
  • End-to-end SSL
  • Public,private ve Hybrid website desteği
  • Web Application Firewall ile entegrasyon

Aşağıdaki şekil cluster için L7 loadbalancer kullanılarak yapılan ingress konfigürasyonu ile AGIC kullanılarak yapılan ingress konfigürasyonunun farklarını göstermektedir.

Burada dikkat edilecek kısım şudur. Cluster içerisinde konfigüre edilen L7 loadbalancer, tüm operasyonları için cluster’ın compute resource’larını kullanacaktır. Ayrıca in-cluster ingress loadbalancer network trafiği için service kaynağına ihtiyaç duyacaktır. Kubenet kullanılan network mimarilerinde bu yapı network trafiğinde fazladan hop oluşmasına sebep olacaktır.

AKS mimarisinde advanced network opsiyonu kullanılarak pod’ların node’ların bulunduğu ip network’ünden ip alması sağlanabilir. Böyle bir konfigürasyonda Application Gateway Kubernetes üzerindeki pod’lara direkt olarak erişebilir. Bu da Azure platformu üzerindeki L7 loadbalancer’dan gelen trafiğin herhangi bir ara katmana uğramadan direk pod’a gitmesi anlamına gelir ve bu iletişimde ekstra hop bulunmaz ve networkteki gecikme oldukça düşüktür.

Peki ya Performans?

Performans karşılaştırması deneme fırsatım olmadı. Ancak okuduğum kaynaklara göre Application gateway direk olarak pod’lara erişebildiği için in-cluster L7 loadbalancer’lara oranla %50 daha düşük network gecikmesine sahip. Ayrıca daha önce söylediğim gibi in-cluster L7 loadbalancer’dan Application Gateway’e geçmek, cluster üzerindeki available resource miktarınıda arttıracaktır. Bu da uygulamalarınız için daha fazla available resource anlamına gelir.

3 Node’lu bir AKS cluster üzerinde hem Application Gateway hemde In-cluster L7 loadbalancer ile yapılan performans testinde çıkan sonuçlara göre tüm request’ler bazında ortalama gecikme süreleri aşağıdaki gibi sonuçlanmıştır.

  • Application Gateway: 480ms per request
  • In-cluster Ingress: 710ms per request

AGIC’i kaç farklı şekilde kurabiliriz?

AGIC için farklı mimarilerde kurulum adımlarını içeren link’ler aşağıdaki gibidir. Bu linklerden faydalanarak AGIC’i 3 farklı senaryoda yapılandırabilirsiniz.

  • Greenfield Deployment: Tamamen sıfırdan bir AKS cluster kurup gerekli konfigürasyonların yapılması için gerekli konfigürasyonları içerir. Adım adım kurulum link’i aşağıdaki gibidir:
  • Windows Cluster için Greenfield Deployment: Windows nodepool’a sahip AKS cluster’lar için kurulum adımları aşağıdaki gibidir.
  • Brownfield Deployment: AKS ve Application Gateway olan ortama AGIC kurmak için gerekli adımları içerir. Adım adım kurulum linki aşağıdaki gibidir.

Özet olarak;

Azure platformu üzerinde yönetilen bir L7 loadbalancer olan Application Gateway, cluster dışında yönetilen, altyapısında vmscaleset kullanan ve bu sayede ultra scalable ve available bir servis olduğundan dolayı, in-cluster ingress controller’lara göre daha iyi performans vermektedir. In-cluster ingress controller’lar cluster üzerine ek bir compute yükü getirmektedir ve kullandığı katmanlar ile network trafiğinde ekstra yönlendirmelere maruz kalmaktadır.

Tabi işin düşünülmesi gereken bir diğer tarafı da maliyettir. L7 Load Balancer olarak Azure platformu üzerinde Application Gateway kullanmak bize ek maliyet getirecektir. Ancak yönetilen bir platform olduğu için bu servisin up ve running durumda olması ile bizim ilgilenmemiz gerekmeyecektir. Bu da cluster’ımızın karmaşıklığını biraz da olsa azaltacaktır.

In-cluster L7 load balancer olarak opensource load balancer kullanarak Application Gateway kullanıldığında oluşan maliyeti ortadan kaldırabiliriz. Ancak bu beraberinde yönetimsel maliyetleri de getirecektir. Bu resource’ların up ve running durumda olması tamamen bizim sorumluluğumuzda olacaktır. Yine bu resource’ların update ve upgrade edilmesini de yine bizim üstlenmemiz gerekecektir. Ayrıca yoğun kullanılan bir cluster’da cluster compute kaynaklarını hesaplarken bu loadbalancer’ın kullanacağı compute resource’unun da dikkate alınması gerekecektir.

Kaynak: https://docs.microsoft.com/tr-tr/azure/application-gateway/ingress-controller-overview

Kaynak2: https://azure.github.io/application-gateway-kubernetes-ingress/

Kaynak3: https://azure.microsoft.com/en-us/blog/application-gateway-ingress-controller-for-azure-kubernetes-service/

--

--