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