Service Discovery и DNS
Service Discovery и DNS
1) Bu näme üçin zerur?
Paýlanan ulgamlarda düwünler peýda bolýar we ýitýär, müşderiler bolsa hyzmatyň iş nusgalaryny çalt we ygtybarly tapmalydyrlar. DNS - atlaryň ähliumumy gatlagy; service discovery - saglygy, agramy we ugrukdyryş syýasatyny göz öňünde tutup, hyzmatyň adyny hakyky endpointlere deňeşdirmek strategiýasy.
Esasy maksatlar:- efemer salgylarynyň ýerine durnukly atlar,
- takyk, ýöne şowhunly täzelenme (tazelik bilen TTL arasyndaky deňagramlylyk),
- doly ýykylmazdan pese gaçmak (failover/health-check),
- müşderide iň az "çaklamalar": wagt, retralar, keş-syýasatlar.
2) service discovery modelleri
2. 1 Müşderi (client-side)
Müşderiniň özi ady endpointler toplumyna goýberýär we deňagramlaşdyrýar (round-robin, EWMA, açar boýunça heş). Çeşme - DNS (A/AAAA/SRV), hyzmat sanawy (Consul/Eureka), statik sanawy.
Artykmaçlyklary: merkezi SPOF-dan az, çeýe algoritmler.
Minuslar: müşderileriň birmeňzeşligi, logikany täzelemek has kyn.
2. 2 Serwer (serwer-side)
Müşderi front/LB (L4/L7, gateway/ingress) ugraýar. Deňagramlylyk we health-checking proxy/balanslaýjynyň tarapynda.
Artykmaçlyklary: syýasatyň ýeke-täk ýeri, syn edilmegi.
Minuslar: ýokary elýeterli perimetr gerek (N + 1, multi-AZ).
2. 3 Gibrid
DNS giriş nokatlarynyň toplumyny (sebitleýin LB) berýär, soňra - L7/mesh deňagramlylygy.
3) DNS: esaslar, ýazgylar we TTL
3. 1 Esasy görnüşleri
A/AAAA - IPv4/IPv6 salgylary.
CNAME - başga adyň aliasy (apex däl).
SRV — `_service._proto. name '→ host/port/agram/ileri (gRPC/LDAP/SIP we ş.m.).
TXT/HTTP/HTTPS - meta-maglumatlar/görkezijiler (şol sanda HTTP-discovery üçin).
NS/SOA - zona tabşyrmak we atributlar.
3. 2 TTL we nagt kaskad
Keş bar: OS rezolweri, lokal stub-rezolweri, düwünleri (NodeLocal DNS/CoreDNS), üpjün ediji, aralyk rekursorlary we kitaphananyň müşderisi. Hakyky täzelik = min (TTL, müşderiniň syýasaty). Negatiw nagt pul (NXDOMAIN) hem 'SOA arkaly kesilýär. MINIMUM`/`TTL`.
Teklipler:- Prod - TTL dinamiki ýazgylar üçin 30-120s, durnukly ýazgylar üçin 300-600s.
- Geçiş üçin (feýlower) "ýangyn wagtynda" däl-de, öňünden azaldylan TTL taýýarlaň.
- Kitaphananyň sticky-kesşini (Java/Go/Node) göz öňünde tutuň - zerur bolsa, TTL rezolwerini kärendäniň içinde sazlaň.
4) DNS-deňagramlylyk we şowsuzlyga çydamlylyk syýasaty
Weighted RR - A/AAAA/SRV agramy.
Failover - ilkinji/ikinji derejeli toplumlar (daşardan saglyk-barlag).
Geo/Latency - "iň ýakyn" ROP/sebite jogap.
Anycast - dürli POP (BGP) -de bir IP; sebitleýin şowsuzlyklara durnukly.
Split-horizon - VPC/on-prem we internetde dürli jogaplar.
GSLB - saglyk barlaglary we syýasatlary (latency, geo, capacity) bilen global deňagramlaşdyryjy.
5) Saglyk-barlag we täzelik
DNS-iň özi "samsyk": arka taraplaryň saglygyny bilmeýär. Şonuň üçin:- Ýa-da daşarky saglyk barlagçysy ýazgylary/agramlary dolandyrýar (GSLB, Route53/Traffic-policy, external-dns + synaglary).
- Ýa-da müşderi/mesh köp sanly endpointlerden işjeň outlier-ejection we retry edýär.
6) Kubernetes: gutudan discovery
Hyzmat atlary: 'svc. namespace. svc. cluster. local`.
ClusterIP: durnukly wirtual IP + kube-proxy/ebpf.
Headless Service ('clusterIP: None'): A-ýazgylary pod 'lara (ýa-da olaryň alt domenine), portlar üçin SRV berýär.
EndpointSlice: giňeldilip bilinýän endpoints sanawy.
CoreDNS: klaster DNS rezolweri; pluginleri rewrite/template/forward/cache; 'kube-dns' zonasy.
NodeLocal DNSCache: düwündäki lokal kesiş → az latency we artykmaç rezolwer problemalarynyň öňüni almak.
Mysal: 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üşderi '_ grpc. _ tcp. payments. prod. svc. cluster. local '(SRV) we host/port/agram almak.
CoreDNS (ConfigMap bölegi)
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 (ideýalar):
- DaemonSet lokal rezolwer bilen '169. 254. 20. 10`; kubelet bu nokady görkezýär.
- p99 name-resolution-y peseldýär we "flapdan" apstrim-DNS-i goraýar.
7) Service discovery вне K8s
Consul: agent, health-checks, hyzmat katalogy, DNS interfeýsi ('.consul'), konfigurasiýalar üçin KV.
Eureka/ZooKeeper/etcd: JVM/legacy üçin sanawlar; köplenç sidecar/şlýuz bilen bilelikde.
Envoy/Istio: EDS/xDS (Endpoint Discovery) we SDS (syrlar); hyzmatlar control-plane arkaly yglan edilýär.
8) DNS howpsuzlygy
DNSSEC: ýazgylaryň bitewiligini goramak (zolaklaryň goly). Jemgyýetçilik domenleri üçin möhüm.
DoT/DoH: rekursor üçin kanalyň şifrlenmegi (içerki syýasatlar, laýyklyk).
ACL we split-horizon: hususy zona - diňe VPC/VPN-den.
Kesh zäherlenmesinden goramak: port/ID randomizasiýasy, dinamika üçin gysga TTL.
Egress syýasaty: DNS-e diňe ynanylan rezolwerlerde rugsat beriň, journalurnalyň.
9) Müşderileriň özüni alyp barşy we retra
TTL-e hormat goýuň: tükeniksiz kesişmäň, ýygy-ýygydan "çäklendirmäň" (gaýtalaýjy tupan).
Happy Eyeballs (IPv4/IPv6), birnäçe A/AAAA paralel konnektler tail azaldýar.
Retralar diňe idempotent haýyşlarynda; jitler, budget retraýlarynyň çäklendirilmegi.
- 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-geçiş: tejribe
TTL-i meýilleşdirilen geçişden 24-48 sagat öň 300 → 60-dan peseldiň.
Tassyklamak üçin pes agramly endpointleriň kanar toplumyny saklaň.
A ýazgylarynyň köpçülikleýin täzelenmesiniň ýerine weighted + health-check ulanyň.
Statika/edge üçin - Anycast; API üçin - Geo/Latency + çalt L7 feylower.
11) At üçin synlamak we SLO
Metrikler:- Rate/latency DNS-soraglary, cache hit-ratio, görnüşleri boýunça ýalňyşlyklar (SERVFAIL/NXDOMAIN).
- Stale-jogaplar bilen soraglaryň paýy (stale-cache ulanýan bolsaňyz).
- Ýazgylar çalşylanda ulanyjy amallarynyň üstünligi (business-SLI).
- p95/p99 resolve-time programmalarda.
- Ýoly düzüň: müşderi → ýerli keş → nod keş → klaster rezolweri → üpjün edijiniň rekursory.
- NXDOMAIN (atlaryň ýalňyşlyklary/ýalňyşlyklar) we SERVFAIL (rekursor problemalary/çeşme çäkleri) partlamalaryny yzarlaň.
12) Konfigurasiýa mysallary
CoreDNS: rewrite we stub zonasy
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
Envoy: dinamiki DNS-refresh
yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true
external-dns (köpçülik zolagyny goldamak)
yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod
13) Giriş çek-sanawy (0-30 gün)
0-7 gün
Hyzmat atlarynyň katalogy, modeli saýlamak (client-/server-side/gibrid).
Esasy TTL, NodeLocal DNSCache, DNS metrik daşbordlary goşuň.
Konfigada/kodda "gaty IP" gadaganlygy.
8-20 gün
gRPC üçin Headless-services + SRV; EndpointSlice açyldy.
Daşarky üçin GSLB/weighted; saglyk barlaglary we kanareýa.
Müşderileriň wagtlary/retraýlary we retraýlaryň býudjeti sazlandy.
21-30 gün
Split-horizon we hususy zolaklar; Syýasat boýunça DoT/DoH.
Geçiş synagy (TTL boýunça) we feýlower; post-derňew.
Mesh/EDS, outlier-ejection syýasatlary girizildi.
14) Anti-patternler
TTL = 0 -da → rekursorlara tupan, garaşylmadyk gijikdirmeler.
IP/port hardcode, derejeler üçin CNAME/alias ýoklugy.
Saglyk barlaglary we kanareýalar bolmazdan "el bilen" ýazgylary üýtgetmek.
Düwünlerde kesişsiz bir global rezolver (dar ýer).
Negatiwleri äsgermezlik etmek (NXDOMAIN partlamalary).
Maglumat/feýlower derejesiniň ýerine DNS arkaly DB şowsuzlygyny "bejermek" synanyşyklary.
15) Kämillik ölçegleri
Hyzmatlaryň 100% -i atlary ulanýar; nol hard-IP halatlary.
CoreDNS/NodeLocal prodda, cache hit-ratio> 90% düwünlerde.
TTL we runbook geçişleri bilen resminamalaşdyrylan saglyk barlaglary bilen GSLB.
SRV/EndpointSlice stateful/gRPC üçin, p99 resolve-time programmalarda ≤ 20-30 ms.
SERVFAIL/NXDOMAIN we degradasiýa boýunça alertler cache hit-ratio.
CI barlaglary: charts/konfigurasiýalarda ': latest' we hard-IP gadaganlygy.
16) Netijenama
Service discovery - durnukly at we kesh düzgüni hakynda şertnama. Gibrid model guruň: DNS çalt we ýönekeý giriş berýär, L7/mesh - saglyk we akylly syýasatçylar. Akylly TTL-leri, düwünlerdäki nagt pullary, headless-hyzmatlary we SRV-leri zerur ýerlerde saklaň, sebitleriň çäkleri üçin GSLB/Anycast ulanyň, NXDOMAIN/SERVFAIL we p99 resolve-time yzarlaň. Şonda adyňyz hyzmatyň özi ýaly ygtybarly aktiw bolar.