Apinizer Servislerine Kubernetes Ingress ile Erişim

Kubernetes, dağıtılmış uygulamaları yönetmek için güçlü bir platform sağlar. Ancak, bu uygulamalara dış dünyadan erişim sağlamak için uygun bir yol gereklidir. Bu noktada, Kubernetes'in Ingress nesnesi ve NGINX Ingress Controller devreye girer. Bu dokümanda, NGINX Ingress Contoller'ın nasıl kurulacağı ve Apinizer Servislerine Ingress ile nasıl erişim sağlanacağı adım adım açıklanmaktadır.
Kubernetes Ingress Nedir?
Ingress, dış dünyadan Kubernetes kümesindeki uygulamalara erişim sağlamak için kullanılan bir kubernetes nesnesidir.
Belirli bir host adına veya yoluna gelen istekleri belirli bir servise yönlendirebilir. Örneğin, example.com/app adresine gelen bir isteği, app-service
adlı bir Kubernetes servisine yönlendirebilir.

Nginx Ingress Controller nedir?
NGINX Ingress Controller, bir Kubernetes kümesinde çalışan uygulamalara gelen istekleri yönlendirmek için NGINX'i kullanır. Ingress nesnelerini izler ve belirli kurallara göre gelen istekleri farklı hizmetlere yönlendirir. Kubernetes ekosisteminde NGINX'in yanı sıra çeşitli diğer Ingress Controller'lar da bulunmaktadır. Bunlardan en çok bilinenleri şunlardır: traefik, HAProxy, Envoy, Ambassador.

Bu dokümanda, NGINX Ingress Controller kurarak uygulamaya erişim sağlanmaktadır. Bulut sağlayıcınızda (AWS, GCP, Azure vb.) kubernetes cluster'ınızı dışarıya açmak istediğinizde, LoadBalancer tipinde bir servis oluşturursunuz ve size otomatik olarak bir IP atanır. Bu IP, servise dışarıdan erişim sağlamak için kullanılır. Ancak, bu bulut dışı (on-premises) veya bare-metal ortamlarda, MetalLB gibi bir tool kullanılarak LoadBalancer hizmetine ihtiyaç duyulur.
Bu uygulama localde bulunan Ubuntu işletim sistemine sahip sanal bir makinede gerçekleştirilecek.
Cloud ortamında çalışıyorsanız MetalLB kurulumunu atlayabilirsiniz.
MetalLB Kurulumu
MetalLB (Metal Load Balancer), Kubernetes kümeleri için bir ağ yük dengeleyicisi (load balancer) çözümüdür.
Aşağıdaki komut ile kubernetes kümesine, MetalLB kurulumunu gerçekleştirebilirsiniz.
Aşağıdaki komutla oluşturulan podların durumunu kontrol edin ve hazır ("ready") olana kadar bekleyin.
Dış IP (external-ip) Havuzu Oluşturulması
MetalLB'nin kullanımı için bir IP adresi havuzu oluşturulması gerekmektedir.
Bir yaml dosyası oluştun ve aşağıda bulunan IPAddressPool türündeki içeriği ekleyiniz.
Adres kısmında belirttiğiniz ip aralığı sizin dış ortamlardan erişeceğiniz ip adresiniz olacaktır.
Local network'ten ulaşılabilir boş bir ip aralığı vermeniz gerekmekte
Bu örnekte 172.16.100.170-172.16.100.180 aralığı verilmiştir.
Yaml dosyasını uygulayarak, bir IP adres havuzu oluşturunuz.
Artık belirtilen aralıktaki IP adreslerini bu havuza ekledi. LoadBalancer türünde servis oluşturduğunuzda, size otomatik bir IP tanımlanacaktır.
Nginx Controller Kurulumu
Helm kullanarak kubernetes kümesine nginx controller kurulumunu yapabilirsiniz. Helm'in kullanılma amacı, Kubernetes kümesinde uygulamaların ayağa kaldırılması için gereken tüm yapılandırma dosyalarını yönetmek ve kurulum sürecini kolaylaştırmaktır.
Bu adımda önce helm kurulumunu yapıp daha sonra Nginx controller reposunu ekleyiniz.
Artık Helm kullanarak nginx-controller kurulumunu gerçekleştirilebilirsiniz.
Yukarıdaki komutu çalıştırdığınızda bu çıktıyı size verecektir.

Nginx Controller kurulumu başarılı bir şekilde tamamlandıktan sonra belirli bir kontrol aşaması bulunmaktadır.
Şimdi kurulumda oluşturulan servislerden ingress-nginx-controller (loadbalancer tipinde) servisinin external-ip alanında bir ip atanmış mı kontrol edilmelidir.
Kontrol edildiğinde dışarıdan erişim sağlamak için bir external-ip atanmış olduğu görülmekte.

Nginx controller artık hazır durumda.
Şimdi, Apinizer uygulamasına erişim sağlamak için bir sonraki adım, bir Ingress objesi oluşturmaktır.
Bu sayede, belirli bir DNS adı ve ön ek tanımlayarak Apinizer Yönetim Arayüzüne erişimi kolaylaştırabiliriz.
Apinizer Deploy Örneği
Aşağıdaki komut çıktısında Apinizer Yönetim Arayüzü'nün çalıştığı namespace ve POD gözükmektedir.

Bu pod'da çalışan uygulamamıza erişmek istediğinizde(aşağıdaki ekranın karşımıza çıkabilmesi için) yapacağımız Ingress tanımlamaları bir sonraki bölümde anlatılmaktadır.

Ingress Objesi Oluşturmak
Ingress kullanmadan önce, uygulamanızın hangi URL'lere nasıl erişileceğini tanımlamak için bir Ingress kaynağı oluşturulması gerekir.
Ingress kaynağı, Nginx Ingress Controller tarafından izlenerek gelen istekleri hedeflere yönlendiren kuralları belirtir.
Bir yaml dosyası oluşturup ilgili konfigürasyonları kendimize göre düzenleyerek, Kubernetes'te bir Ingress objesi oluşturun.
Ingress içeriğini ekleyin ve aşağıdaki uyarı kısmında belirtilen alanları kendinize göre düzenleyin.
Sertifika Kullanıyorsanız:
Aşağıdaki key, cert ve namespace alanlarını kendi ortamınıza göre düzenleyebilirsiniz.
Belirtilen alanları kendi uygulamanıza göre düzenleyebilirsiniz.
host: demo.apinizer.com Bu alanda, Ingress kuralları tanımlanır. Host alanı, gelen isteklerin hangi DNS adına yönlendirileceğini belirtir.
path: / Bu alanda, gelen isteklerin belirli bir URL yoluna göre hangi hedefe yönlendirileceği belirtilir. Bu örnekte, /
yoluna sahip istekler bu kurala uyar.
pathType: Prefix Bu alanda, belirtilen yolun bir önek olduğu belirtilir. Yani /
yoluna sahip istekler /
önekiyle başlayan tüm yollara uyar.
backend: service: name: manager Bu alanda isteklerin yönlendirileceği hedef servisin adı yazılır.
port: number: 8080 Bu alanda servisinizin port numarası (8080) belirtilir.
Bu uygulamada, sertifika kullanmadan devam edeceğiz.
Yaml dosyasını kullanarak bir ingress nesnesi oluşturun.
Oluşturulan Ingress nesnesinin doğruluğunu ve çalışabilir olduğunu kontrol etmek için aşağıdaki komutu çalıştırabilirsiniz.
Ingress nesnesi oluşturulmuş ve ingress-nginx-controller servisinde oluşan ip bilgisi adres alanında görünüyor.
Ayrıca, Ingress YAML dosyasında belirttiğiniz host adresini de burada görmelisiniz.

Önemli : Ingress'in adresi atayabilmesi için 1-2 dakika beklemek ve birkaç kez kontrol etmek gerekebilir.
Bu çalışmanın sonucu görmek için aşağıdaki adrese istek atabilirsiniz:
Eğer bir hizmet sağlayıcısından alan adı satın almadıysanız, test amacıyla kendi bilgisayarınızda yerel bir kayıt yapabilirsiniz. Bu işlemin nasıl yapılacağı aşağıdaki dökümanda Ubuntu işletim sistemli bir sunucuya göre anlatılmaktadır.
Öncelikle, alan adınızı yönetmek için kendi bilgisayarınızda bir DNS kaydı eklemek istiyorsanız, aşağıdaki adımları izleyebilirsiniz:
DNS Tanımlama
İlk adım olarak, /etc/hosts
dosyasını bir metin düzenleyici ile açın.
Bu dosya, IP adresleri ve karşılık gelen ana bilgisayar isimlerinin eşleştirildiği bir yerel DNS (Domain Name System) dosyasıdır.
Nginx Controllerdan gelen ingress-nginx-controller servisinin sağladığı external-ip adresini ve Ingress YAML dosyasında belirttiğiniz DNS adresini bu dosyaya ekleyiniz.
Sonuç
Test adımında curl komutu kullanılabilir veya tarayıcı üzerinden erişim sağlanabilir.
curl demo.apinizer.com/apinizer/management/health adresine istek atıldığında sonuç şu şekildedir:

Tarayıcı ile erişildiğinde Apinizer Yönetim Arayüzü ekranı gelecektir.

Artık Apinizer'a erişimi sağlamak için bir ingress kullanıyorsunuz ve beklenen sonuç başarılı oldu.