Ngınx Ingress Controller Kurulumu

tarafından
59
Ngınx Ingress Controller Kurulumu

NGINX INGRESS CONTROLLER

Bu konu başlığı altında Nginx Ingress Controller hakkında kısa bilgi verilecektir.

Kubernetes üzerinde pod içerisinde container olarak çalışan ve istek kabul eden bir uygulamamız var ise bu uygulamaya bazı durumlarda dışarıdan erişmemiz gerekebilir. Böyle durumlarda Ngınx Ingress Controller yardımımıza koşacaktır. Ngınx Ingress Controller ile mevcut ortamlarımızda bulunan servislere Ingress nesnesi ile erişmemiz sağlayan yapıdır. Bizler Ingress Controller ile Ingress üzerinden yazacağımız kurallar ile uygulalamıza bağlı bulunan servis üzerinden load balancer yapısı ile erişebiliriz.  Nginx Ingress Controller(IC) sadece bir pod üzerinde çalışmaktadır. IC bünyesinde yani pod içerisinde bulunan container içerisinde IC Proccess(Nginx ingres ve diğer kaynaklara göre yapılandırır.),Nginx Master Proccess, (Nginx worker proccessin kontrolünü sağlayan yapıdır).Nginx Worker Proccess(Gelen istekleri alır ve service bağlı uygulamalar için loadbalancer yapılmasını sağlar.) Ayrıca bu linkten gerekli bilgileri alabilir ve istek akış şemasını takip edebilirsiniz.

Ayrıca nginx inress controller üzerinden servsilerimize gelen istekleri yönlendirmek üzere Ingress nesnesi tanımlamız gerekir. Bu tanım ile gelen isteklerin nasıl yönlendirileceği ve hangi pathe hangi kurallar ile gideceğini belirleyebiliriz. Ayrıaca Ingress nesnesi tanımladıktan sonra gelen isteklerin nasıl işleneceğine dair bilgiyi aşağıdaki görselde  bulabilirsiniz.

 

Kurulum

Yapacağımız IC kurulumu daemonset olarak çalışacak şekilde kurulacaktır. Bu sayade IC için servis oluşturulmasına gerek kalmadan her worker node üzerinde ingress controller podunun yüklenmesi sağlanacak olup 80 ve 443 portuna gelen istekler otomatik IC podu tarafından karşılanacaktır. Ayrıca kurulum her bir nesnenin oluşturulması şeklinde yapıalacaktır. Daha fazla bilgiyi bu link üzerinden alabilirsiniz.

Adım1:
IC Reposu ilgili sunucuya indirilir ve klasör içerisine girilir.

git clone https://github.com/nginxinc/kubernetes-ingress/
cd kubernetes-ingress/deployments

Adım2:
IC için nesler aşağıdaki adımlar ile oluşturulur.
NameSpace ve  service account nesneleri oluşturulur.

kubectl apply -f common/ns-and-sa.yaml

Service Account CR ve CRB nesneleri oluşturulur.

kubectl apply -f rbac/rbac.yaml
kubectl apply -f rbac/ap-rbac.yaml

Ortak nesnelerin oluşturulması sağlanır. Bu nesneler, TLS için secret, configurasyon için ConfigMap ve Ingress Sınıfından oluşmaktadır. Eğer Ingress Class oluşturulmaz ise IC podu hata alacaktır.

kubectl apply -f common/default-server-secret.yaml
kubectl apply -f common/nginx-config.yaml
kubectl apply -f common/ingress-class.yaml

Virtual  Server, Virtual Server Route, Transport Server ve Policy nesneleri için CRD(Custom Resource Definition) nesnesi oluşturulur.  Ayrıca devamında TCP, UDP loadbalancer ve App Protect(İstege bağlı) modülleri  için nesneler oluşturulur.

kubectl apply -f common/crds/k8s.nginx.org_virtualservers.yaml
kubectl apply -f common/crds/k8s.nginx.org_virtualserverroutes.yaml
kubectl apply -f common/crds/k8s.nginx.org_transportservers.yaml
kubectl apply -f common/crds/k8s.nginx.org_policies.yaml

kubectl apply -f common/crds/k8s.nginx.org_globalconfigurations.yaml

kubectl apply -f common/crds/appprotect.f5.com_aplogconfs.yaml
kubectl apply -f common/crds/appprotect.f5.com_appolicies.yaml
kubectl apply -f common/crds/appprotect.f5.com_apusersigs.yaml

Ingress Controller için DaemonSet nesnesi oluşturulur. Ve aşağıdaki şekilde kontrol edilir, eğer deployment olarak oluşturulacak ise buna bağlı şekilde çalışacak servis nesnesinin  oluşturulması gerekir. Detaylı bilgiye bu linkten ulaşabilirsiniz.

kubectl apply -f daemon-set/nginx-ingress.yaml
kubectl get pods --namespace=nginx-ingress

Adım3:
Aşağıdaki şekilde test uygulaması oluşturalım ve gerekli denemeleri yapalım.

kubectl create deployment demo-app --image=httpd --port=80

kubectl expose deployment demo-app

kubectl create ingress demo-app --class=nginx   --rule=demo-app.<your_api address>.nip.io/*=demo:80

Şimdi ingress için tanımladığımız adress ile kendi tarayıcımızdan istek atalım. Ve sonuca bakalım. Eğer başarılı bir şekilde çalışıyor ise “It Works” yazısını göreceğiz.

kubectl get ing

Şimdi browser üzerinden test edelim.

Görüldüğü üzere ingress başarılı bir şekilde çalışmakta.