Service Discovery и DNS
Service Discovery и 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 вне 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: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.