Ana içeriğe geç

🤖 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ı

  1. Ingress’i kaldırın:

kubectl delete ingress echo-ingress
  1. 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.