Linux

Kubernetes Nginx Controller Kurulumu ve Ingress Kullanımı

kubernetes nginx ingress controller
Share

Bu yazımda, Nginx ingress controller kullanarak Kubernetes’de nasıl ingress kullancağımızı ve trafiği joker karakter’li DNS kaydı kullanarak deployment’lara nasıl yönlendireceğinizi öğreneceksiniz.

Kubernetes ingress’in nasıl çalıştığını anlamak istiyorsanız, lütfen Yeni Başlayanlar İçin Kubernetes Ingress Eğitimi’daki bu blog gönderisini okuyun.

İşte Nginx ingress controller kullanan Kubernetes ingress örnek mimarisi

kubernetes ingress 1

Ön şartlar:

  1. Bir Kuberntes cluster.
  2. kubectl yardımcı programı.
  3. Kubernetes cluster’a yönetici erişimi.
  4. Ingress controller load balancer’ına işaret etmek için geçerli bir etki alanı.

Not: Bu eğitici, AWS üzerinde buluan bir kubernetes cluster’ında denendi. Mantıken tüm bulut ortamlarında çalışmalıdır. Eğer herhangi bir hatayla karşılaşırsanız, kurulumda bazı ayarlamalar yapmanız gerekebilir.

Nginx Ingress Controller Kurulumu

İki adet nginx ingress controller vardır.

  1. Kubernetes topluluğu tarafından sunulan Nginx ingress controller
  2. Nginx Inc tarafından üretilen Nginx ingress controller

Ben Kubernetes topluluğu tarafından sunulan Nginx ingress controller‘ı kullanacağım.

Ingress controller’ın belirli bir namespace, service account, cluster role vb. bağlarına, yapılandırmalara İhtiyacı vardır. Resmi ingress deposundan yaml dosyasını kullanarak belirtilen tüm kubernetes nesnelerini oluşturabilirsiniz .

Resmi ingress deposundaki mandatory.yaml dosyasını kullanarak ingress controller’ı deploy edelim.

Kubectl kullanarak Nginx ingress deployment oluşturalım.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

İpucu: Eğer 1.14 önceki bir Kubernetes sürümünü kullanıyorsanız, mandatory.yaml dosyasının 217. satırında kubernetes.io/os satırını beta.kubernetes.io/os ile değiştirin.
Dosyayı indirip vim ile düzenleyelim.


wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
vim mandatory.yaml

217. satırda bulunan kubernetes.io/os: linux kısmı beta.kubernetes.io/os: linux ile değiştirip dosyayı kaydedip çıkalım ve bu şekilde deployment oluşturalım.
kubectl apply -f mandatory.yaml
sonrasında bu şekilde bir output görmeniz gerekiyor.


namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
configmap/udp-services created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.apps/nginx-ingress-controller created
limitrange/ingress-nginx created

Ingress Controller pod’larının doğru ayarlandığından emin olmak için kontrol edelim.

kubectl get pods -n ingress-nginx

 

Ingress controller için LoadBalancer service’ini ayarlama

Sonraki adım, nginx ingress deployment’ını kümenin dışına erişime açmak için Type’ı Loadbalancer olan bir service oluşturmaktır.

Bu kurulumda, ELB’yi hangi katmanda (L4 veya L7) yapılandırmak istediğimizi seçmenizi gerektirir:

  • Layer 4 : 80 ve 443 numaralı bağlantı noktaları için listener protokolü olarak TCP kullanın.
  • Layer 7 : 80 numaralı bağlantı noktası için listener protokolü olarak HTTP kullanın ve ELB’de TLS’yi sonlandırın

Ben layer 7 olarak bir yapılandırma yapacağım. bkz

Adım 1: daha önceden oluşturduğumuz nginx-configiration configmap aşağıdaki şekilde güncellememiz gerekiyor.


kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/patch-configmap-l7.yaml
configmap/nginx-configuration configured

Adım 2: Yerel olarak bir proje dizini oluşturun ve bu dizine geçin.

mkdir ingress-deployment
cd ingress-deployment

Adım 3: nginx-ingress.yaml adlı bir dosya oluşturun
vim nginx-ingress.yaml

Adım 4: Aşağıdaki içeriği dosyaya kopyalayın.

Not : Etiketlerin altındaki ek açıklamalar, nginx denetleyicisi dağıtımıyla entegrasyon için çok önemlidir.

kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https

Adım 5: Ingress Controller service’ini oluşturun.
kubectl apply -f nginx-ingress.yaml

Adım 5: Oluşturulan service’i kontrol edin.

kubectl get svc -n ingress-nginx

Bir Alan Adını Loadbalancer IP’siyle Eşleme

Ingress ayarlarımızın çalışmasını sağlamak için, loadbalancer IP’siyle (veya CNAME) bir alan adı eşlememiz gerekir. Bunu iki şekilde yapabilirsiniz.

Tek DNS Eşlemesi:
Tek etki alanını doğrudan yük dengeleyici IP’sine A kaydı olarak eşleyebilirsiniz. Bunu kullanarak, giriş denetleyicisi için yalnızca bir etki alanına ve birden çok path’e dayalı trafik yönlendirmesine sahip olabilirsiniz.

Örneğin,

www.sunucucozumleri.com –> Loadbalancer IP / CNAME

Bu modeli kullanarak yola dayalı yönlendirmeye sahip olabilirsiniz.