Service Discovery va DNS
Service Discovery va DNS
1) Nima uchun bu zarur?
Tarqatilgan tizimlarda uzellar paydo bo’ladi va yo’qoladi, mijozlar esa xizmatning ishchi nusxalarini tez va ishonchli topishlari kerak. DNS - nomlarning universal qatlami; service discovery - salomatlik, og’irlik va yo’naltirish siyosatini hisobga olgan holda servis nomini real endpointlarga solishtirish strategiyasi.
Asosiy maqsadlar:- efemer manzillar o’rniga barqaror nomlar,
- aniq, lekin shovqinli bo’lmagan yangilanish (yangilik va TTL o’rtasidagi balans),
- to’liq tushmasdan degradatsiya (failover/health-check),
- mijozda minimal «taxminlar»: taymautlar, retryalar, kesh-siyosatlar.
2) service discovery modellari
2. 1 Mijoz (client-side)
Mijozning o’zi ismni endpointlar to’plamiga kiritadi va uni muvozanatlaydi (round-robin, EWMA, kalit bo’yicha xesh). Manba - DNS (A/AAAA/SRV), servis-reyestr (Consul/Eureka), statik ro’yxat.
Ijobiy tomonlari: markaziy SPOF kamroq, moslashuvchan algoritmlar.
Salbiy tomonlari: mijozlarning bir xilligi, mantiqni yangilash qiyinroq.
2. 2 Server (server-side)
Mijoz front/LB (L4/L7, gateway/ingress) ga boradi. Balanslash va health-checking - proksi/balanslashtiruvchi tomonida.
Ijobiy tomonlari: siyosatning yagona o’rni, kuzatish.
Kamchiliklar: yuqori darajada foydalanish mumkin bo’lgan perimetr (N + 1, multi-AZ) kerak.
2. 3 Gibrid
DNS kirish nuqtalari toʻplamini (mintaqaviy LB) beradi, keyin esa L7/mesh balansini beradi.
3) DNS: asoslari, yozuvlari va TTL
3. 1 Asosiy turlari
A/AAAA - IPv4/IPv6 manzillar.
CNAME - boshqa nomdagi alias (apex emas).
SRV — `_service._proto. name’→ xost/port/og’irlik/ustuvorlik (gRPC/LDAP/SIP va boshqalar uchun).
TXT/HTTP/HTTPS - meta maʼlumotlar/koʻrsatgichlar (shu jumladan HTTP-discovery uchun).
NS/SOA - vakolat va atributlar.
3. 2 TTL va kesh kaskadi
Kesh: OS rezolverida, lokal stub-rezolverda, uzellarda (NodeLocal DNS/CoreDNS), provayderda, oraliq rekursorlarda va kutubxona mijozida mavjud. Haqiqiy yangilik = min (TTL, mijoz siyosati). Salbiy kesh (NXDOMAIN) ham’SOA orqali kesh qilinadi. MINIMUM`/`TTL`.
Tavsiyalar:- Prod - TTL 30-120s dinamik yozuvlar uchun, 300-600s barqaror yozuvlar uchun.
- O’zgartirish uchun «yong’in paytida» emas, balki pasaytirilgan TTLni oldindan tayyorlang.
- Kutubxonaning sticky-keshini (Java/Go/Node) hisobga oling - agar kerak boʻlsa, rantaym ichida TTL rezolverini sozlang.
4) DNS-balanslash va nosozlikka chidamlilik siyosati
Weighted RR - A/AAAA/SRV vazni.
Failover - birlamchi/ikkilamchi to’plamlar (tashqarida health-check).
Geo/Latency - «eng yaqin» XTR/mintaqaga javob.
Anycast - turli POP (BGP) larda bitta IP; mintaqaviy uzilishlarga chidamli.
Split-horizon - VPC/on-prem ichida va Internetda turli xil javoblar.
GSLB - health-tekshirish va siyosatga ega global balanschi (latency, geo, capacity).
5) Health-checks va yangilik
DNS o’z-o’zidan «ahmoq»: u orqa tomonlarning sog’lig’ini bilmaydi. Shuning uchun:- Yoki tashqi health-checker yozuvlar/tarozilarni boshqaradi (GSLB, Route53/Traffic-policy, external-dns + namunalar).
- Yoki mijoz/mesh bir nechta endpointlardan faol outlier-ejection va retry qiladi.
6) Kubernetes: qutidan discovery
Xizmat nomlari:’svc. namespace. svc. cluster. local`.
ClusterIP: barqaror virtual IP + kube-proxy/ebpf.
Headless Service (’clusterIP: None’): A-yozuvlarni pod’lar (yoki ularning pastki domeniga), portlar uchun SRV beradi.
EndpointSlice: kattalashtiriladigan endpointlar roʻyxati.
CoreDNS: klaster DNS-rezolver; plaginlar rewrite/template/forward/cache;’kube-dns’zonasi.
NodeLocal DNSCache: lokal kesh → kamroq latency va apstrim rezolver muammolari.
Misol: 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
Mijoz’_ grpc. _ tcp. payments. prod. svc. cluster. local’(SRV) va xost/port/vazn olish.
CoreDNS (ConfigMap fraqmenti)
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 (gʻoyalar):
- ’169 da lokal rezolver bilan DaemonSet. 254. 20. 10`; kubelet shu nuqtani koʻrsatadi.
- p99 name-resolution ni kamaytiradi va «flap» dan apstrim-DNS ni himoya qiladi.
7) Service discovery tashqarisida K8s
Consul: agent, health-checks, servis-katalog, DNS interfeysi (’.consul’), konfiguratsiyalar uchun KV.
Eureka/ZooKeeper/etcd: JVM/legacy uchun reyestrlar; ko’pincha sidecar/shlyuz bilan bog’langan.
Envoy/Istio: EDS/xDS (Endpoint Discovery) va SDS (sirlar); xizmatlar control-plane orqali e’lon qilinadi.
8) DNS xavfsizligi
DNSSEC: yozuvlarning yaxlitligini himoya qilish (imzo zonalari). Umumiy domenlar uchun juda muhim.
DoT/DoH: rekursorga kanalni shifrlash (ichki siyosatlar, muvofiqlik).
ACL va split-horizon: xususiy zona - faqat VPC/VPN dan.
Kesh zaharlanishdan himoya qilish: port/ID randomizatsiyasi, dinamika uchun qisqa TTL.
Egress siyosati: DNSga faqat ishonchli rezolverlarda ruxsat bering, jurnalga kiriting.
9) Mijozlarning xulq-atvori va retrasi
TTLni hurmat qiling: cheksiz keshlamang, tez-tez bo’ron bilan «cheklamang».
Happy Eyeballs (IPv4/IPv6), bir nechta A/AAAA parallel konnektlari tail qismini kamaytiradi.
Retrai faqat idempotent so’rovlarida; jitter, budget retraylarni cheklash.
- Java: `networkaddress. cache. ttl`, `networkaddress. cache. negative. ttl`.
- Go: `GODEBUG=netdns=go`/`cgo`, `Resolver. PreferGo`, `DialTimeout`.
- Node: `dns. setDefaultResultOrder('ipv4first')`, `lookup` `all bilan:true`.
10) GSLB/DNS almashtirish: amaliyot
TTLni rejadan 24-48 soat oldin 300 → 60 dan pasaytiring.
Validatsiya qilish uchun kanareik past vaznli endpoyntlar to’plamini saqlang.
Qo’lda A-yozuvlarning ommaviy yangilanishi o’rniga weighted + health-check’ni qo’llang.
Statika/edge uchun - Anycast; API uchun - Geo/Latency + tezkor L7-feylover.
11) Ism uchun kuzatish va SLO
Metriklar:- Rate/latency DNS-so’rovlar, cache hit-ratio, turlar bo’yicha xatolar (SERVFAIL/NXDOMAIN).
- Stale-javob soʻrovlari ulushi (agar siz stale-cache’dan foydalansangiz).
- Yozuvlarni almashtirishda foydalanuvchi operatsiyalarining muvaffaqiyati (biznes-SLI).
- p95/p99 resolve-time ilovalarda.
- Yo’lni ajrating: mijoz → lokal kesh → node kesh → klaster rezolver → provayder rekursori.
- NXDOMAIN (nomlar/xatolar) va SERVFAIL (resurs/resurs limitlari muammolari) portlashlarini kuzatib boring.
12) Konfiguratsiya namunalari
CoreDNS: rewrite va stub zonasi
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 (lokal rezolver forsi)
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 (ommaviy zonani qoʻllab-quvvatlash)
yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod
13) Joriy etish chek-varaqasi (0-30 kun)
0-7 kun
Services nomlari katalogi, model tanlash (client-/server-side/gibrid).
Asosiy TTL, NodeLocal DNSCache, DNS-metrik dashbordlarni o’z ichiga oladi.
Konfig/kodda «qattiq IP» ni taqiqlash.
8-20 kun
gRPC uchun Headless-servislar + SRV; EndpointSlice aktiv.
Tashqi uchun GSLB/weighted; health-checks va kanareyka.
Taymautlar/retrajlar va retrajlar byudjeti sozlandi.
21-30 kun
Split-horizon va xususiy zonalar; Siyosat bo’yicha DoT/DoH.
O’zgartirish (TTL bo’yicha) va faylover testi; post-tahlil.
mesh/EDS, outlier-ejection siyosati kiritilgan.
14) Anti-patternlar
TTL = 0 prod → rekursorlarga bo’ron, oldindan aytib bo’lmaydigan kechikishlar.
IP/port hardkodi, darajalar uchun CNAME/alias yo’qligi.
Health-checks va kanareykalarsiz yozuvlarni qoʻlda almashtirish.
Tugunlarda keshsiz bitta global rezolver (tor joy).
Salbiy keshni eʼtiborsiz qoldirish (NXDOMAIN portlashi).
Maʼlumotlar/faylover darajasi oʻrniga DNS orqali DB nosozligini «davolashga» urinishlar.
15) Etuklik metrikasi
100% servislar nomlardan foydalanadi; nol hard-IP holatlari.
CoreDNS/NodeLocal prodda, cache hit-ratio> 90% uzellarda.
TTL va runbook bilan hujjatlashtirilgan health-checks bilan GSLB.
stateful/gRPC uchun SRV/EndpointSlice, p99 resolve-time ilovalarda ≤ 20-30 ms.
SERVFAIL/NXDOMAIN va degradatsiya bo’yicha alertlar cache hit-ratio.
Chartlarda/konfiguratsiyalarda’: latest’va hard-IP’ni tekshirish.
16) Xulosa
Service discovery - bu barqaror nom va kesh tartibi to’g’risidagi shartnoma. Gibrid modelni yarating: DNS tezkor va oson kirish imkonini beradi, L7/mesh - salomatlik va aqlli siyosatchilar. Mantiqiy TTL, tugunlardagi kesh, headless-services va SRVni kerak bo’lganda qo’llab-quvvatlang, mintaqa chegaralari uchun GSLB/Anycast’dan foydalaning, NXDOMAIN/SERVFAIL va p99 resolve-time’dan foydalaning. Shunda sizning ismingiz xizmatning o’zi kabi ishonchli aktiv bo’ladi.