Private Azure Kubernetes Service(AKS) Cluster

Firat Yasar
Devops Türkiye☁️ 🐧 🐳 ☸️
5 min readApr 10, 2020

Azure üzerinde AKS ile sahip olduğumuz Kubernetes cluster mimarisinde sadece worker node’lardan sorumlu oluruz ve uygulamamızı bu node’lar üzerinden yayınlarız. AKS yönetilen bir platform servisi olduğu için master node’ların yönetimi Microsoft tarafından yapılır ve bu kısımda herhangi bir sorumluluğumuz bulunmamaktadır.

AKS kullanılan mimarilerde worker node’lar Kubernetes API Server bileşeni ile public bir url üzerinden konuşur. Kendi AKS cluster’ımdan örnek vermek gerekirse, cluster’ımdaki API server URL’i aşağıdaki gibidir.

firatakscluster-dns-31c6f73e.hcp.westeurope.azmk8s.io

URL’in public olmasının sebebini şöyle açıklayabiliriz. Control plane bileşenlerinin kontrolünü Microsoft’ta olduğu için ve bu bileşenler Microsoft’un yönettiği private virtual network’lerde bulunmaktadır. Worker node’lar ise bizim yönettiğimiz virtual network’lere deploy edilirler. Bu iki ortamdaki node’lar bulundukları network’lerden private ip alırlar. Bu sebeple bu network’ler arasında bir routing mekanizması olmadığı için iletişim kuramazlar. Bu sebeple API server bileşeni public bir URL ile erişilebilir duruma gelir.

İşte bu noktada bazen AKS’nin en önemli bileşeninin public bir URL ile yayınlanması istenmeyen bir durum olabilir. Bu sebeple Microsoft’un yakın zamanda getirdiği Private Cluster özelliği ile API Server private bir URL üzerinden hizmet verebilir hale gelmiştir.

Microsoft’un yönettiği master ve bizim yönettiğimiz worker node’lar arasındaki bu private bağlantıyı sağlayan teknoloji ise yine yakın zamanda duyurulan Private link teknolojisidir. Private link için aşağıdaki link’i kullanarak ayrıntılı bilgi elde edebilir siniz.

Azure Private Link

Azure platformu üzerinde private AKS konfigürasyonu nasıl yapılır?

Private cluster konfigürasyonu oldukça basit. Eğer portal üzerinden kurulum yapılıyorsa default olarak disable gelen private cluster seçeneğini aşağıdaki şekilde olduğu gibi enable etmeniz yeterli olacaktır.

Bu işlemin ardından normal kurulum seçenekleri takip edilerek private cluster kurulumunuzu tamamlayabilirsiniz.

Kurulum için Azure CLI kullanmak istediğinizde de komuta “–enable-private-cluster” parametresini eklemeniz yeterli olacaktır.

Kurulum işleminin ardından API server URL’ini kontrol ettiğimizde, URL’in aşağıdaki gibi değiştiğini görebiliriz.

privateakscluster-dns-58d605e9.7b4b0103–57bc-40b7–8c21–64a8653d5062.privatelink.westeurope.azmk8s.io

Kurulum aşamasının oldukça basit olduğu yukarıdaki adımlarda da görülmektedir. Şu anda cluster içerisindeki master ve worker node’lar private bir bağlantı üzerinden haberleşmektedir.

Peki bir diğer önemli soru da şu, cluster’a nasıl bağlanabilirim?

Private cluster konfigürasyonunda API server bileşeni public IP adresine sahip değildir. Bu sebeple cluster’ı yönetmek amaçlı api server ile iletişim kurmaya çalıştığınızda sorun yaşarsınız.

Örneğin aşağıdaki gibi cloud shell üzerinden cluster’ı yönetmek istediğinizde API Server’a bağlanamadığınızı belirten aşağıdaki hata ile karşılaşırsınız.

Bu bağlantı probleminin sebebi API server’ın public bir URL’e sahip olmamasıdır ve sizin kullandığınız cloudshell yada başka bir aracın master bileşenlerinin bulunduğu network’e özel bir bağlantısı bulunmamasıdır.

Budurumu çözmek için yapmanız gereken bir kaç farklı konfigürasyon vardır. Bunlar;

  • AKS cluster’ın bulunduğu network’te management için bir VM yapılandırıp bu VM üzerinden cluster’ı yönetme.(Çünkü cluster’ın bulunduğu network master bileşenlerinin bulunduğu network ile özel bir bağlantıya sahiptir)
  • Farklı bir networkte VM yapılandırıp AKS Cluster’ın bulunduğu network ile peering işlemi yapma ve private DNS zone’a Vm virtual netowrk’ünü linkleme.
  • Express Route yada VPN bağlantısı ile AKS cluster’ın bulunduğu network’e bağlanma.

Çok ihtiyaç olmadıkça AKS’in bulunduğu network’e VM deploy etmeyi pek doğru bulmuyorum. Bu sebeple management için ayrı bir network oluşturup bu network ile AKS network’ünü peer etmek daha mantıklı olacaktır.

peering sonrasında master’lar ile konuşabilen private bağlantıya sahip aks network’ü ile management VM’in bulunduğu network arasında connection aşağıdaki gibi sağlanacaktır.

Private AKS cluster deployment’ı yapılırken aynı zamanda private bir DNS zone’da deploy edilir. VM’in bulunduğu network üzerinden bu private zone’a DNS sorgusu yapabilmek için, VM’in bulunduğu network’ü özel bir bağlantı ile (yine budara da private link teknolojisi kullanılıyor) private DNS’e linklemek gerekir. Linkleme işlemi bir kaç adımda yapılabilen basit bir işlemdir.

Bunun için aşağıdaki gibi private DNS resource’u üzerine gelip virtual network links bölümünden VM network’ünü eklemek yeterli olacaktır.

Bu işlemin ardından Add butonunu kullanarak aşağıdaki gibi VM’in bulunduğu network kolaylıkla linklenebilir.

Bu işlemler tamamlandıktan sonra, management için gerekli private bağlantıların yapıldığı network üzerinde bulunan VM ile cluster’a kolaylıkla erişim sağlanacaktır.

Private cluster preview durumda olduğu için buna bağlı seçeceğimiz resource’lara da dikkat edilmesi gerekiyor. Örneğin Sistem alt yapı olarak private link kullandığı için, basic load balancer kullanılamıyor. Bu yüzden load balancer’ın standard olması gerekiyor. Çünkü private link standard load balancer tarafından support ediliyor. (Private link teknolojisine biraz bağımlı durumdayız :) )

Ek olarak custom bir DNS server kullanmak isterseniz Azure DNS iplerinin (168.63.129.16) custom DNS Server’lara upstream DNS Server olarak girilmesi gerekiyor.

Private cluster’a ait limitasyonlar varmıdır?

Service yeni olduğu için bazı limitasyonlara sahip. Bunları özetlemek gerekirse;

  • Ip authorization ranges private ip server’a uygulanamıyor.
  • Availability zone opsiyonu şu anlık belli region’larda mevcut.
  • Alt yapı olarak private link kullandığı için, bu servise ait limitasyonlar da private cluster’ı etkiliyor.
  • Virtual nodes desteklenmiyor.
  • Azure DevOps entegrasyonu out of box olarak desteklenmiyor.
  • Container Registry(ACR) kullanmak için, container registry virtual network’ü ile peering işlemleri yapılması gerekiyor.
  • Şu anda Azure Dev Spaces desteklenmiyor.
  • Var olan AKS Cluster’lar private cluster’a dönüştürülemiyor.
  • Azure Monitor for containers’ın live data özelliği şu anda desteklenmiyor.

Özetle;

Yeni bir sevis olduğu için şu anlık limitasyonlar oldukça fazla görünüyor. Ancak bu limitasyonların çoğu private bir cluster olmasından ve public olarak diğer Azure servisleri ile direkt konuşamamasından kaynaklanıyor. Muhtemelen private link özelliği Azure platformu üzerindeki diğer service’ler ile entegre edilebilir hale geldikçe, private cluster’da yukarıda bahsettiğim limitasyonlardan kurtulacaktır.

Umarım herkes için faydalı olmuştur :)

Görüşmek üzere.

Kaynak: https://docs.microsoft.com/en-us/azure/aks/private-clusters

--

--