GH GambleHub

Hizmet Keşfi и DNS

Hizmet Keşfi и 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 вне 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 retrays; Jitter, bütçe retrays 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 'с' 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!

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.