Home TürkçeKubernetes NginxInc Nginx Ingress Controller kurulumu

NginxInc Nginx Ingress Controller kurulumu

by Fatih Boy
0 comment

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 komutla app.ingress.yaml dosyası oluşturulur;

cat > app.ingress.yaml <<EOF
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
EOF

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

Şu Yazıları da Sevebilirsiniz

Leave a Comment

* Bu formu kullanarak, verilerinizin bu web sitesi tarafından saklanması ve kullanılmasını kabul ediyorsunuz.

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

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul Et Daha Fazla Bilgi