Service Discovery и DNS
Service Discovery и DNS
1) Ինչո՞ ւ է դա անհրաժեշտ
Բաշխված համակարգերում բջիջները հայտնվում և անհետանում են, իսկ հաճախորդները պետք է գտնեն աշխատանքային օրինակներ արագ և հուսալի։ III - անունների համընդհանուր շերտ; www.covery-ը իրական էնդպոինտների տերմինալի ռազմավարություն է 'հաշվի առնելով առողջությունը, քաշը և ուղղման քաղաքականությունը։
Հիմնական նպատակները
կայուն անուններ էֆեմերական հասցեների փոխարեն,
ճշգրիտ, բայց ոչ աղմկոտ ապդեյթ (հավասարակշռություն թարմ և TTL-ի միջև),
քայքայումը առանց անկման (failover/health-intk),
կլիենտում առնվազն «գուշակություններ» 'թայմաուտներ, ռեգրաններ, քեշի քաղաքականություն։
2) wwww.covery մոդելները
2. 1 Հաճախորդ (client-side)
Հաճախորդը ինքն է թույլ տալիս անունը էնդպոինտների հավաքածուի մեջ և հավասարակշռում է (round-robin, EWMA, hash բանալին)։ Աղբյուրը 'CSA (A/AAAA/MSV), ծառայությունն-ռուսական (Consul/Eureka), ստատիկ ցուցակը։
Պլյուսներ ՝ SPOF-ից ավելի քիչ, ճկուն ալգորիթմներ։
Մինուսները 'հաճախորդների երկիմաստությունը, ավելի դժվար է թարմացնել տրամաբանությունը։
2. 2 Սերվերի (server-side)
Հաճախորդը գնում է front/LB (L4/L7, gateway/ingress)։ Հավասարակշռությունը և health-interking-ը 'շարժիչի/հավասարակշռիչի կողմում։
Պլյուսներ ՝ քաղաքականության միասնական տեղը, դիտարկումը։
Մինուսներ 'անհրաժեշտ է բարձր հասանելի պարիմետր (N + 1, multi-AZ)։
2. 3 Հիբրիդ
RF-ն տալիս է մուտքի կետերի մի շարք (տարածաշրջանային LB), այնուհետև 'L7/mesh հավասարակշռություն։
3) IV 'հիմքեր, ձայնագրություններ և TTL-ներ։
3. 1 Հիմնական տեսակներ
A/AAAA-ն IPv4/IPv6 է։
CNAME-ը այլ անունով ալիս է (ոչ apex)։
SRV — `_service._proto. name '07/պորտ/գերակայություն (gRPC/LDAP/SIP և այլն)։
TXT/HTTTPS/HTTPS - մետատվյալներ/ցուցիչներ (ներառյալ HTTP-discovery-ի համար)։
NS/SOA-ը գոտու լուծարումն ու ատրիբուտներն են։
3. 2 TTL և քաշ կասկադ
Քեշը ունի 'ՕՀ-ի ռեզոլվերներ, www.stub-ռեզոլվերներ, հանգույցներ (NodeEntal III/Windows III), պրովայդեր, միջանկյալ ռեքսուրներ և գրադարանի հաճախորդի մոտ։ Իրական թարմություն = min (TTL, հաճախորդի քաղաքականություն)։ Բացասական քեշը (NXDOMAIN) նույնպես քշվում է "SOA-ով։ MINIMUM`/`TTL`.
Առաջարկություններ
Prod - TTL 30-120s դինամիկ ձայնագրությունների համար, 300-600s կայուն համար։
Անցումների համար (ֆեյլովեր) պատրաստեք կրճատված TTL-ը նախապես, ոչ թե «հրդեհի ժամանակ»։
Հաշվի առեք sticky-cash գրադարանները (Java/Go/Node), անհրաժեշտության դեպքում TTL ռեզոլվերները տեղադրեք ռանտայմի ներսում։
4) ՌՖԻ հավասարակշռության և անկայունության քաղաքականությունը
Weighted RR - քաշը A/AAAA/VPV-ում։
Failover-ը առաջնային/ստացիոնար հավաքածուներ է (դրսում health-71 k)։
Geo/Latency-ը «ամենամոտ» ROR/տարածաշրջանի պատասխանն է։
Anycript - մեկ IP տարբեր POP (BGP); դիմացկուն է անհաջողություններին։
Split-horizon - տարբեր պատասխաններ SDC/on-prem և ինտերնետում։
GSLB-ը գլոբալ հավասարակշռող է health-ստուգումների և քաղաքական գործիչների հետ (latency, geo, capacity)։
5) Health-winks և թարմ
ԲԿՄԱ-ն ինքնին «հիմար» է, նա չգիտի բեքենդերի առողջությունը։ Այսպիսով,
Կամ արտաքին health-interker-ը կառավարում է ձայնագրությունները/քաշները (GSLB, Route53/Traffic-policy, external-105 + փորձարկումներ)։
Կամ հաճախորդը/mesh կատարում է ակտիվ www.ier-ej.ru և retry բազմաթիվ էնդպոինտներից։
6) Kubernetes: www.covery տուփից
Ծառայողական անուններ ՝ "svc. namespace. svc. cluster. local`.
ClusterIP: կայուն վիրտուալ IP + kube-proxy/ebpf։
Headless Express («clusterIP: None»), տալիս է A-գրառումները pod-ի վրա (կամ նրանց ենթաբաժինը), XXV-ը մրցույթի համար։
EndpointSlice: Endpoints-ի լայնացված ցանկը (փոխարինումը Endpoints)։
Պիտեր III 'RF ռեզոլեր 2019; plagines rewrite/template/forward/cache; «kube-105» գոտի։
NodeContal DNSCache-ը 'տեղական քեշը հաճախորդների վրա ավելի քիչ է, քան latency-ը և apstrim-ռեզոլվերի խնդիրների ընդհատումը։
Օրինակ ՝ Headless + VI
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. Altal '(VPV) և ստանալ 108/պորտ/քաշը։
DigMaP (SystigMap հատվածը)
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
}
NodeEntal III (գաղափարներ)
DaemonLine-ը տեղական ռեզոլմենտով '169։ 254. 20. 10`; kubelet ցույց է տալիս այս կետը։
Նվազեցնում է p99 name-resolution-ը և պաշտպանում է apstrim-III-ի «ֆլամպից»։
7) Service discovery вне K8s
Consul 'գործակալ, health-interks, ծառայողական-կատալոգը, SNA ինտերֆեյսը («.consul»), KV ուլիգների համար։
Eureka/ZooKeeper/etcd: JVM/legacy; հաճախ sidecar/դարպասի հետ։
Envoy/Istio: EDS/xDS (Endpoint Discovery) և SDS (գաղտնիքները); ծառայությունները հայտարարվում են www.l-plane միջոցով։
8) RF անվտանգությունը
DNSSEC 'ձայնագրությունների ամբողջականության պաշտպանություն (գոտիների ստորագրություն)։ Քննադատական է հանրային օրինագծերի համար։
DoT/DoH 'ջրանցքի կոդավորումը ռեկուրսորի (ներքին քաղաքականությունը, համատեղելիությունը)։
ACL-ը և split-horizon-ը 'մասնավոր տարածքը միայն SDC/MSN-ից։
Պաշտպանությունը քեշ թունավորումից 'randomations/ID, կարճ TTL դինամիկայի համար։
Egress. Թույլ տվեք CSKA-ին միայն վստահելի ռեզոլիվներ, ամսագրեր։
9) Հաճախորդների վարքագիծը և ռետրան
Հարգեք TTL: Մի հապաղեք անվերջ, մի՛ «վերափոխեք» հաճախակի ռեզոլվամներով (փոթորիկ դեպի ռեկուրսոր)։
Happy Eyeballs (IPv4/IPv6), զուգահեռ կոնեկտները մի քանի A/AAAA-ին նվազեցնում են tail-ը։
Retrai միայն idempotent պահանջների դեպքում։ ջիտթեր, budget retrav սահմանափակումը։
Rantaima ռետոլվերի նուրբ ուղղումը
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/RF-2019. պրակտիկա
Նվազեցրեք TTL-ը 300-60-ից 24-48 ժամվա ընթացքում մինչև պլանային։
Պահեք էնդպոինտների կանարյան հավաքածու, որը մի փոքր կշռում է վալիդացիայի համար։
Օգտագործեք weighted + health-link-ը 'A-գրառումների ձեռքով զանգվածային ապդեյտի փոխարեն։
Ստատիկ/edge - Anycript; API-ի համար - Geo/Latency + արագ L7-ֆեյլերը։
11) Դիտողությունն ու SLO-ն անունի համար
Մետրիկները
Rate/latency III հարցումները, cache hit-ratio, տեսակների սխալները (SERFAIL/NXDOMAIN)։
Stale-պատասխանների հետ հարցումների մասնաբաժինը (եթե օգտագործում եք stale-cache)։
Օգտագործողի վիրահատությունների հաջողությունը ձայնագրությունների փոփոխության ժամանակ (բիզնես-SLI)։
p95/p99 resolve-time ծրագրերում։
Ախտորոշումը
Հեռացրեք ձեր ճանապարհը. Հաճախորդը տեղական քասշ է, իսկ կլաստերային ռեզոլերը ՝ պրովայդերի ռեկորդակիր։
Հետևեք NXDOMAIN-ի (անունների/տպագրության սխալները) և SERFAIL-ի (ռեկուրսորի/ռեսուրս-լիմիտի խնդիրները)։
12) Միգրացիայի օրինակներ
DIA: 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
}
delemd-resolved (ֆորս resolver)
ini
[Resolve]
DNS=169. 254. 20. 10
FallbackDNS=1. 1. 1. 1 8. 8. 8. 8
Domains=~cluster. local ~internal
DNSSEC=yes
Envoy: դինամիկ MS-refresh
yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true
external-2019 (հանրային գոտու աջակցություն)
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-ը, միացրեք NodeEngal DNSCache-ը, dashbords III-մետրիկը։
«Կոշտ IP» արգելքը դելգայում/կոդում։
8-20 օր
Headless-ծառայություններ + MSV gRPC-ի համար; EndpointSlice-ը ներառված է։
GSLB/weighted արտաքին համար; health-winks և կանարեյկա։
Timauts/retray հաճախորդների և retrav բյուջեին։
21-30 օր
Split-horizon և մասնավոր տարածքներ; DoT/DoH քաղաքականության մասին։
Անցումների թեստը (TTL) և ֆեյլերը։ փոստի վերլուծություն։
Mesh/EDS քաղաքականությունները, www.ier-ej.ru-ը ներառված են։
14) Anti-patterna
TTL = 0-ը վաճառում է փոթորիկը ռեկուրսորների, անկանխատեսելի ուշացումների համար։
Hardcod IP/2019, CNAME/aliass մակարդակների համար։
«Ձեռքով» ձայնագրությունների փոփոխությունը առանց health-winks և կանարեկների։
Մի գլոբալ ռեզոլեր առանց քեշի հանգույցների վրա (նեղ տեղ)։
Բացասական քեշի անտեսումը (NXDOMAIN)։
Փորձեր «բուժել» BD-ի հրաժարումը RF-ի միջոցով տվյալների/ֆեյլերի մակարդակի փոխարեն։
15) Հասունության մետրերը
Ծառայությունների 100 տոկոսը օգտագործում են անուններ։ զրոյական դեպքեր hard-IP։
MS/NodeEngal-ը վաճառում է, cache hit-ratio> 90 տոկոսը հանգույցներում։
GSLB-ը health-winks-ից, որոնք փաստարկվել են TTL-ի և runbook-ի միջոցով։
MSV/EndpointSlice-ը ստատեֆուլ/gRPC-ի համար, p99 resolve-time-ը 20-30 MS ծրագրերում։
Ալերտները SERFAIL/NXDOMAIN-ով և cache hit-ratio-ի դեգրադացիան։
Ստուգումներ CI-ում 'արգելք' latest 'և hard-IP գծապատկերներում/գրամներում։
16) Եզրակացություն
Windowery-ը կայուն անվան և քեշի կարգապահության պայմանագիր է։ Կառուցեք հիբրիդային մոդել 'RF-ն տալիս է արագ և պարզ ստանդարտ, L7/mesh - առողջություն և խելացի քաղաքականություն։ Աջակցեք խելացի TTL-ին, քեշին հանգույցներում, headless-ծառայություններում և SVV-ում, որտեղ պետք է օգտագործեք GSLB/Anycript-ը տարածաշրջանների սահմանների համար, հետևեք NXDOMAIL/SERVAIL և P99 RESSOLOLVE E E TTiMTTE TiME TiME E TE TE TiMTE E Այդ դեպքում ձեր անունը նույնքան հուսալի կլինի, որքան ծառայությունը։