NginxInc Nginx Ingress Controller kurulumu

Kubernetes üzerinde Ingress Controller için birden farklı ürün kullanılabilmekte. Bu ürünler arasında öne çıkanlardan birisi olan Nginx için hem Kubernetes tarafından hem de Nginx tarafından birer Ingress Controller yayınlanmış durumdadır. Bir önceki makalemde Kubernetes tarafından yayınlanan versiyonuna dair kurulum adımlarını paylaşmıştım. Aşağıdaki adımlar takip edilerek Centos 7 Minimal üzerine kurulu Kubernetes Cluster’ında Nginx tarafından yayınlanmış haliyle Nginx Ingress Controller kurulumu yapılabilir. Her ne kadar Nginx kurulumu için Helm patikasının takip edilmesi daha kolay olsa da bu makalemde öncelikle zor yoldan (ya da uzun yoldan mı demeliyim) ilerlemek istiyorum. Bu sayede yapılandırma hakkında da fazla bilgi ve kontrol sahibi olabilirsiniz.

Nginx Ingress Controller kurulumu için öncelikle sunucu üzerinde git kurulu olmalıdır. Sunucuda git kurulu değil ise aşağıdaki komut kullanılabilir;

yum install -y git

Yapılandırmalar için kullanılacak Nginx deposu yerele kopyalanır;

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

Tanımlamaların yapılacağı deployments klasörüne geçilir;

cd kubernetes-ingress/deployments/

Ingress Controller için kullanılacak namespace ve servis hesapları oluşturulur;

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

Default server için TLS sertifikası ile bir secret oluşturulur;

kubectl apply -f common/default-server-secret.yaml

Not: Bu adımda SSL testleri için bir ssl sertifikası ve anahtar tanımlanacaktır.

Default server herhangi bir ingress tanımı olmayan domain’ler için 404 dönecektir.

Nginx yapılandırması için bir configmap oluşturulur;

kubectl apply -f common/nginx-config.yaml

nginx-config.yaml dosyası incelendiğinde boş bir configmap olduğu görülecektir. Kurulumda özelleştirme istenirse buraya ilgili parametre değerleri girilmelidir. Kullanılabilecek değerler için Nginx-Ingress Controller dokümantasyonu incelenebilir.  Aynı sayfada ingress oluştururken kullanabileceğiniz annotation’ları da bulabilirsiniz.

Kurulumunuzda Virtual Server ve Virtual Server Route kaynaklarını kullanmak isterseniz aşağıdaki komutla gerekli kaynak tanımlarını yapmalısınız;

kubectl apply -f common/custom-resource-definitions.yaml

Eğer RBAC aktif ise bir cluster role oluşturulur ve servis hesabına bağlanır;

kubectl apply -f rbac/rbac.yaml

Ingress Controller Deploy’u

Yukarıdaki adımlarla hazırladığımız Kubernetes Cluster’ımıza Deployment ya da DaemonSet  olarak Nginx Ingress Controller kurulumu yapılabilir. DaemonSet kurulumunda Cluster’a yeni üyelerin eklenmesi ile otomatik olarak yatayda bütüme elde edilebilirken, Deployment kurulumunda yatayda büyüme için daha fazla kontrol sahibi olunacaktır. Cluster’ınızın ihtiyaçlarını göz önüne alarak bu iki seçenekten mimarinize uygun olanı seçmelisiniz.

Ingress Contoller’ı Deployment Olarak Yapılandırmak

Deployment olarak kullanılmak istenirse; aşağıdaki komutla ingress controller oluşturulur;

kubectl apply -f deployment/nginx-ingress.yaml

Ingress Controller’ınızı Prometheus yardımıyla izlemek isterseniz nginx-ingress.yaml dosyasında args bölümünde -enable-prometheus-metrics parametresini vermeniz gerekmektedir. Prometheus’un yayınlanan metriklerden haberdar olması için aynı dosyada template bölümüne aşağıdaki annotation’ların da girilmesi gerekmektedir;

annotations:
     prometheus.io/scrape: "true"
     prometheus.io/port: 9113

Bu işlemlerde ardından dışarıdan erişim için nodeport oluşturulur;

kubectl create -f service/nodeport.yaml

Ingress Controller’ı DaemonSet olarak Yapılandırmak

Deamonset olarak kullanılmak istenerse; aşağıdaki komutla ingress controller oluşturulur;

kubectl apply -f daemon-set/nginx-ingress.yaml

Ingress Controller’ınızı Prometheus yardımıyla izlemek isterseniz nginx-ingress.yaml dosyasında args bölümünde -enable-prometheus-metrics parametresini vermeniz gerekmektedir. Prometheus’un yayınlanan metriklerden haberdar olması için aynı dosyada template bölümüne aşağıdaki annotation’ların da girilmesi gerekmektedir;

annotations:
     prometheus.io/scrape: "true"
     prometheus.io/port: 9113

Kurulum Doğrulaması

Kurulumun doğruluğu için aşağıdaki komut kullanılabilir;

kubectl get pods --namespace=nginx-ingress

get-pods-nginx-ingress

curl ile tüm worker node’ların 80 portuna talep gönderildiğinde 404 Not Found yanıtı alınacaktır;

nginx-ingress-404

Ingress Controller Test

Ingress Controller Kubernetes içerisinde bir ingress oluşturularak test işlemi yapılabilir. Bunun için aşağıdaki içerikle app.ingress.yaml dosyası oluşturulur;

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echoserver-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      labels:
        app: echo
    spec:
      containers:
        - name: my-echo
          image: gcr.io/google_containers/echoserver:1.8
---
apiVersion: v1
kind: Service
metadata:
  name: echoserver-svc
spec:
  selector:
    app: echo
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echoserver-ingress
  annotations:
    INGRESS.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: ingress-test.enterprisecoding.com
      http:
        paths:
          - path: /echoserver
            backend:
              serviceName: echoserver-svc
              servicePort: 8080

Aşağıdaki komutla ingress oluşturulur;

kubectl create -f app.ingress.yaml

Aşağıdaki komutla ingress kontrol edilir;

kubectl get ing

app-ingress

Aşağıdaki komutla Worker node’lardan birisine yapılacak talep echoserver pod’una yönlendirilecektir;

curl http://k8s-w1/echoserver  -H "Host: ingress-test.enterprisecoding.com"

ingress-test

Nginx Ingress Controller’ı kaldırma

Nginx Ingress Controller’ı kaldırmak için aşağıdaki komutla kurulumun yapıldığı namespace’in silinmesi yeterli olacaktır;

kubectl delete namespace nginx-ingress

Fatih Boy

Ankara'da yaşayan Fatih, kendi şirketinde özellikle bankacılık, sigortacılık ve otomotiv sektörlerinde IT danışmanlıkları vermektedir. Devops, ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.