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:
ornek.com)
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
Ö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.ornek.com
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 GenixNode!"
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.ornek.com
- Beklenen çıktı:
Selam GenixNode!
(İ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.ornek.com
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ı GenixNode Kubernetes altyapısında güvenle kullanabilirsiniz.

