Service Discovery и DNS
Service Discovery и DNS
1) Эмне үчүн керек
Бөлүштүрүлгөн системаларда түйүндөр пайда болот жана жок болот, ал эми кардарлар кызматтын жумушчу нускаларын тез жана ишенимдүү табышы керек. DNS - ысымдардын жалпы катмары; service discovery - ден соолук, салмагы жана багыттоо саясатын эске алуу менен реалдуу end-points кызмат атын салыштыруу стратегиясы.
Негизги максаттары:- туруктуу ысымдар ордуна эфемердик даректер,
- так, бирок ызы-чуу update (сергектик жана TTL ортосундагы баланс),
- толук түшүүсүз деградация (failover/health-check),
- минималдуу "болжолдоолор" бар: таймауттар, ретрайлер, кэш-саясатчылар.
2) discovery кызматы моделдер
2. 1 Кардар (client-side)
Кардар өзү эндпойнттордун топтомуна аты-жөнүн берет жана баланстайт (round-robin, EWMA, ачкыч боюнча хеш). Булак - DNS (A/AAAA/SRV), тейлөө реестри (Consul/Eureka), статикалык тизме.
Артыкчылыктары: аз борбордук SPOF, ийкемдүү алгоритмдер.
Кемчиликтери: кардарлардын гетерогендүүлүгү, логиканы жаңылоо кыйыныраак.
2. 2 Сервер бөлмөсү (server-side)
Кардар front/LB (L4/L7, gateway/ingress) барат. Баланстоо жана ден соолук-текшерүү - тарапта прокси/баланстоочу.
Артыкчылыктары: саясаттын бир орду, байкоо.
Минустар: жогорку жеткиликтүү периметр (N + 1, multi-AZ) керек.
2. 3 гибрид
DNS кириш пункттарынын топтомун берет (аймактык LB), андан ары - L7/mesh боюнча балансы.
3) DNS: негиздери, жазуулар жана TTL
3. 1 Негизги түрлөрү
A/AAAA - IPv4/IPv6 даректери.
CNAME - башка аталыштагы алиас (apex эмес).
SRV — `_service._proto. name '→ хост/порт/салмак/артыкчылык (gRPC/LDAP/SIP ж.б. үчүн).
TXT/HTTP/HTTPS - метадеректер/көрсөткүчтөр (анын ичинде HTTP-discovery үчүн).
NS/SOA - өкүлчүлүк жана зонанын атрибуттары.
3. 2 TTL жана кэш-каскад
Кэш бар: ОС резолвер, жергиликтүү stub-резолвер, түйүндөр (NodeLocal DNS/CoreDNS), провайдер, аралык рекурсорлор жана китепкананын кардары. Чыныгы сергектик = min (TTL, кардар саясаты). Терс кэш (NXDOMAIN) да 'SOA боюнча кэш. MINIMUM`/`TTL`.
Сунуштар:- Прод - динамикалык жазуулар үчүн TTL 30-120s, туруктуу үчүн 300-600s.
- которуу үчүн (Feylover) алдын ала төмөндөтүлгөн TTL даярдоо эмес, "өрт учурунда".
- Sticky-кэш китепканаларды эске алуу (Java/Go/Node) - керек болсо, рантайм ичинде TTL резолверди орнотуу.
4) DNS-балансташтыруу жана үзгүлтүккө туруктуулук саясаты
Weighted RR - салмагы боюнча A/AAAA/SRV.
Failover - биринчилик/экинчилик топтомдор (сыртынан ден соолук-текшерүү).
Geo/Latency - "жакынкы" РОР/регионго жооп.
Anycast - ар кандай POP (BGP) бир IP; региондук мүчүлүштүктөргө туруктуу.
Split-horizon - VPC/он-прем ичинде жана Интернетте ар кандай жооптор.
GSLB - ден соолук текшерүү жана саясат (latency, гео, capacity) менен глобалдык балансчы.
5) Ден соолук-текшерүү жана сергектик
DNS өзү "келесоо": Ал бэкенддердин ден соолугун билбейт. Ошондуктан:- Же тышкы ден соолук текшерүүчү жазууларды/таразаларды башкарат (GSLB, Route53/Traffic-policy, external-dns + үлгүлөр).
- Же кардар/mesh активдүү outlier-ejection жана retry көптөгөн end-points.
6) Kubernetes: кутудан discovery
Кызмат аттары: 'svc. namespace. svc. cluster. local`.
ClusterIP: туруктуу жасалма IP + кубе-прокси/ebpf.
Headless Service ('clusterIP: None'): Pod's A-жазууларды (же алардын поддомендерин), порттор үчүн SRV берет.
EndpointSlice: Эндпойнттордун масштабдуу тизмеси (Endpoints алмаштыруу).
CoreDNS: DNS резолвер кластери; плагиндер rewrite/template/forward/cache; 'кубе-dns' аймак.
NodeLocal DNSCache: түйүнүндөгү жергиликтүү кэш → аз latency жана апстрим-резолвердин көйгөйлөрүн кармоо.
Мисал: 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
Кардар '_ grpc. _ tcp. payments. prod. svc. cluster. local '(SRV) жана хост/порт/салмагын алуу.
CoreDNS (ConfigMap үзүндүсү)
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 (идеялар):
- DaemonSet '169 боюнча жергиликтүү толкундары менен. 254. 20. 10`; kubelet бул чекитти көрсөтөт.
- p99 name-resolution азайтат жана "Flap" apstrim-DNS коргойт.
7) Service discovery вне K8s
Consul: агент, ден соолук-текшерүү, тейлөө каталогу, DNS-Interface ('.consul'), конфигурациялар үчүн KV.
Eureka/ZooKeeper/etcd: JVM/legacy үчүн реестрлер; көбүнчө sidecar/шлюз менен бирге.
Envoy/Istio: EDS/xDS (Endpoint Discovery) жана SDS (сырлар); кызматтар control-plane аркылуу жарыяланат.
8) DNS коопсуздук
DNSSEC: жазуулардын бүтүндүгүн коргоо (кол зоналары). коомдук домендер үчүн сын.
DoT/DoH: рекурсорго каналды шифрлөө (ички саясат, шайкештик).
ACL жана split-horizon: Жеке аймак - VPC/VPN гана.
Кэш уулануудан коргоо: портторду/ID рандомизациялоо, динамика үчүн кыска TTL.
egress боюнча саясат: DNS гана ишенимдүү чечмелөө үчүн уруксат, журнал.
9) Кардарлардын жүрүм-туруму жана ретра
TTL урматтаңыз: чексиз кэш жасабаңыз, тез-тез кол салуулар менен "чектебеңиз" (рекурсорго бороон).
Happy Eyeballs (IPv4/IPv6), бир нече A/AAAA параллелдүү байланыштар tail азайтат.
Ретраи гана демпотенттик суроо-талап менен; життер, retrains budget чектөө.
- 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-которуу: практика
пландаштырылган которууга чейин 24-48 саат 300 → 60 менен TTL төмөндөтүү.
валидация үчүн аз салмактагы канареалык эндпойнттордун топтомун кармаңыз.
Колдо массалык A жазууларынын ордуна weighted + health-check колдонуңуз.
Статика/edge үчүн - Anycast; API үчүн - Geo/Latency + тез L7-Feylover.
11) Байкоо жана аты үчүн SLO
Метрикасы:- Rate/latency DNS-суроолор, cache hit-ratio, түрлөрү боюнча каталар (SERVFAIL/NXDOMAIN).
- Stale жооптор менен суроо үлүшү (эгер сиз stale-cache колдонсоңуз).
- Жазууларды алмаштырууда колдонуучу операцияларынын ийгилиги (бизнес-SLI).
- p95/p99 колдонмолордо resolve-time.
- Жол: кардар → жергиликтүү кэш → нод кэш → кластердик резолвер → рекурсор провайдер.
- NXDOMAIN (аттардын каталары/каталар) жана SERVFAIL (рекурсор көйгөйлөрү/ресурс лимиттери) жарылууларына көз салыңыз.
12) Конфигурация мисалдары
CoreDNS: rewrite жана stub зонасы
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: динамикалык DNS-refresh
yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true
external-dns (коомдук аймакты колдоо)
yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod
13) киргизүү чек-тизмеси (0-30 күн)
0-7 күн
Кызмат аттарынын каталогу, моделдерди тандоо (client-/server-side/гибрид).
Негизги TTL, NodeLocal DNSCache, dashboard DNS-метрик кирет.
"Катуу IP" тыюу config/код.
8-20 күн
Headless кызматтар + gRPC үчүн SRV; EndpointSlice кирет.
тышкы үчүн GSLB/weighted; ден соолук текшерүүлөр жана канарейка.
Таймауттар/кардарларды ретрациялоо жана ретрациялардын бюджети.
21-30 күн
Split-horizon жана жеке зоналар; DoT/DoH саясат.
Switches сыноо (TTL боюнча) жана Feylover; пост-талдоо.
Сетка/EDS саясаты, outlier-ejection кирет.
14) Анти-үлгүлөрү
TTL = 0 → рекурсорлор үчүн бороон, күтүүсүз кечигүү.
Hardcode IP/порттору, деңгээл үчүн CNAME/alias жок.
health-checks жана канарейка жок "кол менен" жазууларды өзгөртүү.
түйүндөрүндө кэш жок бир Global Resolver (тар).
Терс кэшке көңүл бурбоо (NXDOMAIN жарылуусу).
DNS аркылуу DDнин бузулушун "дарылоо" аракети, анын ордуна берилиштердин/фейловердин деңгээли.
15) Жетилүү метрикасы
100% кызматтар ысымдарды колдонушат; нөл учурларда hard-IP.
CoreDNS/NodeLocal, cache hit-ratio> түйүндөрүндө 90%.
GSLB менен ден соолук текшерүү, документтештирилген TTL жана Runbook которуулар.
SRV/EndpointSlice stateful/gRPC үчүн, p99 resolve-time колдонмолордо ≤ 20-30 ms.
SERVFAIL/NXDOMAIN жана cache hit-ratio деградациясы боюнча алерталар.
CI текшерүү: тыюу ': latest' жана хит-параддарда/конфигурацияларда hard-IP.
16) Корутунду
Service discovery - туруктуу аты-жөнү жана кэш тартиби жөнүндө келишим. гибриддик моделин куруу: DNS тез жана жөнөкөй кирүү берет, L7/mesh - ден соолук жана акылдуу саясатчылар. Акылга сыярлык TTL, түйүндөрдө кэш, headless-кызматтар жана зарыл болгон жерде SRV колдоо, аймактардын чектери үчүн GSLB/Anycast колдонуу, NXDOMAIN/SERVFAIL жана p99 resolve-time. Ошондо сиздин ысымыңыз кызматтын өзү сыяктуу эле ишенимдүү актив болот.