🤖 ExternalDNS ile DigitalOcean Kubernetes DNS Kayıtlarını Otomatik Yönetme
Kubernetes ortamlarında uygulamaları alan adıyla yayınlamak standarttır.
Ancak DNS kayıtlarını manuel yönetmek zaman kaybettirir ve hataya açıktır.
ExternalDNS, bu süreci tamamen otomatik hale getirir.
🚀 Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde:
- ExternalDNS’i Helm ile DOKS kümesine kurmayı
- Service ve Ingress kaynakları için DNS kayıtlarını otomatik oluşturmayı
- DigitalOcean DNS API ile A ve TXT kayıtlarını yönetmeyi
- Ingress ve LoadBalancer senaryolarını test etmeyi
öğreneceksiniz.
🧠 Teknik Özet
Bu rehber, ExternalDNS’in DigitalOcean Kubernetes (DOKS) üzerinde
Service ve Ingress kaynaklarından DNS kayıtlarını otomatik yönetmesini anlatır.
Amaç, DNS güncellemelerini manuel olmaktan çıkarıp
uygulama dağıtımıyla entegre etmektir.
🎯 Hangi Problemi Çözer?
- IP değiştiğinde DNS unutulma riskini ortadan kaldırır
- Manuel DNS paneli ihtiyacını yok eder
- Kubernetes’i tek doğruluk kaynağı haline getirir
- CI/CD ve test ortamlarını hızlandırır
✅ Ön Koşullar
- DigitalOcean Kubernetes Kümesi (DOKS)
- kubectl yapılandırılmış olmalı
- Helm 3 kurulu olmalı
- Nginx Ingress Controller aktif olmalı
- DigitalOcean API Anahtarı (read/write)
- Kayıtlı alan adı (örnek:
rabisu.cloud)
1️⃣ ExternalDNS Kurulumu (Helm)
Yapılandırma Dosyası
nano externaldns-values.yaml
- Bu dosya ExternalDNS ayarlarını içerir.
provider: digitalocean
digitalocean:
apiToken: YOUR_API_TOKEN
interval: "1m"
policy: sync
provider: DNS sağlayıcısı
interval: Değişiklik kontrol süresi
policy: Kayıt oluşturma/silme davranışı
Helm Repository Ekleme
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
- Bu komutlar Bitnami chart’larını ekler ve günceller.
ExternalDNS Kurulumu
helm install external-dns bitnami/external-dns -f externaldns-values.yaml
-
ExternalDNS kümenize kurulur.
-
Pod durumunu kontrol edin:
kubectl get pods -l app.kubernetes.io/name=external-dns
2️⃣ Örnek Uygulama ve Ingress
nano echo.yaml
- Bu dosya Deployment, Service ve Ingress tanımlarını içerir.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: echo.rabisu.cloud
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: echo
port:
number: 80
---
apiVersion: v1
kind: Service
metadata:
name: echo
spec:
ports:
- port: 80
targetPort: 5678
selector:
app: echo
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo
spec:
replicas: 3
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: echo
image: hashicorp/http-echo
args:
- "-text=Selam Rabisu Bulut!"
ports:
- containerPort: 5678
Kaynakları Oluşturma
kubectl apply -f echo.yaml
- ExternalDNS yaklaşık 1 dakika içinde DNS kayıtlarını oluşturur.
Test edin:
curl echo.rabisu.cloud
- Beklenen çıktı:
Selam Rabisu Bulut!
3️⃣ (İsteğe Bağlı) LoadBalancer Servis Kullanımı
- Ingress’i kaldırın:
kubectl delete ingress echo-ingress
- Servisi güncelleyin:
apiVersion: v1
kind: Service
metadata:
name: echo
annotations:
external-dns.alpha.kubernetes.io/hostname: echo.rabisu.cloud
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 5678
selector:
app: echo
Uygulayın:
kubectl apply -f echo.yaml
- DNS yine otomatik güncellenir.
❓ Sıkça Sorulan Sorular
1. ExternalDNS DNS kayıtlarını siler mi? Sadece kendi oluşturduklarını yönetir.
2. TXT kayıtları neden var? Kayıt sahipliğini takip eder.
3. Ingress mi Service mi daha iyi? Ingress daha esnek ve yaygındır.
4. Birden fazla domain olur mu? Evet, domainFilters ile sınırlandırılabilir.
🎉 Sonuç
ExternalDNS ile:
DNS yönetimi otomatikleşir
Kubernetes merkez olur
Hata riski azalır
Dağıtımlar hızlanır
Bu yapıyı Rabisu Bulut Kubernetes altyapısında güvenle kullanabilirsiniz.