OctoDNS ile DNS Yönetimi: Ubuntu 18.04 Üzerinde Dağıtım ve Yönetim Rehberi
DNS (Alan Adı Sistemi) yönetimi, modern altyapıların temel taşlarından biridir. Geleneksel olarak, DNS kayıtları manuel olarak web arayüzleri aracılığıyla veya komut satırı araçları kullanılarak yönetilir. Ancak bu yaklaşım, özellikle büyük ve dinamik altyapılarda tutarsızlıklara, hatalara ve yönetim zorluklarına yol açabilir. İşte bu noktada “Altyapı Kod Olarak” (Infrastructure as Code – IaC) prensipleri devreye girer ve DNS yönetimini dönüştürmek için OctoDNS gibi araçlar öne çıkar.
Bu kapsamlı rehberde, OctoDNS’in ne olduğunu, neden önemli olduğunu ve Ubuntu 18.04 işletim sistemi üzerinde nasıl kurulup yapılandırılarak DNS kayıtlarınızı verimli bir şekilde yönetebileceğinizi adım adım inceleyeceğiz. Ubuntu 18.04, uzun süreli destek (LTS) sunan stabil bir platform olduğu için bu tür bir yönetim aracı için ideal bir temel oluşturur.
DNS Yönetiminde Karşılaşılan Zorluklar ve IaC Yaklaşımı
Geleneksel DNS yönetiminde karşılaşılan başlıca zorluklar şunlardır:
* Manuel Hatalar: İnsan faktörü, özellikle karmaşık DNS kayıtları üzerinde çalışırken yanlış girişlere veya silinmelere neden olabilir.
* Tutarsızlık: Birden fazla DNS sağlayıcı kullanıldığında veya farklı ekipler tarafından yönetildiğinde kayıtlar arasında tutarsızlıklar oluşabilir.
* Versiyon Kontrol Eksikliği: Değişikliklerin kim tarafından, ne zaman ve neden yapıldığına dair net bir izleme mekanizması genellikle bulunmaz. Bu durum, hatalı değişiklikleri geri almayı zorlaştırır.
* Otomasyon Eksikliği: Yeni hizmetler devreye alındığında veya mevcut hizmetler güncellendiğinde DNS kayıtlarının manuel olarak güncellenmesi zaman alıcı ve hataya açık bir süreçtir.
* Denetlenebilirlik: Güvenlik ve uyumluluk açısından DNS değişikliklerinin denetlenebilir olması önemlidir, ancak manuel süreçler bunu sağlamakta yetersiz kalabilir.
Altyapı Kod Olarak (IaC) yaklaşımı, sunucular, ağlar, veritabanları ve bu durumda DNS gibi altyapı bileşenlerini kod dosyaları kullanarak tanımlama ve yönetme prensibidir. IaC’nin faydaları şunlardır:
* Tutarlılık: Altyapı tanımları tek bir kaynakta (kod) tutulduğu için tutarlılık sağlanır.
* Versiyon Kontrolü: Kod dosyaları Git gibi versiyon kontrol sistemlerinde saklanarak değişiklik geçmişi izlenebilir, geri alınabilir ve iş birliği içinde çalışılabilir.
* Otomasyon: Kod, otomatik araçlar aracılığıyla dağıtılabilir ve yönetilebilir, bu da insan müdahalesini azaltır.
* Tekrarlanabilirlik: Aynı altyapı tanımı, farklı ortamlarda (geliştirme, test, üretim) aynı sonucu verecek şekilde tekrar tekrar dağıtılabilir.
* Hata Azaltma: Kod tabanlı yönetim, manuel hataları önemli ölçüde azaltır.
OctoDNS Nedir ve Neden Kullanmalıyız?
OctoDNS, GitHub tarafından geliştirilen ve DNS kayıtlarını kod olarak yönetmeyi sağlayan bir DNS senkronizasyon aracıdır. Python ile yazılmıştır ve deklaratif bir yaklaşımla çalışır. Yani, DNS kayıtlarınızın “nasıl” göründüğünü değil, “ne” olması gerektiğini tanımlarsınız. OctoDNS, bu tanımları alır ve yapılandırılan DNS sağlayıcılarınıza (AWS Route 53, Google Cloud DNS, Cloudflare, DigitalOcean, Azure DNS ve daha birçokları) uygular.
OctoDNS’in başlıca avantajları:
* Çoklu Sağlayıcı Desteği: Tek bir yapılandırma ile birden fazla DNS sağlayıcısını (örneğin, birincil ve ikincil DNS sağlayıcıları veya farklı bölgelerdeki sağlayıcılar) yönetebilirsiniz.
* Deklaratif Yapılandırma: DNS kayıtlarınızı YAML dosyalarında okunabilir ve yönetilebilir bir formatta tanımlarsınız.
* Git Entegrasyonu: DNS yapılandırmalarınızı Git depolarında saklayarak versiyon kontrolü, değişiklik takibi, geri alma ve iş birliği imkanlarından faydalanabilirsiniz.
* Idempotency (Tekrar Edilebilirlik): Bir işlemi kaç kez çalıştırdığınız önemli değildir; her zaman aynı sonuca ulaşırsınız. OctoDNS, yalnızca gerekli değişiklikleri yapar.
* Planlama ve Uygulama: Değişiklikleri uygulamadan önce ne yapılacağını gösteren bir “plan” oluşturabilir, böylece potansiyel hataları önceden görebilirsiniz.
* Esneklik: Özel ihtiyaçlarınıza göre genişletilebilir ve özelleştirilebilir.
Ön Gereksinimler
OctoDNS kurulumuna başlamadan önce aşağıdaki ön gereksinimlere sahip olduğunuzdan emin olun:
* Ubuntu 18.04 Sunucusu: SSH erişimine sahip bir Ubuntu 18.04 sunucusu. Bu rehberdeki komutlar bu işletim sistemi için optimize edilmiştir.
* Python 3 ve Pip: OctoDNS Python ile yazıldığı için Python 3 ve paket yöneticisi pip’in kurulu olması gerekir.
* Git: DNS yapılandırmalarınızı versiyon kontrolü altında tutmak için Git’e ihtiyacınız olacak.
* DNS Sağlayıcı Hesabı: AWS Route 53, Cloudflare, DigitalOcean, Google Cloud DNS gibi desteklenen bir DNS sağlayıcısında aktif bir hesabınız olmalı.
* API Kimlik Bilgileri: Seçtiğiniz DNS sağlayıcısı için OctoDNS’in programatik olarak değişiklik yapabilmesi için gerekli API anahtarları veya kimlik bilgileri. Bu bilgiler genellikle ACCESS_KEY_ID, SECRET_ACCESS_KEY veya API token gibi değerlerdir. Güvenlik nedeniyle bu bilgileri doğrudan yapılandırma dosyalarına yazmak yerine ortam değişkenleri olarak kullanmayı şiddetle tavsiye ederiz.
Ortam Kurulumu (Ubuntu 18.04)
OctoDNS’i kurmak için aşağıdaki adımları izleyin:
Sistem Güncellemesi
Öncelikle sunucunuzdaki paket listesini güncelleyin ve yüklü paketleri en son sürümlerine yükseltin:
sudo apt update
sudo apt upgrade -y
Python 3, Pip ve Venv Kurulumu
Ubuntu 18.04, Python 3 ile birlikte gelir, ancak pip ve sanal ortamlar için venv modülü ek olarak kurulması gerekebilir.
sudo apt install python3-pip python3-venv git -y
Bu komut aynı zamanda Git’i de yükleyecektir.
Sanal Ortam Oluşturma ve OctoDNS Kurulumu
OctoDNS’i sistem genelinde kurmak yerine, bağımlılık çakışmalarını önlemek için bir Python sanal ortamı içinde kurmak en iyi uygulamadır.
1. Çalışma Dizini Oluşturma:
OctoDNS yapılandırma dosyalarınızı ve kodunuzu saklayacağınız bir dizin oluşturun:
mkdir octodns-dns-management
cd octodns-dns-management
2. Sanal Ortam Oluşturma:
Bu dizin içinde bir sanal ortam oluşturun:
python3 -m venv venv
3. Sanal Ortamı Aktifleştirme:
Sanal ortamı aktifleştirin. Komut istemciniz değişerek sanal ortamın aktif olduğunu gösterecektir (örn. (venv) ile başlayabilir).
source venv/bin/activate
4. OctoDNS Kurulumu:
Sanal ortam aktifken OctoDNS’i ve kullanacağınız DNS sağlayıcıları için gerekli eklentileri yükleyin. Örneğin, AWS Route 53 ve Cloudflare kullanacaksanız:
pip install octodns octodns-route53 octodns-cloudflare
Diğer sağlayıcılar için octodns-digitalocean, octodns-googlecloud, octodns-azure vb. paketleri eklemeniz gerekir. Hangi sağlayıcıları kullanacağınıza bağlı olarak bu komutu güncelleyin.
Kurulum tamamlandıktan sonra, sanal ortam aktifken octodns-sync --version komutunu çalıştırarak OctoDNS’in doğru şekilde kurulduğunu doğrulayabilirsiniz.
OctoDNS Kavramlarını Anlama
OctoDNS, DNS yönetimini basitleştirmek için birkaç temel kavram etrafında döner:
* Yapılandırma Dosyaları: OctoDNS’in nasıl davranacağını, hangi DNS sağlayıcılarını kullanacağını ve hangi bölgeleri yöneteceğini tanımlayan YAML dosyalarıdır. Ana yapılandırma dosyaları config.yaml ve providers.yaml‘dır.
* Kaynaklar (Sources): DNS kayıtlarınızın istenen durumunu tanımladığınız yerdir. Genellikle bu, yerel dosya sisteminizdeki YAML dosyalarıdır (zones/ dizini altında). OctoDNS, bu dosyalardan DNS kayıtlarının mevcut olması gereken durumunu okur.
* Hedefler (Sinks/Targets): OctoDNS’in kaynaklardan okuduğu durumu uygulayacağı DNS sağlayıcılarıdır. Her hedef, bir DNS sağlayıcısına (Route 53, Cloudflare vb.) karşılık gelir ve API kimlik bilgileriyle yapılandırılır.
* Bölge Dosyaları (Zone Files): Her bir DNS bölgesi (örn. example.com), kendi YAML dosyasında tanımlanır (example.com.yaml). Bu dosyalar, bölgeye ait tüm DNS kayıtlarını (A, AAAA, CNAME, MX, TXT vb.) içerir.
* Plan ve Uygula (Plan & Apply): OctoDNS’in temel iş akışıdır. plan komutu, yerel yapılandırmanız ile DNS sağlayıcınızdaki mevcut durum arasındaki farkları gösterir. apply komutu ise bu farkları DNS sağlayıcınıza uygular.
OctoDNS Yapılandırması
OctoDNS’i yapılandırmak için providers.yaml ve config.yaml dosyalarını oluşturmanız gerekmektedir. Ayrıca, her bir DNS bölgesi için ayrı YAML dosyaları oluşturacaksınız.
1. providers.yaml Dosyası
Bu dosya, OctoDNS’in kullanacağı DNS sağlayıcılarını ve bunlara erişim için gerekli API kimlik bilgilerini tanımlar. API anahtarlarını doğrudan bu dosyaya yazmak yerine ortam değişkenleri kullanmak en güvenli yaklaşımdır.
providers.yaml örneği:
---
route53:
class: octodns_route53.Route53Provider
access_key_id: env/AWS_ACCESS_KEY_ID
secret_access_key: env/AWS_SECRET_ACCESS_KEY
cloudflare:
class: octodns_cloudflare.CloudflareProvider
token: env/CLOUDFLARE_API_TOKEN
email: env/CLOUDFLARE_EMAIL
Diğer sağlayıcılar için örnekler:
digitalocean:
class: octodns_digitalocean.DigitalOceanProvider
token: env/DIGITALOCEAN_API_TOKEN
Ortam Değişkenlerini Ayarlama:
OctoDNS’i çalıştırmadan önce, yukarıdaki örnekte belirtilen ortam değişkenlerini ayarlamanız gerekmektedir. Bunu, terminal oturumunuzda export komutunu kullanarak yapabilirsiniz:
export AWS_ACCESS_KEY_ID="YOUR_AWS_ACCESS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="YOUR_AWS_SECRET_ACCESS_KEY"
export CLOUDFLARE_API_TOKEN="YOUR_CLOUDFLARE_API_TOKEN"
export CLOUDFLARE_EMAIL="your.email@example.com"
Bu değişkenleri kalıcı hale getirmek için .bashrc veya .profile dosyanıza ekleyebilirsiniz, ancak CI/CD ortamlarında genellikle pipeline adımlarında ayarlanırlar.
2. config.yaml Dosyası
Bu dosya, hangi DNS bölgelerinin yönetileceğini ve her bir bölge için hangi kaynak ve hedeflerin kullanılacağını tanımlar.
config.yaml örneği:
---
Kaynakları tanımlar. Burada yerel dosya sistemi (yaml) kullanıyoruz.
sources:
config:
class: octodns.source.yaml.YamlSource
directory: ./zones # DNS bölge dosyalarının bulunduğu dizin
Hedefleri tanımlar. providers.yaml dosyasında tanımlanan sağlayıcıları kullanırız.
targets:
route53:
class: octodns.target.route53.Route53Target
provider: route53
cloudflare:
class: octodns.target.cloudflare.CloudflareTarget
provider: cloudflare
Yönetilecek DNS bölgelerini tanımlar ve kaynak/hedef eşleştirmelerini yapar.
zones:
example.com.: # Bölge adı sonuna nokta eklemeyi unutmayın
sources:
- config
targets:
- route53
- cloudflare
sub.example.com.:
sources:
- config
targets:
- route53
Yukarıdaki örnekte, example.com ve sub.example.com bölgelerinin kayıtları yerel zones/ dizininden alınacak ve hem AWS Route 53 hem de Cloudflare’a uygulanacaktır.
3. Bölge Dosyaları (zones/)
config.yaml dosyasında belirttiğimiz zones/ dizinini oluşturun ve her bir DNS bölgesi için ayrı bir YAML dosyası oluşturun. Dosya adları bölge adlarıyla eşleşmelidir (örn. example.com.yaml).
mkdir zones
zones/example.com.yaml örneği:
---
TTL (Time To Live) değeri, varsayılan olarak 3600 saniyedir (1 saat).
Kayıt düzeyinde veya bölge düzeyinde geçersiz kılınabilir.
ttl: 3600
A Kayıtları
www:
type: A
value: 192.0.2.10
@: # Kök alan adı için '@' kullanılır
type: A
value: 192.0.2.20
CNAME Kayıtları
blog:
type: CNAME
value: www.example.com. # CNAME değeri tam alan adı olmalı ve nokta ile bitmeli
MX Kayıtları
mail:
type: A
value: 192.0.2.30
@:
type: MX
values:
- preference: 10
value: mail.example.com.
- preference: 20
value: backup-mail.example.com.
TXT Kayıtları
_spf:
type: TXT
value: "v=spf1 include:_spf.google.com ~all"
AAAA Kayıtları (IPv6)
ipv6:
type: AAAA
value: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
SRV Kayıtları (Örnek)
_sip._tcp:
type: SRV
values:
- priority: 10
weight: 100
port: 5060
target: sip.example.com.
zones/sub.example.com.yaml örneği:
---
@:
type: A
value: 192.0.2.40
Önemli Notlar:
* Bölge adlarının ve CNAME hedeflerinin sonuna nokta (.) eklemeyi unutmayın. Bu, DNS’teki mutlak adlandırmayı temsil eder.
* TTL değeri belirtilmezse, OctoDNS varsayılan TTL’i kullanır (genellikle 3600 saniye).
* Çoklu değer alan kayıtlar (MX, SRV) için values listesi kullanılır.
* @ sembolü, kök alan adını temsil eder.
İş Akışı: DNS Dağıtımı ve Yönetimi
Yapılandırma dosyalarınızı hazırladıktan sonra OctoDNS ile DNS kayıtlarınızı yönetmeye başlayabilirsiniz.
1. İlk Kurulum ve Mevcut Kayıtları İçeri Aktarma (Opsiyonel ama Önemli)
Eğer mevcut bir DNS bölgeniz varsa ve OctoDNS ile yönetmeye başlamak istiyorsanız, OctoDNS’in mevcut kayıtları okuyup YAML dosyalarına aktarmasını sağlayabilirsiniz. Bu, manuel olarak tüm kayıtları yazmaktan çok daha kolaydır.
Önce sanal ortamınızın aktif olduğundan emin olun: source venv/bin/activate
Ardından, belirli bir sağlayıcıdan bir bölgeyi içeri aktarmak için octodns-sync komutunu sources ve target parametreleriyle kullanabilirsiniz. Örneğin, example.com bölgesini Route 53’ten okuyup zones/example.com.yaml dosyasına yazmak için:
octodns-sync --config-file=./config.yaml --sources=route53 --target=config --zone=example.com.
Bu komut, providers.yaml‘daki route53 sağlayıcısını bir kaynak olarak kullanacak ve config.yaml‘daki config kaynağını (yani yerel zones/ dizinini) bir hedef olarak kullanarak example.com. bölgesinin kayıtlarını zones/example.com.yaml dosyasına yazacaktır. Diğer DNS sağlayıcılarından da benzer şekilde içeri aktarabilirsiniz.
İçeri aktarma işleminden sonra, oluşturulan YAML dosyasını kontrol edin ve gerektiğinde düzenleyin.
2. Değişiklikleri Planlama
Herhangi bir değişiklik yapmadan önce, OctoDNS’in ne yapacağını gösteren bir plan oluşturmak en iyi uygulamadır. Bu, yanlışlıkla yapılan değişiklikleri önlemenize yardımcı olur.
octodns-sync --config-file=./config.yaml --plan
Bu komut, yerel yapılandırma dosyalarınız ile hedef DNS sağlayıcılarınızdaki mevcut durum arasındaki farkları listeler. Çıktı, eklenen, güncellenen veya silinecek kayıtları açıkça gösterir. Örneğin:
...
* example.com.
* Target: route53
* Create
* Create
* Create
* Create
* Create
* Create
* Create
* Target: cloudflare
* Create
...
Çıktıyı dikkatlice inceleyin ve beklediğiniz değişikliklerle eşleştiğinden emin olun.
3. Değişiklikleri Uygulama
Plan çıktısını onayladıktan sonra, değişiklikleri DNS sağlayıcılarınıza uygulamak için --apply bayrağını kullanın:
octodns-sync --config-file=./config.yaml --apply
OctoDNS, değişiklikleri uygularken size onay sorabilir. Onaylamak için y yazıp Enter tuşuna basın.
...
* example.com.
* Target: route53
* Create
* Create
...
Apply changes? [y/N] y
...
Uygulama tamamlandığında, DNS sağlayıcınızın kontrol panelinden veya dig gibi araçlarla DNS kayıtlarınızın güncellendiğini doğrulayabilirsiniz.
dig www.example.com @8.8.8.8
4. Yeni Kayıtlar Ekleme/Mevcut Kayıtları Güncelleme
1. zones/ dizinindeki ilgili YAML dosyasını açın (örn. zones/example.com.yaml).
2. Yeni kayıtları ekleyin veya mevcut kayıtların değerlerini güncelleyin.
3. Değişiklikleri kaydedin.
4. octodns-sync --config-file=./config.yaml --plan komutuyla planı kontrol edin.
5. octodns-sync --config-file=./config.yaml --apply komutuyla değişiklikleri uygulayın.
6. Değişikliklerinizi Git’e commit etmeyi unutmayın!
5. Kayıtları Silme
Bir DNS kaydını silmek için, ilgili YAML dosyasından kaydı tamamen kaldırın. Ardından, planlama ve uygulama adımlarını takip edin. OctoDNS, YAML dosyasında olmayan ancak DNS sağlayıcınızda mevcut olan kayıtları silme olarak algılayacak ve size bir plan sunacaktır.
# zones/example.com.yaml dosyasından 'blog' CNAME kaydını kaldırın
Ardından:
octodns-sync --config-file=./config.yaml --plan
Çıktıda 'Delete ' benzeri bir satır görmelisiniz.
octodns-sync --config-file=./config.yaml --apply
Gelişmiş Konular ve En İyi Uygulamalar
Versiyon Kontrolü (Git)
OctoDNS yapılandırmalarınızı bir Git deposunda saklamak, IaC’nin temelidir.
* Değişiklik Geçmişi: Her değişikliğin kim tarafından, ne zaman ve neden yapıldığına dair tam bir geçmiş sağlar.
* Geri Alma: Hatalı bir değişikliği kolayca geri alabilirsiniz.
* İş Birliği: Birden fazla geliştirici veya ekip üyesi, pull request’ler ve kod incelemeleri aracılığıyla DNS yapılandırmaları üzerinde iş birliği yapabilir.
* Dal Yönetimi: Geliştirme, test ve üretim ortamları için farklı dallar kullanabilir veya yeni özellikler için geçici dallar oluşturabilirsiniz.
OctoDNS yapılandırma dosyalarınızı içeren octodns-dns-management dizinini bir Git deposu olarak başlatın:
cd octodns-dns-management
git init
git add .
git commit -m "Initial OctoDNS configuration"
Ardından bu depoyu uzak bir Git sunucusuna (GitHub, GitLab, Bitbucket vb.) bağlayın.
CI/CD Entegrasyonu
OctoDNS’i sürekli entegrasyon/sürekli dağıtım (CI/CD) işlem hatlarına entegre etmek, DNS yönetimini otomatikleştirmenin en güçlü yoludur.
* Otomatik Planlama: Her pull request (çekme isteği) açıldığında veya bir dala kod gönderildiğinde, CI/CD sistemi octodns-sync --plan komutunu çalıştırabilir ve çıktıyı pull request yorumu olarak ekleyebilir. Bu, değişikliklerin gözden geçirilmesini kolaylaştırır.
* Manuel veya Onaylı Uygulama: Ana dala birleştirilen değişiklikler, otomatik olarak veya manuel onaydan sonra octodns-sync --apply komutuyla DNS sağlayıcılarına uygulanabilir. Bu, üretim DNS’inde istenmeyen değişiklikleri önler.
* Örnek CI/CD Akışı (GitHub Actions):
name: DNS Management with OctoDNS
on:
push:
branches:
- main
paths:
- 'octodns-dns-management/' # Sadece OctoDNS dizinindeki değişiklikleri dinle
pull_request:
branches:
- main
paths:
- 'octodns-dns-management/'
jobs:
octodns-plan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install OctoDNS
run: |
cd octodns-dns-management
python3 -m venv venv
source venv/bin/activate
pip install octodns octodns-route53 octodns-cloudflare
- name: OctoDNS Plan
id: plan
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }}
run: |
cd octodns-dns-management
source venv/bin/activate
octodns-sync --config-file=./config.yaml --plan > plan_output.txt 2>&1
echo "::set-output name=plan::$(cat plan_output.txt)"
- name: Comment on PR with Plan
if: github.event_name == 'pull_request'
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: OctoDNS Plan:\n\\\\n${process.env.PLAN_OUTPUT}\n\\\`
})
env:
PLAN_OUTPUT: ${{ steps.plan.outputs.plan }}
octodns-apply:
runs-on: ubuntu-latest
needs: octodns-plan
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install OctoDNS
run: |
cd octodns-dns-management
python3 -m venv venv
source venv/bin/activate
pip install octodns octodns-route53 octodns-cloudflare
- name: OctoDNS Apply
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }}
run: |
cd octodns-dns-management
source venv/bin/activate
octodns-sync --config-file=./config.yaml --apply --yes # --yes otomatik onaylar
Not: GitHub Actions'da secrets kullanarak API anahtarlarınızı güvenli bir şekilde saklamalısınız.
Güvenlik
* API Anahtarları: DNS sağlayıcısı API anahtarlarınızı asla Git deposuna commit etmeyin. Ortam değişkenleri, CI/CD sırları (secrets) veya HashiCorp Vault gibi sır yönetim sistemleri kullanın.
* En Az Ayrıcalık Prensibi: DNS sağlayıcısı API anahtarlarınıza yalnızca DNS kayıtlarını yönetmek için gereken minimum izinleri verin. Örneğin, hesap ayarlarını değiştirebilecek veya faturalandırma bilgilerine erişebilecek izinler vermeyin.
Delegasyon ve Alt Alan Adları
OctoDNS, alt alan adlarının yönetimini de kolaylaştırır. Eğer example.com bölgesini yönetiyorsanız ve dev.example.com için farklı bir DNS sağlayıcısı veya farklı bir OctoDNS yapılandırması kullanmak istiyorsanız, example.com.yaml dosyasında dev için bir NS kaydı oluşturarak delegasyon yapabilirsiniz:
# zones/example.com.yaml içinde
dev:
type: NS
values:
- ns1.dev-dns-provider.com.
- ns2.dev-dns-provider.com.
Ardından, zones/dev.example.com.yaml gibi ayrı bir bölge dosyası oluşturarak dev.example.com için kayıtları yönetebilirsiniz. Bu, büyük organizasyonlarda DNS yönetimini daha modüler hale getirir.
Çoklu Ortam Yönetimi
Geliştirme, hazırlık (staging) ve üretim ortamları için farklı DNS kayıtlarına sahip olmak yaygın bir senaryodur. Bunu yönetmek için birkaç yaklaşım vardır:
* Farklı config.yaml Dosyaları: Her ortam için ayrı config-dev.yaml, config-prod.yaml dosyaları oluşturabilir ve octodns-sync komutunu çalıştırırken --config-file parametresiyle ilgili dosyayı belirtebilirsiniz.zones-dev/
* Koşullu Mantık (OctoDNS içinde değil, CI/CD'de): CI/CD pipeline'ınızda ortam değişkenlerine göre hangi bölge dosyalarının veya hangi değerlerin kullanılacağını belirleyebilirsiniz.
* Farklı Dizinler: , zones-prod/ gibi farklı dizinler oluşturup config.yaml'daki directory parametresini ortam değişkenlerine göre değiştirebilirsiniz.
Yaygın Sorun Giderme
* API Kimlik Bilgileri Hatası: InvalidCredentials veya Unauthorized` gibi hatalar alıyorsanız, API anahtarlarınızın doğru olduğundan ve ilgili DNS sağlayıcısında gerekli izinlere sahip olduğundan emin olun. Ortam değişkenlerinin doğru ayarlandığını kontrol edin.
* YAML Sözdizimi Hatası: YAML dosyalarındaki girintileme veya sözdizimi hataları, OctoDNS'in çalışmasını engelleyebilir. Hata mesajlarını dikkatlice okuyun ve bir YAML doğrulayıcı (linter) kullanmayı düşünün.
* Sağlayıcı Hız Sınırları: Büyük DNS bölgelerini senkronize ederken veya çok sayıda değişiklik yaparken, DNS sağlayıcınızın API hız sınırlarına takılabilirsiniz. OctoDNS genellikle bu durumları yönetir, ancak nadiren bu tür hatalarla karşılaşabilirsiniz. Genellikle yeniden deneme ile çözülür.
* DNS Yayılım Gecikmeleri: OctoDNS değişiklikleri DNS sağlayıcınıza uyguladıktan sonra, bu değişikliklerin dünya genelindeki DNS sunucularına yayılması (propagation) biraz zaman alabilir. Bu, OctoDNS'in kontrolünde olmayan normal bir DNS davranışıdır.
* Bölge Çakışmaları: Aynı bölgeyi birden fazla OctoDNS yapılandırmasıyla yönetmeye çalışmak veya farklı araçlarla manuel değişiklikler yapmak çakışmalara yol açabilir. Tek bir kontrol noktası (OctoDNS) kullanmaya özen gösterin.
Sonuç
OctoDNS, DNS yönetimini modern DevOps prensipleriyle uyumlu hale getiren güçlü ve esnek bir araçtır. Ubuntu 18.04 gibi stabil bir işletim sistemi üzerinde OctoDNS'i kullanarak DNS kayıtlarınızı kod olarak yönetmek, altyapınızın tutarlılığını, güvenilirliğini ve otomasyon seviyesini önemli ölçüde artırır.
Bu rehberde ele aldığımız adımları takip ederek, OctoDNS'i kurabilir, yapılandırabilir ve DNS kayıtlarınızı Git tabanlı bir iş akışıyla yönetmeye başlayabilirsiniz. Altyapı Kod Olarak (IaC) yaklaşımını DNS yönetimine entegre etmek, manuel hataları azaltırken, değişiklikleri izlenebilir, tekrarlanabilir ve iş birliğine açık hale getirir. CI/CD entegrasyonu ile bu süreci tamamen otomatikleştirerek, DNS yönetimini geliştirme ve dağıtım süreçlerinizin sorunsuz bir parçası haline getirebilirsiniz. DNS yönetiminde bu modern yaklaşımı benimseyerek, altyapınızın temel bir bileşenini daha sağlam ve yönetilebilir hale getireceksiniz.
