AzureDevOpsGenel

Kubernetes | MetalLB – Ingress Kurulum ve Konfigürasyonu

Ingress Nedir ?

Kubernetes ingress sayesinde podlarınıza tek bir ip adresi veya http protokolü üzerinden erişim sağlayabilirsiniz. Diğer bir deyişle erişimlerinizi dışarıya açabilirsiniz.

Kaynak: https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

Ortamlarınızda kullanabileceğiniz haproxy-treafik vb bir çok farklı ingress tool bulunmaktadır. Biz bu uygulamamızda sıkça kullanılan nginx ingress kullanacağız.

METALLB Nedir ?

MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols.

Neden MetalLB kullanmalıyız ?

Kubernetes does not offer an implementation of network load balancers (Services of type LoadBalancer) for bare-metal clusters. The implementations of network load balancers that Kubernetes does ship with are all glue code that calls out to various IaaS platforms (GCP, AWS, Azure…). If you’re not running on a supported IaaS platform (GCP, AWS, Azure…), LoadBalancers will remain in the “pending” state indefinitely when created.

1-MetalLB Kurulumu

MetalLB: Cloud ortamlarda (AWS, Azure ve Google cloud) üzerindeki Kubernetes cluster’ınızdaki bir servisi dışarıya açmak istediğiniz servisi LoadBalancer tipinde bir servis açtığınızda otomatik olarak bir IP atanmakta ve servis o pod’a external IP’yi kullanarak ulaşabilirsiniz. Fakat on-prem cluster’da LoadBalancer ip alabilmek için MetalLb kurulumu yaparak bir ip pool set edip o pool’dan LB ip ataması yapabilirsiniz.

Kurulumdan önce Kubernetes configmap dosyasında aşağıdaki ayarları güncelliyoruz.

kubectl edit configmap -n kube-system kube-proxy
Bu kısmı true olarak editliyoruz ve kaydediyoruz.

Helm’e repo ekliyoruz.
helm repo add bitnami https://charts.bitnami.com/bitnamiNamespace oluşturuyoruz.
kubectl create ns metal-lb


MetalLB kurulumunu Helm ile başlatıyoruz.
helm install -n metal-lb metal-lb bitnami/metallb

Kurulum tamamlandıktan sonra ip pool belirlemek için aşağıdaki İPAddressPool yaml file çalıştırıyoruz.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.1.200-192.168.1.250
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2
  namespace: metal-lb

kubectl apply -f ippool.yaml

MetalLb kurulumu ve konfigürasyonu tamamlandı.

2-Ngnix Ingress Kurulumu

https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx

-Yeni bir namespace oluşturuyoruz;
kubectl create ns ingress-nginx

Helm repo olarak ekliyoruz.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update


Install (Default namespace)
helm install ingress-nginx/ingress-nginx Kurulum sonrası LoadBalancer type olarak 1 servis ve admission controllerini yapan 2.servis nginx controller çalıştığı 1 pod oluşturuldu.

-MetalLb ve Nginx Controller uygulamaları kurulduğuna göre kendi örnek uygulamamızı ayağa kaldırabiliriz.

-Linkten projeyi github üzerinden clonelayabilirsiniz.

https://github.com/onuromertunc/ingressexample/tree/main

Sırasıyla önce dp1-dp2-dp3 apply ediyoruz ve sonrasında cm1-cm2-cm3 configmap’leri apply diyoruz ve sonra svc1-svc3-svc3 dosyalarını apply diyoruz. Son olarak ingress.yaml dosyasını oluşturarark rules aktif ediyoruz.

Son haliyle test isimli namespace’de aşağıdaki gibi bir resource table olmalı.

-Ingress dosyamıza bakalım.

Ingress create ettikten sonra metallb sayesinde bize local baremetal cluster üzerinde bir loadbalancer ip adresi üretti. Bunu bizim ip pool’da tanımladığımız aralıktan verdi.

login.omerdevops.tunc url’e gelen istekleri login isimli service url sonuna /login yazıldığında forgot isimli servise yönlendirildi. Aynı şekilde payment.omerdevops.tunc url istek geldiğinde payment isimli service yönlendirildi.


Tarayıcı testleri


Diagram


kubernetes-metallb-ingress-onuromertunc