Private Azure Kubernetes Service Cluster

By | 28 March 2020

Bildiğiniz üzre Azure Kubernetes Service kullanarak Azure platformu üzerinde Kubernetes cluster yapılandırdığımızda sadece worker node’ları görür ve bunlar üzerinde uygulamalarımızı çalıştırırız. Control plane bileşenleri olarak isimlendirdiğimiz Master node’lar üzerinde çalışan bileşenlerden sorumlu değilizdir.

Bu mimaride worker nodlarımız Kubernetes API server bileşeni ile public bir url üzerinden konuşurlar. Örneğin benim ortamımda oluşturduğum test cluster’a ait API Server adresi aşağıdaki gibidir.

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

Bunun sebebi Master node’ların yönetiminin Microsoft’ta olması ve bizim AKS cluster’ın bulunduğu network ile private ip’ler üzerinden  haberleşememesidir.

Tabi bazı şirketler için bu durum, yani API server’ın public olarak erişilmesi istenmeyen bir durum olduğu için Microsoft yakın zamanda “Private Cluster” özelliğini getirdi.

Bu özellik ile birlikte API Server bileşenine erişim tamamen private bir bağlantı ile iletişim kurabilir hale geldi. 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

Peki nasıl konfigür edilir?

Konfigürasyon aşaması oldukça basit. Eğer portal üzerinden kurulum yapılıyorsa, nek yapılması gereken default olarak disable gelen bu private cluster seçeneğini enable etmek.

privatecluster

 

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

Kurulum için CLI kullanırken de komuta “–enable-private-cluster” parametresini eklemeniz yeterli olacaktır.

privatecluster2

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

 

Private 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.

privatecluster4

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 bağlantıyı sağlama.
  • 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.

Hızlı seçenek olarak Azure üzerinde bir VM’in bulunduğu network ile peering yapmayı deneyelim. Ardından da VM’in bulunduğu network’ü oluşturulan private DNS zone üzerine link’leyelim.

privatecluster9

 

Peering connected duruma geldikten sonra, Private Cluster ile birlikte oluşan private dns zone’a vm’in bulunduğu network’ü de linkleyelim.

Bunun için aşağıdaki gibi virtual network links bölümünden vm network’ünü eklemek yeterli olacaktır.

privatecluster6

Add butonunun ardından aşağıdaki gibi VM’in bulunduğu network’ü kolaylıkla seçebilir siniz.

privatecluster7

Bu işlemlerin ardından Azure CLI kullanarak ilgili context’e merged olduktan sonra aşağıdaki gibi ilk etapta hata almış olan komutun, konfigürasyonların ardından çalıştığını görebilirsiniz.

privatecluster8

Böylece private cluster’ımıza ait api server’ımıza bağlantı sağlamış olduk.

Burada şu anda dikkat edilmesi gereken iki önemli durum var. Sistem alt yapı olarak private link kullandığı için, basic load balancer kullanamıyoruz. O sebeple load balancer’ın standard olması gerekiyor. Çünkü private link standard load balancer tarafından support ediliyor. Ek olarak custom DNS server’ı kullanmak için de Azure DNS iplerinin (168.63.129.16) custom DNS Server’lara upstream DNS Server olarak girilmesi gerekiyor

Service daha yeni olduğu için bazı limitasyonlara sahip.

  • 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 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.

Yeni bir sevis olduğu için şu anlık limitasyonlar oldukça fazla. Tabi private bir cluster olduğu için public olarak diğer Azure servisleri ile direkt konuşamadığından bu limitasyonların çoğu.

İlerleyen dönemde yapılacak geliştirmeler ile bu bağlantılarında yapılacağını düşünüyorum.

Umarım herkes için faydalı bir makale olmuştur.

Görüşmek üzere.

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

Fırat

Leave a Reply