Nginx Ingress Hakkında

Ingress ve metallb kurulumu yapamya çalışıyorum. Aşağıdaki linkteki yönergeleri takip etmekteyim.

docs.nginx/nginx-ingress-controller/installation/installation-with-manifests [link ekleyemediğim için kısalltım bunun uzantısı com]

metallb.universe/installation [link ekleyemediğim için kısalltım bunun uzantısı tf]

ingress-class.yaml dosyası için

“The IngressClass “nginx” is invalid: spec.controller: Invalid value: “nginx.org/ingress-controller”: field is immutable” şeklinde bir hata alıyorum.

k8s-io/nginx ile oluşturdum o şekilde ekleme yaptı ama bu seferde podslar CrashLoopBackOff hatasına düşüyor

onun sebebide : IngressClass with name nginx has an invalid Spec.Controller k8s.io/ingress-nginx

nasıl bir çözüm uygulayabiliriz.

teşekkürler.

Bu arada 1 adet master ve 1 adet node mevcut. 2’side farklı serverlar üzerinde ve kendilerine ait tek IP adresleri var.

@ozgurozturknet yeni bir sunucu kurulumu yaptım haproxy ile trafiği içeriye yönlendirmek için. yönlendirdiğim trafik içeride çözülmüyor.

AWS, Azure yada GKE kullanmadan canlı ortamdaki bir cluster’ı nasıl internete aktarabiliriz ?

Bare-metal considerations - NGINX Ingress Controller (kubernetes.github.io)
Şuradaki yönergelere bir göz atar mısın? İstediğini bunu takip ederek gerçekleştirebilirsin.

@ozgurozturknet yönergeleri takip edip loadbalancer tipinde oluşturdum, master üzerinden domaine istek attığım zaman cevap alabiliyorum ama dış dünyadan istek yine gelmiyor.

master üstünden domaine istek attım ne demek? bunu açar mısınız?
Bunun dışında özetlemem gerekirse yapmanız gereken işlemler şu.
Diyelim ki 192.168.1.0/24 networkünde 3 makine “192.168.1.10 - 11 - 12 olsun” ayağa kaldırdınız ve kubernetes kurdunuz. Sonrasında metallb kurulumuna geçin:
kubectl edit configmap -n kube-system kube-proxy
komutuyla kube-proxy configmap’inizi açın. açılan ekranda strictARP: false değerini bulun ipvs: anahtarı altında. buradaki false’u silin true yapın. Sonra kaydedip kapatın dosyayı. sonra

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml

komutlarıyla metallb’i kurun. Ardından config.yaml diye bir dosya yaratın ve içeriği:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 172.28.172.10-172.28.172.100

Bu son satırdaki adres aralığını siz sizin kubernetes cluster makinelerinin bulunduğu adres aralığından boş bir adres aralığı olarak belirleyin. Bizim örnekteki gibi 192.168.1.10 - 11 - 12 kubernetes sunucularınız tarafından kullanılıyorsa - 192.168.1.100-192.168.1.200 LoadBalancer için kulllanacağınız blok olabilir. Dosyayı buna göre düzeltip kaydedin. ardından

kubectl apply -f config.yaml
komutuyla bu configi oluşturun. Bu noktadan itibaren artık kubernetes clusterınızda LoadBalancer tipinde servis yaratabileceksiniz ve servisin external ip adresi bu belirlediğiniz aralıktan olacak. Bu ipye gelen tüm istekler servise yönelecek. Gerisi de artık nginx kurulumu:

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

helm install ingress-nginx ingress-nginx/ingress-nginx

ingress kurulduktan sonra

kubectl get services ingress-nginx-controller -w

komutunu verin bir süre bekleyin sonrasında externalip adres kısmında bir ip göreceksiniz. İşte bu sizin ingress giriş ipniz olacak.

2 Beğeni

@ozgurozturknet nlatım ve özetleme için çok teşekkür ederim ama elimde böyle bir aralıkta ip yok 2 tane var biri master’da diğeride node için söylediğiniz gibi master’da pod deploy olmayacak yani elimde sadece 1 tane ip kalıyor sorunu orada yaşıyorum aslında.

¯_(ツ)_/¯ açıkçası ne diyebilirim bilemedim :slight_smile:

@ozgurozturknet abit bir ip ile dışarıdan istek almak pek mümkün değil gibi sanki öyle anlıyorum eğer cevap yoksa :slight_smile: Daha büyük bir yapıda yapmak lazım on premise kullanılan örnekler yok mu bildiğiniz ?

Siz hep cloud üzerinde mi yönetiyorsunuz kendiniz bir cluster hazırlamadınız mı ?

Hayır bu tam da onpremises örneği iste. Yani siz 2-3 sistem kurup bunlardan bir cluster oluşturduğunuz zaman bu makinelerin durduğu subnette 5-10 boş ip adresi bulunur diye düşünüyorum. Bunlari loadbalancer tipi servisin ip adresleri olarak atama işini metallb yapıyor. Metallb nin tüm görevi bu. Daha sonra siz bu sisteme dış dünyadan erismek istiyorsanız bir dış ip adresini bu loadbalancer ip adresine yönlendireceksiniz.

1 Beğeni

@ozgurozturknet deneyeceğim. Bugün bir erişim sağladım dış dünyadan ama sistemi sıfırladım emin olmak ve denemelerde oluşan artıkları temizlemek için tamamlanması durumunda tecrübelerimi paylaşmak isterim herkesle.

2 Beğeni

@Orgenus Hocam, ben de böyle bir yapı kurmaya çalışıyorum. Tecrübelerinizi yazmanız gerçekten güzel olur. Bir de on-premise ortamda persistent volume yapısını nasıl kurdunuz?

Merhabalar, yaklaşık 2 hafta gece gündüz bu işlemler için çaba harcadım ama düşündüğüm gibi zor bir yapı değilmiş sadece okumam gereken yerleri eksik okumaktan kaynaklı sorunlar oluşuyor. Şu an 1 master 3 worker node ve 1 tane disk sunucum var ingress, metallb kullanıyorum. NFS server yaptım custom provision class oluşturdum otomatik pvc ayarladığım zaman disk oluşuyor.

3 Beğeni

hocam detay verir misiniz?

Hocam belirttiginiz islemlerin ardindan external ip aldi 172.28.172.15 örnegin. curl ile iceriden ulasabiliyoruz. /etc/hosts dosyasina 172.28.172.15 qwe.asd.com yazinca, “curl qwe.asd.com” ile de iceriden erisiyoruz.

Disaridan erisim icin ekstra ne yapmaliyiz? DNS kaydinda linux makinenin ip sini *.k8s.subdomain olarak kaydettik. O servis icin de ingress tanimladik, ama disaridan erisemiyoruz.

Nereyi atladigimi bulamadim.

Ayrica udemy deki kursunuzda minikube ile ingress örnegi verirken minikube --driver linux icin virtualbox olmali dediniz. Burada docker neden ingress islemleri icin uygun degil?

Tesekkürler simdiden.

dışarıdan erişimden kastınız local bir ortamda birden fazla sanal makine ile kubernetes kurulumu üstünden dış dünyaya açmak ise metallb gibi bir çözüm kullanabilirsiniz.


yapmanız gereken şuradakş ? yere bir çözüm bulmak. O çözüm cloud ortamında cloud service providerlar tarafından sağlanıyor. Localde de metallb iyi bir çözüm.
ikinci sorunuza gelirsek, minikube mevzusu WSL kullandığınız zaman iyi bir çözüm değil. WSL windows içinde bir sanal makine aslında. Bunun ayrı bir networkü var. Siz bunun içinde docker kurduğunuz zaman docker sistemler de ayrı bir network üstünden konuşuyor. Ee bir de üstüne minikube ve kubernetes ingress kuruyoruz o da ayrı network. İşler çorba oluyor. O nedenle docker uygun değil.

Merhaba,
On premise k8s cluster kurulumu hakkında , Tecrübelerinizi yazdığınız bir blogunuz var ise paylaşırsanız seviniriz. Sektörde on premise prod ortamda kullanılacak k8s cluster kurulumu hakkında çok kaynak yok gibi