Service Discovery и DNS
Service Discovery и DNS
1) Niyə lazımdır
Paylanmış sistemlərdə qovşaqlar görünür və yox olur və müştərilər xidmətin iş nümunələrini tez və etibarlı şəkildə tapmalıdırlar. DNS - universal ad təbəqəsi; service discovery - sağlamlıq, ağırlıq və marşrutlaşdırma siyasəti nəzərə alınmaqla, real end-point xidmət adını müqayisə strategiyası.
Əsas məqsədlər:- efemer ünvanları əvəzinə sabit adlar,
- dəqiq, lakin səs-küylü yeniləmə (təravət və TTL arasında balans),
- tam düşmə olmadan deqradasiya (failover/health-check),
- müştəridə minimum «təxminlər»: taymautlar, retrajlar, cash-siyasətlər.
2) service discovery modelləri
2. 1 Müştəri (client-side)
Müştərinin özü adın end-point dəstinə icazə verir və balanslaşdırır (round-robin, EWMA, açar hash). Mənbə DNS (A/AAAA/SRV), xidmət reyestri (Consul/Eureka), statik siyahıdır.
Üstünlüklər: daha az mərkəzi SPOF, çevik alqoritmlər.
Mənfi cəhətləri: müştərilərin heterojenliyi, məntiqi yeniləmək daha çətindir.
2. 2 Server otağı (server-side)
Müştəri front/LB (L4/L7, gateway/ingress) gedir. Balans və sağlamlıq-yoxlama - proxy/balans tərəfində.
Üstünlüklər: vahid siyasət yeri, müşahidə.
Mənfi cəhətləri: yüksək əlçatan perimetr (N + 1, multi-AZ) lazımdır.
2. 3 Hibrid
DNS bir sıra giriş nöqtələri (regional LB) verir, sonra - L7/mesh balans.
3) DNS: əsasları, qeydlər və TTL
3. 1 Əsas növləri
A/AAAA - IPv4/IPv6 ünvanları.
CNAME - başqa bir adda alias (apex deyil).
SRV — `_service._proto. name '→ host/port/çəki/prioritet (gRPC/LDAP/SIP və s.).
TXT/HTTP/HTTPS - metadata/göstəricilər (HTTP-discovery üçün daxil olmaqla).
NS/SOA - nümayəndəlik və zona atributları.
3. 2 TTL və Cash Cascade
Cache var: OS rezolver, lokal stub-rezolver, düyünlər (NodeLocal DNS/CoreDNS), provayder, ara rekursorlar və kitabxana müştərisi. Faktiki təravət = min (TTL, müştəri siyasəti). Mənfi cache (NXDOMAIN) də 'SOA ilə cache olunur. MINIMUM`/`TTL`.
Tövsiyələr:- Prod - dinamik qeydlər üçün TTL 30-120s, sabit üçün 300-600s.
- Keçid üçün (feylover) «yanğın zamanı» deyil, əvvəlcədən aşağı TTL hazırlayın.
- Kitabxanaların sticky-cachini (Java/Go/Node) nəzərə alın - lazım olduqda TTL rezolverini rantaym daxilində konfiqurasiya edin.
4) DNS balans siyasəti və pozulma müqavimət
Weighted RR - A/AAAA/SRV çəkiləri.
Failover - birincili/ikincili dəstlər (xaricdə sağlamlıq-yoxlama).
Geo/Latency - «ən yaxın» ROP/regiona cavab.
Anycast - müxtəlif POP (BGP) bir IP; regional uğursuzluqlara davamlı.
Split-horizon - VPC/on-prem daxilində və İnternetdə fərqli cavablar.
GSLB - sağlamlıq yoxlamaları və siyasətləri (latency, geo, capacity) ilə qlobal balanslaşdırıcı.
5) Sağlamlıq-yoxlama və təravət
DNS özü "axmaq 'dır: o, backends sağlamlığını bilmir. Buna görə:- Ya xarici health-checker qeydləri/çəkiləri idarə edir (GSLB, Route53/Traffic-policy, external-dns + testlər).
- Və ya müştəri/mesh aktiv outlier-ejection və retry edir.
6) Kubernetes: qutudan discovery
Xidmət adları: 'svc. namespace. svc. cluster. local`.
ClusterIP: sabit virtual IP + kube-proxy/ebpf.
Headless Service ('clusterIP: None'): A-qeydlərini pod 'lara (və ya onların alt domeninə), limanlara SRV verir.
EndpointSlice: End-pointlərin ölçülə bilən siyahısı (Endpoints-in əvəzlənməsi).
CoreDNS: DNS rezolver klasteri; plugins rewrite/template/forward/cache; 'kube-dns' zona.
NodeLocal DNSCache: qovşağında lokal cache → daha az latency və axın rezolver problemlərinin tutulması.
Nümunə: Headless + SRV
yaml apiVersion: v1 kind: Service metadata: { name: payments, namespace: prod }
spec:
clusterIP: None selector: { app: payments }
ports:
- name: grpc port: 50051 targetPort: 50051
Müştəri '_ grpc. _ tcp. payments. prod. svc. cluster. local '(SRV) və host/port/çəki almaq.
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 (fikirlər):
- DaemonSet '169 yerli rezolver ilə. 254. 20. 10`; kubelet bu nöqtəni göstərir.
- p99 name-resolution azaldır və «flap» apstrim-DNS qoruyur.
7) Service discovery вне K8s
Consul: agent, health-checks, xidmət kataloqu, DNS interfeysi ('.consul'), konfiqurasiya üçün KV.
Eureka/ZooKeeper/etcd: JVM/legacy üçün reyestrlər; tez-tez sidecar/şlüz ilə birlikdə.
Envoy/Istio: EDS/xDS (Endpoint Discovery) və SDS (sirləri); xidmətlər control-plane vasitəsilə elan edilir.
8) DNS təhlükəsizliyi
DNSSEC: qeydlərin bütövlüyünü qorumaq (imza zonaları). Ümumi domenlər üçün kritik.
DoT/DoH: rekursor kanal şifrələmə (daxili siyasətlər, uyğunluq).
ACL və split-horizon: Xüsusi zona - yalnız VPC/VPN-dən.
Cash zəhərlənməyə qarşı qorunma: port/ID randomizasiyası, dinamika üçün qısa TTL.
Egress siyasətləri: DNS-ə yalnız etibarlı rezolverlərdə icazə verin, jurnal edin.
9) Müştərilərin davranışı və retraj
TTL-ə hörmət edin: sonsuza qədər cache etməyin, tez-tez nəticələr verməyin (təkrarlayıcıya fırtına).
Happy Eyeballs (IPv4/IPv6), bir neçə A/AAAA paralel bağlar tail azaldır.
Retrai yalnız idempotent sorğu ilə; jitter, budget retrai məhdudiyyəti.
- Java: `networkaddress. cache. ttl`, `networkaddress. cache. negative. ttl`.
- Go: `GODEBUG=netdns=go`/`cgo`, `Resolver. PreferGo`, `DialTimeout`.
- Node: `dns. setDefaultResultOrder('ipv4first')`, `lookup` с `all:true`.
10) GSLB/DNS keçid: təcrübə
TTL-i planlaşdırılan dəyişdirmədən 24-48 saat əvvəl 300 → 60-dan aşağı salın.
Validasiya üçün aşağı çəki ilə kanarya end dəsti saxlayın.
Əl kütləvi A yeniləməsi əvəzinə weighted + health-check tətbiq edin.
Statik/edge üçün - Anycast; API üçün - Geo/Latency + sürətli L7 feylover.
11) Adı üçün müşahidə və SLO
Metriklər:- Rate/latency DNS sorğuları, cache hit-ratio, tip səhvləri (SERVFAIL/NXDOMAIN).
- Stale-cavablarla sorğuların payı (stale-cache istifadə edirsinizsə).
- Qeydlərin dəyişdirilməsində istifadəçi əməliyyatlarının uğuru (Business SLI).
- p95/p99 resolve-time applications.
- Yol: müştəri → yerli cache → nod cache → klaster rezolver → provayder rekursor.
- NXDOMAIN (ad/çap səhvləri) və SERVFAIL (resurs/resurs limitləri problemləri) partlayışlarını izləyin.
12) Konfiqurasiya nümunələri
CoreDNS: rewrite və stub zona
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 (fors lokal rezolver)
ini
[Resolve]
DNS=169. 254. 20. 10
FallbackDNS=1. 1. 1. 1 8. 8. 8. 8
Domains=~cluster. local ~internal
DNSSEC=yes
Envoy: dinamik DNS-refresh
yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true
external-dns (ictimai zona dəstəyi)
yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod
13) Giriş çek siyahısı (0-30 gün)
0-7 gün
Xidmət adları kataloqu, model seçimi (client-/server-side/hibrid).
Əsas TTL, NodeLocal DNSCache, DNS metrik dashboard daxildir.
Konfiqada/kodda «sərt IP» qadağası.
8-20 gün
gRPC üçün Headless Services + SRV; EndpointSlice aktiv.
Xarici üçün GSLB/weighted; health-checks və kanarya.
Müştərilərin vaxtları/retrajları və retrajların büdcəsi.
21-30 gün
Split-horizon və xüsusi zonalar; DoT/DoH siyasət.
Switch Test (TTL) və Feylover; post-analiz.
mesh/EDS, outlier-ejection siyasətləri daxildir.
14) Anti-nümunələr
TTL = 0 prod → resurs fırtına, gözlənilməz gecikmələr.
IP/port hardcode, səviyyələri üçün CNAME/alias yoxdur.
Health-checks və kanaryalar olmadan «əl ilə» qeydlərin dəyişdirilməsi.
Bir qlobal rezolver node cache olmadan (dar yer).
Mənfi cache (NXDOMAIN sıçrayışları) məhəl qoymayın.
DNS vasitəsilə DB-nin uğursuzluğunu «müalicə etmək» cəhdləri/faylover.
15) Yetkinlik metrikası
Xidmətlərin 100% -i adlardan istifadə edir; sıfır hard-IP halları.
CoreDNS/NodeLocal prod, cache hit-ratio> 90% düyünlərdə.
TTL və runbook switches tərəfindən sənədləşdirilmiş health-checks ilə GSLB.
stateful/gRPC üçün SRV/EndpointSlice, p99 resolve-time applications ≤ 20-30 ms.
SERVFAIL/NXDOMAIN və cache hit-ratio deqradasiyası.
CI-də yoxlamalar: charts/konfiqurasiyalarda ': latest' və hard-IP qadağası.
16) Nəticə
Service discovery sabit ad və cache nizam-intizam müqaviləsidir. hibrid model qurun: DNS sürətli və asan giriş verir, L7/mesh - sağlamlıq və ağıllı siyasətçilər. Ağıllı TTL, qovşaqlarda cache, istədiyiniz yerdə headless və SRV dəstəkləyin, bölgələrin sərhədləri üçün GSLB/Anycast istifadə edin, NXDOMAIN/SERVFAIL və p99 resolve-time izləyin. Sonra adınız xidmətin özü kimi etibarlı bir aktiv olacaq.