Logo GH

Hizmet Keşfi ve DNS

Hizmet Keşfi ve DNS

1) Neden ihtiyacınız var

Dağıtılmış sistemlerde, düğümler görünür ve kaybolur ve müşteriler hizmetin çalışma örneklerini hızlı ve güvenilir bir şekilde bulmalıdır. DNS - evrensel ad katmanı; Servis keşfi - sağlık, ağırlık ve yönlendirme politikasını dikkate alarak servis adını gerçek uç noktalarla eşleştirme stratejisi.

Temel hedefler:
  • Geçici adresler yerine sabit isimler,
  • Doğru, ancak gürültülü olmayan güncelleme (tazelik ve TTL arasındaki denge),
  • Tamamen düşmeden bozulma (yük devretme/sağlık kontrolü),
  • İstemci üzerinde minimum "tahmin": zaman aşımları, geri ödemeler, önbellek politikaları.

2) Servis keşif modelleri

2. 1 Müşteri tarafı

İstemcinin kendisi adı bir dizi uç nokta ve bakiye (round-robin, EWMA, hash by key) olarak çözer. Kaynak - DNS (A/AAAA/SRV), hizmet kayıt defteri (Konsolos/Eureka), statik liste.

Artıları: daha az merkezi SPOF'lar, esnek algoritmalar.
Eksileri: müşteri heterojenliği, mantığı güncellemek daha zordur.

2. 2 Sunucu (sunucu tarafı)

İstemci ön/LB'ye (L4/L7 ağ geçidi/giriş) gider. Dengeleme ve sağlık kontrolü - proxy/dengeleyici tarafında.

Artılar: politikanın tek bir yeri, gözlemlenebilirlik.
Eksileri: Yüksek kullanılabilirliğe sahip bir çevre gerekir (N + 1, multi-AZ).

2. 3 Hibrit

DNS bir dizi giriş noktası (bölgesel LB'ler) verir, ardından dengeleme L7/mesh.

3) DNS: temel bilgiler, kayıtlar ve TTL

3. 1 Temel tipler

A/AAAA - IPv4/IPv6 adresleri.
CNAME - başka bir isme takma ad (apex değil).

SRV - '_ service. _ proto. Adı: Host/port/weight/priority (gRPC/LDAP/SIP, vb.)

TXT/HTTP/HTTPS - meta veriler/işaretçiler (HTTP keşfi dahil).
NS/SOA - bölge delegasyonu ve nitelikleri.

3. 2 TTL ve Önbellek

Önbellek şunlardan elde edilebilir: OS çözümleyici, yerel saplama çözümleyici, düğümler (NodeLocal DNS/CoreDNS), sağlayıcı, ara recursers ve kütüphane istemcisi. Gerçek tazelik = min (TTL, müşteri politikası). Negatif önbellek (NXDOMAIN) de 'SOA üzerinde önbelleğe alınır. MINIMUM'/'TTL'.

Öneriler:
  • Prod - Dinamik kayıtlar için TTL 30-120'ler, kararlı için 300-600'ler.
  • Anahtarlar için (feilover), "yangın sırasında'değil, önceden alçaltılmış bir TTL hazırlayın.
  • Kütüphanelerin yapışkan önbelleğini (Java/Go/Node) düşünün - gerekirse, çözümleyicinin TTL'sini çalışma zamanı içinde yapılandırın.

4) DNS dengeleme ve hata tolerans politikaları

Ağırlıklı RR - A/AAAA/SRV üzerindeki ağırlıklar.
Yük devretme - birincil/ikincil kümeler (dışarıda sağlık kontrolü).
Geo/Latency -'en yakın "POP/bölgeye yanıt.
Anycast - farklı POP'da bir IP (BGP); Bölgesel bozulmalara dayanıklı.
Split-horizon - VPC/on-prem içinde ve internette farklı cevaplar.
GSLB, sağlık kontrolleri ve politikaları (gecikme, coğrafi, kapasite) olan küresel bir dengeleyicidir.

5) Sağlık kontrolleri ve tazelik

DNS'in kendisi "aptal'dır: arka uçların sağlığını bilmez. Bu nedenle:
  • Veya harici bir sağlık denetleyicisi kayıtları/ağırlıkları yönetir (GSLB, Route53/Traffic-policy, harici-dns + örnekleri).
  • Veya/mesh istemcisi aktif bir outlier-ejection yapar ve birçok uç noktadan yeniden dener.

6) Kubernetes: kutunun dışında keşif

Servis adları: 'svc. ad alanı. svc. küme. yerel.
ClusterIP: kararlı sanal IP + kube-proxy/ebpf.
Başsız Servis ('clusterIP: None'): bölmelere (veya alt alanlarına) A-kayıtları, bağlantı noktaları için SRV verir.
EndpointSlice: uç noktaların ölçeklenebilir listesi (Uç noktaların yerine).
CoreDNS: küme DNS çözümleyici; Eklentiler/template/forward/cache; 'kube-dns' bölgesi.
NodeLocal DNSCache: Düğümde yerel önbellek - daha az gecikme ve yukarı akış çözümleyici problemlerinin kesilmesi.

Örnek: Başsız + SRV

yaml apiVersion: v1 kind: Service metadata: { name: payments, namespace: prod }
spec:
clusterIP: None selector: { app: payments }
ports:
- name: grpc port: 50051 targetPort: 50051

İstemci '_ grpc. _ tcp. ödemeler. prod. svc. küme. Yerel '(SRV) ve ana bilgisayar/port/ağırlıklar olsun.

CoreDNS (ConfigMap parçası)

yaml apiVersion: v1 kind: ConfigMap metadata: { name: coredns, namespace: kube-system }
data:
Corefile:
.:53 {
errors health ready cache 30 loop forward. /etc/resolv. conf prometheus:9153 reload
}
NodeLocal DNS (fikirler):
  • DaemonSet '169'da yerel çözümleyici ile. 254. 20. 10`; Kubelet bu noktayı belirtir.
  • P99 ad çözünürlüğünü azaltır ve yukarı yönlü DNS flapına karşı korur.

7) Hizmet keşif dışında K8s

Consul: agent, health-checks, service directory, DNS interface ('.consul'), KV for configurs.
Eureka/ZooKeeper/etcd: JVM/legacy için kayıtlar; Genellikle bir sidecar/ağ geçidi ile birlikte.
Elçi/Istio: EDS/xDS (Endpoint Discovery) ve SDS (sırlar); Hizmetler kontrol düzlemi üzerinden bildirilir.

8) DNS güvenliği

DNSSEC: kayıt bütünlüğünü korur (bölge imzası). Genel alanlar için kritik.
DoT/DoH: Tekrarlamalı şifrelemeye kanal (iç ilkeler, uyumluluk).
ACL ve bölünmüş ufuk: özel bölge - sadece VPC/VPN'den.
Önbellek zehirlenmesine karşı koruma: port/ID randomizasyonu, dinamikler için kısa TTL'ler.
Çıkış ilkeleri: DNS'e yalnızca güvenilir çözümleyicilerde izin ver, log.

9) Müşteri ve geri çekilme davranışı

TTL'ye saygı gösterin: sürekli önbelleğe almayın, sık çözünürlüklerle "kanunsuz" yapmayın (tekrarlamalı fırtına).
Happy Eyeballs (IPv4/IPv6), birden fazla A/AAAA'ya paralel bağlantılar kuyruğu azaltır.
Sadece idempotent istekleri için retries; Jitter, bütçe retries sınırlayıcı.

Çalışma zamanı çözümleyicisinde ince ayar:
  • Java: 'networkaddress. önbellek. tl ',' networkaddress. önbellek. Olumsuz. TL.
  • Go: 'GODEBUG = netdns = go'/'cgo', 'Resolver. PreferGo ', 'DialTimeout'.
  • Düğüm: 'dns. SetDefaultResultOrder ('ipv4first') ', 'lookup' ile' all: true '.

10) GSLB/DNS anahtarlama: uygulama

TTL'yi 300'den, planlanan geçişten 60 24-48 saat önce düşürün.
Doğrulama için bir kanarya seti düşük ağırlıklı uç noktaları tutun.
A kayıtlarının manuel toplu güncellemesi yerine ağırlıklı + sağlık kontrolü kullanın.
Statik/kenar için - Anycast; API için - Geo/Latency + hızlı L7-feiler.

11) Gözlemlenebilirlik ve isim için SLO

Metrikler:
  • DNS sorgularının hızı/gecikmesi, önbellek isabet oranı, türe göre hatalar (SERVFAIL/NXDOMAIN).
  • Bayat yanıtlı isteklerin yüzdesi (bayat-önbellek kullanıyorsanız).
  • Kayıt değişiklikleri üzerinde kullanıcı operasyonlarının başarısı (iş SLI).
  • Uygulamalarda p95/p99 çözme zamanı.
Tanılama:
  • Yolu sınıflandırın: client> local cache - nodal cache - cluster resolver - provider recursion.
  • NXDOMAIN (Ad/Yazım Hataları) ve SERVFAIL (Özyineleme Sorunları/Kaynak Sınırları) ani artışlarını izleyin.

12) Yapılandırma örnekleri

CoreDNS: yeniden yazma ve saplama bölgesi

yaml
.:53 {
log errors cache 60 rewrite name suffix. svc. cluster. local. svc. cluster. local forward. 10. 0. 0. 2 10. 0. 0. 3
}

example. internal:53 {
file /zones/example. internal. signed dnssec
}

systemd-resolved

ini
[Resolve]
DNS=169. 254. 20. 10
FallbackDNS=1. 1. 1. 1 8. 8. 8. 8
Domains=~cluster. local ~internal
DNSSEC=yes

Elçi: dinamik DNS-yenileme

yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true

external-dns (genel bölge desteği)

yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod

13) Uygulama kontrol listesi (0-30 gün)

0-7 gün

Hizmet adı dizini, model seçimi (müşteri-/sunucu tarafı/karma).
Temel TTL, NodeLocal DNSCache, DNS metrikleri panolarını etkinleştirin.
Yapılandırma/kodda "sabit IP'nin yasaklanması.

8-20 gün

Başsız hizmetler + gRPC için SRV; EndpointSlice etkin.
GSLB/dış ağırlıklı; Sağlık kontrolleri ve kanarya.
Müşteri zaman aşımları/geri ödemeleri ve yeniden ödeme bütçesi yapılandırılmıştır.

21-30 gün

Bölünmüş ufuk ve özel alanlar; Politika tarafından DoT/DoH.
Anahtarlama testi (TTL ile) ve feilover; Analiz sonrası.
Mesh/EDS, outlier-ejection ilkeleri etkinleştirilmiştir.

14) Anti-desenler

Prod'da TTL = 0, tekrarlara fırtına, öngörülemeyen gecikmeler.
IP/port sabit kodu, seviyeler için CNAME/takma ad yok.
Kayıtları sağlık kontrolleri ve kanaryalar olmadan "manuel'olarak değiştirmek.
Düğüm önbelleği olmayan bir global çözümleyici (darboğaz).
Negatif önbellek yoksayılıyor (NXDOMAIN sivri uçları).
Veri/feilover katmanı yerine DNS aracılığıyla bir veritabanı arızasını "iyileştirmeye" çalışır.

15) Olgunluk metrikleri

Hizmetlerin %100'ü isim kullanıyor; Sıfır sabit IP kılıfı.
Satışlarda CoreDNS/NodeLocal, önbellek isabet oranı> düğümlerde %90.
Sağlık kontrolleri ile GSLB, belgelenmiş TTL ve runbook anahtarları.
SRV/EndpointSlice for stateful/gRPC, p99 resolve-time in applications ≤ 20-30 ms.
SERVFAIL/NXDOMAIN ve önbellek isabet oranı bozulması için uyarılar.
Grafiklerde/yapılandırmalarda CI: ban ': latest've hard-IP'yi denetler.

16) Sonuç

Hizmet keşfi istikrarlı bir isim sözleşmesi ve önbellek disiplinidir. Hibrit bir model oluşturun: DNS hızlı ve kolay oturum açma, L7/mesh - sağlık ve akıllı politikalar sağlar. Gerektiğinde akıllı TTL, ana bilgisayar önbelleği, başsız hizmetler ve SRV'yi koruyun, bölgesel sınırlar için GSLB/Anycast kullanın, NXDOMAIN/SERVFAIL ve p99 çözüm zamanına dikkat edin. O zaman adınız hizmetin kendisi kadar güvenilir bir varlık olacaktır.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.