NGINX Ingress Controller
NGINX Ingress Controller, Kubernetes kümelerinde gelen HTTP ve HTTPS trafiğini yönlendirmek için kullanılan bir Ingress Controller'dır. NGINX, hızlı ve yüksek performanslı bir web sunucusu ve ters proxy olarak bilinir. NGINX Ingress Controller, bu güçlü özelliklerini kullanarak Kubernetes ortamında gelen istekleri yönlendirir, yük dengelemesi yapar ve SSL/TLS şifrelemesi gibi özellikleri sağlar.
NGINX Ingress Controller, Kubernetes ortamında çalışan birçok pod'a gelen istekleri yönlendirmek için kullanılır. Bu pod'lar, farklı uygulama hizmetlerini temsil edebilir. NGINX Ingress Controller, gelen istekleri Ingress kaynaklarındaki kurallara göre eşleştirir ve uygun pod'a yönlendirir.
NGINX Ingress Controller'ın bazı temel özellikleri şunlardır:
-
Yük Dengelemesi: NGINX, gelen istekleri pod'lar arasında dengeli bir şekilde dağıtarak yük dengelemesi yapar. Bu, uygulama hizmetlerinin daha iyi ölçeklenebilirlik ve yüksek kullanılabilirlik sağlamasına yardımcı olur.
-
İşletim Kuralı ve Yönlendirme: NGINX Ingress Controller, Ingress kaynaklarındaki tanımlı kurallara dayanarak gelen istekleri doğru hedeflere yönlendirir. Örneğin, belirli bir yol veya ana bilgisayar adına gelen istekleri belirli bir hizmete yönlendirebilir.
-
SSL/TLS Şifrelemesi: NGINX Ingress Controller, gelen isteklerin güvenliğini sağlamak için SSL/TLS şifrelemesini destekler. Bu sayede iletişim şifrelenir ve gizlilik sağlanır. SSL/TLS sertifikaları, Ingress kaynakları üzerinde yapılandırılarak kullanılabilir.
-
Güvenlik: NGINX, WAF (Web Application Firewall) gibi güvenlik önlemlerini uygulamak için yapılandırılabilir. Bu, gelen isteklerin güvenliğini artırır ve olası saldırılara karşı koruma sağlar.
-
Özelleştirilebilirlik: NGINX Ingress Controller, kullanıcıların ihtiyaçlarına uyacak şekilde geniş bir yapılandırma ve özelleştirme seçenekleri sunar. Bu, özelleştirilmiş proxy ayarları, yönlendirme kuralları ve hata sayfaları gibi özellikleri yapılandırmanıza olanak sağlar.
NGINX Ingress Controller, geniş bir topluluk tarafından desteklenen ve yaygın olarak kullanılan bir Ingress Controller'dır. Hızlı, güvenilir ve ölçeklenebilir olması, Kubernetes ortamında gelen trafiği yönlendirmek için tercih edilmesini sağlar.
Özetlemek gerekirse, NGINX Ingress Controller, Kubernetes kümelerinde gelen HTTP ve HTTPS trafiğini yönlendirmek için kullanılan güçlü bir Ingress Controller'dır. Yük dengelemesi, yönlendirme, SSL/TLS şifrelemesi ve güvenlik gibi özellikleri ile uygulama hizmetlerini daha güvenli, ölçeklenebilir ve yüksek performanslı hale getirir.
KURULUM
Helm paket yöneticisi kullanıyorsanız:
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
kubectl ile yüklemek istiyorsanız:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.0/deploy/static/provider/cloud/deploy.yaml
minikube kullanıyorsanız:
minikube addons enable ingress
MicroK8s kullanıyorsanız:
microk8s enable ingress
ÖRNEKLER
- Basit Bir Yönlendirme Senaryosu: Kubernetes kümelerinde gelen istekleri belirli bir uygulama hizmetine yönlendirmek için NGINX Ingress Controller kullanabilirsiniz. Örneğin, gelen isteklerin "/api" yolu için "api-service" adlı bir uygulama hizmetine yönlendirilmesini isteyelim. İşte bu senaryonun bir YAML örneği:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
spec:
rules:
- http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
Bu YAML dosyasında, "/api" yolu için bir kural tanımlıyoruz ve bu yolun "api-service" adlı bir hizmete yönlendirilmesini sağlıyoruz.
- SSL/TLS Şifrelemesi Ekleme: NGINX Ingress Controller, gelen isteklerin SSL/TLS ile şifrelenmesini destekler. Örneğin, "example.com" ana bilgisayar adına gelen isteklerin HTTPS üzerinden yönlendirilmesini sağlayalım. İşte bu senaryonun bir YAML örneği:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
tls:
- hosts:
- example.com
secretName: example-tls
Bu YAML dosyasında, "example.com" ana bilgisayar adına gelen isteklerin SSL/TLS ile şifrelenmesini sağlamak için gerekli ayarları yapılandırıyoruz. Ayrıca, Let's Encrypt gibi bir sertifika sağlayıcısından alınan bir sertifika kullanmak için "letsencrypt-prod" adlı bir ClusterIssuer belirtiyoruz.
- Yük Dengelemesi Ekleme: NGINX Ingress Controller, gelen istekleri birden fazla pod arasında dengeli bir şekilde dağıtarak yük dengelemesi yapabilir. Örneğin, "web-service" adlı bir hizmetin arkasındaki pod'ları yük dengelemesiyle yönlendirelim. İşte bu senaryonun bir YAML örneği:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
ingressClassName: nginx
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
Bu YAML dosyasında, "web-service" adlı bir hizmetin arkasındaki pod'ları yük dengelemesiyle yönlendirmek için gerekli ayarları yapılandırıyoruz. Yük dengelemesi için "cookie" tabanlı bir oturum dengeleyici kullanıyoruz.
kubectl get services ingress-nginx-controller -n ingress-nginx
Komutunu çalıştırdığımızda Kubernetes LoadBalancer External IP Pending şeklinde kalıyorsa:
ingress-nginx namespace'in servislerindeki ngress-nginx-controller el ile düzenleyip
externalIPs:
- 192.168.1.101
alanını eklememiz gerekebilir. On-Premise Kubernetes Cluster'da external ip otomatik olarak atanamayabilir.
NGINX Ingress Controller ile birçok farklı senaryoyu destekleyebilirsiniz. Örneklerdeki YAML dosyaları, bu senaryoların nasıl yapılandırılabileceği konusunda size bir fikir vermektedir. İhtiyaçlarınıza ve tercihlerinize bağlı olarak, farklı özellikleri ve ayarları kullanarak NGINX Ingress Controller'ı daha da özelleştirebilirsiniz.
Hoşcakalın..