HA Kubernetes üzerine MetalLB ve Kong Ingress Kurulumu

Arif KIZILTEPE
3 min readSep 9, 2022

--

HA Kubernetes kurulumunu incelemek için şu yazımı okuyabilirsiniz.

1. MetalLB Kurulumu

Ingress işlemlerini yaparken cloud providerlar kendi ortamlarındaki servisleri entegre ederek Ingress işlemlerinde external ipleri bu servislerden sağlarlar. Bare-metal kurulumlarda Ingress işlemleri için gerekli olan external ip adreslerini sağlamak ve yönetmek için devreye metallb gidiyor.

Kuruluma geçmeden önce mutlaka incelemeniz gereken tablolardan biri supported platform

supported CNI plugins

Öncelikle Metallb kurulumunu yapıyoruz. Kurulum öncesinde kubernetes configlerinde bazı parametreleri değiştirmemiz gerekiyor.

kubectl edit configmap -n kube-system kube-proxy

Metallb kurulumunu yapıyoruz.

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml

Metallb kurulumu için son adım olaran ip pool konfigürasyonunu yapmamız gerekiyor. Bunun için metallb-config.yaml dosyalı oluşturulur ve create edilir.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 10.30.90.100/27 #Kendi ortamınıza göre değiştirmeniz gerekmektedir.

2. Kong Ingress Controller (KIC) Kurulumu

KIC kurulumu metallb kurulum ve ayarlarını yaptıktan sonra tek komut ile yapılabiliyor.

kubectl apply -f https://bit.ly/k4k8s

Kurulum tamamlandı kontrol ettiğimde metallb’de belirtiğim pool içerisinden bir ip adresi aldığını görüyorum.

kubectl -n kong get service kong-proxy

Bu ip adresini sanal sunucu dışından erişime açmak için sanal bir nic oluşturuyorum.

ifconfig ens192:0 10.30.90.96 netmask 255.255.255.0 up

3. Havada Kalmasın Akılda Kalsın( :) )

Senaryo: Benim elimde foo ve bar adında 2 tane uygulama olsun. Ben bunları KIC ile kubernetes ekosisteminin dışından erişilebilir duruma getirmek istiyorum. Erişim içinde
EXTERNAL_IP/foo → foo application
EXTERNAL_IP/bar → bar application

Hadi halledelim şu işi.

Öncelikle foo ve bar uygulamaları için deployment ve service tanımlarını yapıyoruz.

#foo application
apiVersion: apps/v1
kind: Deployment
metadata:
name: foo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: foo
template:
metadata:
labels:
app: foo
spec:
containers:
- name: api
image: digitalronin/foo-microservice:0.1
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: foo-service
labels:
app: foo-service
spec:
ports:
- port: 5000
name: http
targetPort: 5000
selector:
app: foo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: foo
namespace: default
spec:
ingressClassName: kong
rules:
- http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: foo-service
port:
number: 5000
#bar application
apiVersion: apps/v1
kind: Deployment
metadata:
name: bar-deployment
spec:
replicas: 1
selector:
matchLabels:
app: bar
template:
metadata:
labels:
app: bar
spec:
containers:
- name: api
image: digitalronin/bar-microservice:0.1
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: bar-service
labels:
app: bar-service
spec:
ports:
- port: 5000
name: http
targetPort: 5000
selector:
app: bar
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: bar
namespace: default
spec:
ingressClassName: kong
rules:
- http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: bar-service
port:
number: 5000

Apply edelim.

kubectl apply -f foo.yaml
kubectl apply -f bar.yaml

Erişmeye çalışıyoruz ve tam istediğimiz gibi çalışıyor.

--

--

No responses yet