- Önerilen Yöntem: Özel YAML
- Yüksek Erişilebilirlik (HA) Yapısı
- Kullanım
- Doğrulama
- Sorun Giderme
- Dosya Özellikleri
- Neden Bu Yöntem?
- Hızlı Test
- Detaylı Bilgi
Projede k8s/ingress-nginx-deployment.yaml dosyası hazır! Bu dosya Kind için optimize edilmiş ve şu ayarları içeriyor:
spec:
replicas: 3 # HA için 3 replica (her worker node'da 1 replica)
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0 # Zero downtime
maxSurge: 1 # Progressive rollout
template:
spec:
hostNetwork: true # Host ağını kullan (port 80/443)
nodeSelector:
ingress-ready: "true" # Worker node'larda çalış
# tolerations yok - control-plane'de ÇALIŞMASIN┌─────────────────────────────────────────────────────────┐
│ 3 Control Plane Nodes │
│ (Kubernetes yönetimi - Ingress çalışmaz) │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 3 Worker Nodes (HA Setup) │
│ │
│ Worker-1 Worker-2 Worker-3 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Ingress │ │ Ingress │ │ Ingress │ │
│ │ Replica1 │ │ Replica2 │ │ Replica3 │ │
│ │ :80/443 │ │ :80/443 │ │ :80/443 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ingress-ready=true ingress-ready=true ingress-ready=true │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────┐
│ HAProxy LB │
│ localhost:80 │
│ localhost:443 │
└─────────────────┘
- ✅ 3 Replica: Her worker node'da 1 Ingress controller
- ✅ Zero Downtime: Rolling update ile kesintisiz güncelleme
- ✅ Load Balancing: HAProxy trafiği 3 worker'a dağıtır
- ✅ Fault Tolerance: 1-2 node çökerse sistem çalışmaya devam eder
- ✅ Progressive Rollout: Aynı anda sadece 1 replica güncellenir
make deployScript otomatik olarak:
k8s/ingress-nginx-deployment.yamlvarsa onu kullanır- Yoksa Kind'ın varsayılanını kullanır ve patch uygular
# Sadece Ingress Controller kur
kubectl apply -f k8s/ingress-nginx-deployment.yaml
# Hazır olmasını bekle
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
# Kontrol et
kubectl get pods -n ingress-nginx -o wide# Ingress kur
make install-ingress
# Kontrol et
kubectl get pods -n ingress-nginx -o wide# 1. Pod'lar worker node'larda mı? (3 replica)
kubectl get pods -n ingress-nginx -o wide
# NODE: kind-worker, kind-worker2, kind-worker3 olmalı
# READY: 3/3
# 2. hostNetwork true mu?
kubectl get pod -n ingress-nginx -l app.kubernetes.io/component=controller -o yaml | grep hostNetwork
# hostNetwork: true
# 3. nodeSelector doğru mu?
kubectl get pod -n ingress-nginx -l app.kubernetes.io/component=controller -o yaml | grep -A 2 nodeSelector
# nodeSelector:
# ingress-ready: "true"
# kubernetes.io/os: linux
# 4. Tolerations yok mu? (control-plane'de çalışmamalı)
kubectl get pod -n ingress-nginx -l app.kubernetes.io/component=controller -o yaml | grep -A 2 tolerations
# Çıktı boş olmalı veya sadece node.kubernetes.io/not-ready gibi varsayılan tolerations
# 5. RollingUpdate strategy doğru mu?
kubectl get deployment -n ingress-nginx ingress-nginx-controller -o yaml | grep -A 3 "strategy:"
# maxSurge: 1
# maxUnavailable: 0
# 6. Test - HAProxy üzerinden erişim
curl http://api-csharp.local/api/datetime
curl http://web-csharp.localkubectl get pods -n ingress-nginx -o wide
# NODE: kind-control-plane, kind-control-plane2, kind-control-plane3 ❌ YANLIŞ!
# Çözüm 1: Deployment'ı güncelle (önerilen)
kubectl delete deployment -n ingress-nginx ingress-nginx-controller
kubectl apply -f k8s/ingress-nginx-deployment.yaml
# Çözüm 2: Cluster'ı yeniden oluştur
make clean-all
make deploykubectl get nodes --show-labels | grep ingress-ready
# Çıktı boş ise label yok
# Çözüm: Label ekle
kubectl label node kind-worker ingress-ready=true --overwrite
kubectl label node kind-worker2 ingress-ready=true --overwrite
kubectl label node kind-worker3 ingress-ready=true --overwrite
# Ingress pod'larını yeniden oluştur
kubectl rollout restart deployment -n ingress-nginx ingress-nginx-controllerkubectl get pods -n ingress-nginx
# STATUS: Pending
kubectl describe pod -n ingress-nginx <pod-name>
# 0/6 nodes are available: 3 node(s) had untolerated taint, 3 node(s) didn't match Pod's node affinity/selector
# Çözüm: Worker node'lara label ekle (Sorun 2'ye bak)curl http://api-csharp.local/api/datetime
# Connection refused veya timeout
# 1. HAProxy çalışıyor mu?
docker ps | grep haproxy
# 2. HAProxy config doğru mu?
cat haproxy/haproxy.cfg | grep -A 5 "backend k8s"
# 3. Ingress pod'ları hazır mı?
kubectl get pods -n ingress-nginx
# Çözüm: HAProxy'yi yeniden başlat
cd haproxy
docker-compose down
docker-compose up -dk8s/ingress-nginx-deployment.yaml:
- 🔹 Tam NGINX Ingress Controller deployment
- 🔹 HA setup için optimize edilmiş (3 replica)
- 🔹 Worker node'lara deployment (nodeSelector)
- 🔹 Zero downtime rollout (RollingUpdate strategy)
- 🔹 ~450 satır (tüm gerekli resource'lar)
İçerik:
- ✅ Namespace (ingress-nginx)
- ✅ ServiceAccount
- ✅ ConfigMap (optimize edilmiş ayarlarla)
- ✅ ClusterRole & ClusterRoleBinding
- ✅ Role & RoleBinding
- ✅ Service (NodePort)
- ✅ Deployment (⭐ kritik ayarlarla):
replicas: 3- HA içinhostNetwork: true- Host network kullanımınodeSelector: ingress-ready=true- Worker node placementmaxSurge: 1, maxUnavailable: 0- Progressive rollout- ReadinessProbe:
initialDelaySeconds: 5, periodSeconds: 5- Optimize edilmiş
- ✅ IngressClass
kind-config.yaml:
- 🔹 3 Control Plane Nodes (HA)
- 🔹 3 Worker Nodes (Ingress için)
- 🔹 Worker node'larda
ingress-ready=truelabel - 🔹 Port mapping YOK (HAProxy kullanılıyor)
| Özellik | Özel YAML (Mevcut) | Patch | Kind Varsayılan |
|---|---|---|---|
| Kontrol | ✅ Tam | ❌ Yok | |
| HA Support | ✅ 3 replica | ❌ 1 replica | ❌ 1 replica |
| Worker Placement | ✅ Otomatik | ❌ Control-plane | |
| Versiyon Kontrol | ✅ Git'te | ❌ Runtime | ❌ Remote |
| Tutarlılık | ✅ Her zaman | ❌ Rastgele | |
| Zero Downtime | ✅ RollingUpdate | ❌ Yok | ❌ Yok |
| HAProxy Entegre | ✅ Uyumlu | ❌ Uyumsuz | |
| Production Ready | ✅ Evet | ❌ Hayır | ❌ Hayır |
- ✅ High Availability: 3 replica, fault tolerance
- ✅ Best Practice: Worker node'larda çalışma (control-plane temiz kalır)
- ✅ Zero Downtime: Progressive rollout ile kesintisiz güncelleme
- ✅ Load Balancing: HAProxy ile trafik dağıtımı
- ✅ Consistent: Git'te versiyonlanmış, her deployment aynı
- ✅ Optimized: ReadinessProbe, RollingUpdate strategy optimize edilmiş
# 1. Cluster oluştur (HA setup ile)
make clean-all
make deploy
# 2. Node'ları kontrol et (3 control-plane + 3 worker olmalı)
kubectl get nodes
# 3. Ingress pod'larını kontrol et (3 replica, worker node'larda)
kubectl get pods -n ingress-nginx -o wide
# 4. HAProxy durumu
docker ps | grep haproxy
# 5. Test et (HAProxy üzerinden)
curl http://api-csharp.local/api/datetime
curl http://web-csharp.local
# Beklenen: JSON response ve HTML response ✅- LOAD_BALANCING: HAProxy ve load balancing detayları
- INGRESS_ROUTING: Routing mekanizması
- README: Genel dokümantasyon
Sonuç: k8s/ingress-nginx-deployment.yaml kullanarak Ingress Controller HA yapısıyla worker node'larda çalışacak! 🎉
Son Güncelleme: 2025-10-31 Versiyon: 2.1 Proje: DateTime Kubernetes Polyglot Microservices