NGINX ile Kubernetes Ingress

H. Alperen Selcuk
3 min readJul 13, 2021

--

NGINX kullanarak kuberentes ingress konusunu ele alacağız.

INGRESS Kubernetes ortamında dışardan gelen trafiği ilgili pod/app lere aktarabilmemiz için kullanılan bir çözümdür.

Ingress loadbalancer gibi yine external->internal yönlendirmesi yapar fakat burada Layer7 ye çıkarak HTTP seviyesinde yapar. URL pathine göre tanımlama yapılabilir.

Diğer kuberenetes servislerinden farklı olarak ingress bir objedir. yani ingress e gelen istekleri ingress servicelere gönderir. servisler de podlara yönlendirir.

Ingressi çalıştırabilmek için ingress controller bulunduruyoruz cluster içinde, herhangi bir IP si yoktur yönlendirme için kullanılır. eğer ingress kullanmazsak her uygulama için ayrı loadbalancer kullanmamız gerekir bu da yönetimi zor bu da ingressi güzel yapan ayrı bir kısım.

sektörde bir çok ingress controller var meşhur olanlarından bazılarını sayarsak;

daha detaylı ingress toolları hakkında bilgiyi kuberentes sitesinde bulabilirsiniz. https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

Ben makale başında belirttiğim gibi NGINX kullanacağım, nginx i aslında hep web-page olarak görmüşsünüzdür özellikle docker ve kubernetes lablarında çok kullanılır. fakat burada kullanacağımız gibi Nginx reverse-proxy olarak da kullanabilirsiniz.

bir ingress controller iki tane de app kurarak labımızı yapalım. controlleri helm ile kuracağız.

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

valueleri custom vererek install yapalım.

helm install app-ingress ingress-nginx/ingress-nginx \
--namespace ingress \
--create-namespace \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux

şimdi sırada applicationları kubernetes ortamına deploy etmede. kullandığım manifest file lara repomdan erişebilirsiniz.

APP ler için bir namespace yaratalım;

kubectl apply -f https://raw.githubusercontent.com/alperen-selcuk/ingress-controller/main/app-namespace.yaml

namespace yarattıktan sonra iki tane farklı app deploy edelim. appler için hazır 2 farklı image kullandım manifestlerde image kısmında görebilirsiniz.

kubectl apply -f https://raw.githubusercontent.com/alperen-selcuk/ingress-controller/main/app1-deploy-svc.yamlkubectl apply -f https://raw.githubusercontent.com/alperen-selcuk/ingress-controller/main/app2-deploy-svc.yaml

iki app de 80 portunda çalışacak. çünkü containerlarda 80 portu expose edilmiş.

sırada ingress objesi yaratmakta, ingress i yaratırken Kind olarak Ingress kullanacağız başta bunun bir service türü olmadığından bir obje olduğundan bahsetmiştim.

host kaydı olarak nip.io kullanacağım, nip.io ile yönlendirme yapabilirsiniz. sadece IP değiştirerek istediğiniz bir host kaydı oluşturabilirsiniz. https://nip.io

yaptığımız işi şekle dökersek. ingress IP sine yaptıgımız isteklerde hangi /path e gidersek ona uygun service objesine trafiğin gitmesini sağladık.

o yüzden browserdan webapp.34.118.112.83.nip.io/webapp1 ve webapp.34.118.112.83.nip.io/webapp2 çağırdığımızda farklı applere gittiğini göreceksiniz. ben curl ile test edeceğim çıktıların farkını göreceksiniz.

app lerin manifestlerindeki imageleri değiştirerek daha farklı app ler için de kullanabilirsiniz. domaini değiştirerek istediğiniz gibi manipüle edebilirisniz.

faydalı bir yazı olması dileğiyle.

görüşmek üzere

h.a.s.

--

--