Yeni Başlayanlar İçin Kubernetes Ingress Eğitimi
Kubernetes Ingress, dış kaynaklardan kubernetes cluster’daki service’lere kurallar ekleyerek trafik yönlendirmek için kullanılan bir kaynaktır.
Bu Kubernetes giriş eğitim serisinde, dış trafiği Kubernetes deployment’larına yönlendirmek için kullanılan ingress ve ingress controller kavramını öğreneceksiniz.
Kubernetes Ingress Eğitimi
Başlamak için iki önemli şeyi anlamanız gerekir.
- Kubernetes Ingress
- Kubernetes Ingress Controller
Bu kavramların her birine bir göz atalım.
Kubernetes Ingress:
Kubernetes Ingress, trafiği harici bir kaynaktan cluster içinde bulunan service endpoint’lerine yönlendirmek için kurallara sahip olabileceğiniz yerel bir kubernetes kaynağıdır.Ingress’de belirtilen kuralları yönlendirmek için bir ingress controller gerektirir. Bir ingress nesnesi aşağıdakine benzer.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
namespace: development
spec:
rules:
- host: test.sunucucozumleri.com
http:
paths:
- backend:
serviceName: hello-service
servicePort: 80
Yukarıdaki ingress, test.sunucucozumleri.com‘a yapılan tüm çağrıların development namespace’inde bulunan hello-service ismindeki service’e yönlendirilmesi gerektiği anlamına gelir.
Ingress hakkında anlaşılması gereken önemli noktalar.
- Service’lerin dağıtıldığı namespace’de ingress kuralları oluşturmalısınız. Trafiği, ingress’e sahip olmadığınız farklı bir namespace’deki bir service’e yönlendiremezsiniz.
- Bir ingress, trafiği yönlendirmek için bir ingress controller gerektirir.
- Harici trafik, ingress API’na vurmaz, bunun yerine ingress controller service’ine vurur
Kubernetes Ingress Controller
Ingress controller, genellikle cluster’da dağıtılan bir proxy service’idir. service ile expose edilmiş kubernetes deployment’dan başka birşey değildir. Aşağıda kubernetes için kullanılabilen ingress controller bulunmaktadır.
- Nginx Ingress Controller (Community & From Nginx Inc)
- Traefik
- HAproxy
- Contour
- GKE Ingress Controller
- Skipper
Genellikle, Nginx bir ingress controller olarak yaygın olarak kullanılmaktadır. Nginx ingress controller şu şekilde çalışır.
- Nginx controller pod’unun içindeki nginx.conf dosyası, Kubernetes ingress API’siyle konuşabilen ve trafik yönlendirmesi için en son değerleri gerçek zamanlı olarak alabilen bir go template’idir.
- Nginx controller, trafik yönlendirmesi için oluşturulmuş bir kural olup olmadığını kontrol etmek için Kubernetes ingress API’sı ile konuşur.
- Herhangi bir ingress kuralı bulursa , go template’inde kullanan pod içindeki bir dosya olan nginx.conf nginx controller yapılandırmasına uygulanır .
Pod’a exec kullanarak bağlanır ve /etc/nginx/nginx.conf dosyasını kontrol ederseniz, conf dosyasında uygulanan ingress nesnesinde belirtilen tüm kuralları görebilirsiniz.
Örnek olarak;
kubectl get pods -n ingress-nginx
yukardaki komutun sonucunda gelen pod ismi ile aşağıdaki gibi ilgili config dosyası görünebilir.
kubectl exec nginx-ingress-controller-dfb855c4b-b497z cat /etc/nginx/nginx.conf -n ingress-nginx
İşte kubernetes cluster’da ingress kurulumunu açıklayan mimari diyagram.