सेवा डिस्कवरी и डीएनएस
सेवा डिस्कवरी и डीएनएस
1) आपको इसकी आवश्यकता क्यों है
वितरित प्रणालियों में, नोड्स दिखाई देते हैं और गायब हो जाते हैं, और ग्राहकों को सेवा के काम के उदाहरणों को जल्दी और मज़बूती से खोज डीएनएस - सार्वभौमिक नाम परत; सेवा खोज - स्वास्थ्य, वजन और मार्ग नीति को ध्यान में रखते हुए, वास्तविक समापन बिंदुओं के साथ सेवा नाम से मेल खाने की रणनीति।
मुख्य उद्देश्य:- पंचांग पते के बजाय स्थिर नाम,
- सटीक, लेकिन शोर अपडेट नहीं (ताजगी और टीटीएल के बीच संतुलन),
- पूर्ण गिरावट के बिना गिरावट (असफल/स्वास्थ्य-जांच),
- ग्राहक पर न्यूनतम "अनुमान": टाइमआउट, रिट्रे, कैश नीतियां।
2) सेवा खोज मॉडल
2. 1 क्लाइंट-साइड
ग्राहक स्वयं समापन बिंदुओं और संतुलन (राउंड-रॉबिन, EWMA, कुंजी द्वारा हैश) के एक सेट के लिए नाम को हल करता है। स्रोत - डीएनएस (ए/एएएए/एसआरवी), सेवा रजिस्ट्री (कांसुल/यूरेका), स्थिर सूची।
पेशेवरों: कम केंद्रीय SPOF, लचीले एल्गोरिदम।
विपक्ष: ग्राहक विषमता, तर्क को अद्यतन करना अधिक कठिन है।
2. 2 सर्वर (सर्वर-साइड)
क्लाइंट फ्रंट/एलबी (L4/L7 गेटवे/इंग्रेस) पर जाता है। संतुलन और स्वास्थ्य-जाँच - प्रॉक्सी/बैलेंसर पक्ष पर।
पेशेवरों: राजनीति का एक ही स्थान, अवलोकन।
विपक्ष: एक उच्च उपलब्ध परिधि (N + 1, मल्टी-AZ) की आवश्यकता है।
2. 3 हाइब्रिड
डीएनएस प्रवेश बिंदुओं (क्षेत्रीय एलबी) का एक सेट देता है, फिर L7/mesh संतुलन बनाता है।
3) डीएनएस: मूल बातें, रिकॉर्ड और टीटीएल
3. 1 मूल प्रकार
A/AAAA - IPv4/IPv6 पते।
CNAME - अन्य नाम के लिए उर्फ (शीर्ष पर नहीं)।
SRV - '_ service. _ proto. नाम '→ होस्ट/पोर्ट/वेट/प्राथमिकता (gRPC/LDAP/SIP, आदि के लिए)।
TXT/HTTP/HTTPS - मेटाडेटा/पॉइंटर्स (HTTP-खोज सहित)।
एनएस/एसओए - ज़ोन प्रतिनिधिमंडल और विशेषताएं।
3. 2 टीटीएल और कैश
कैश से उपलब्ध है: ओएस रिज़ॉल्वर, स्थानीय स्टब रिज़ॉल्वर, नोड्स (नोडलोकल डीएनएस/कोरडीएनएस), प्रदाता, मध्यवर्ती recursers और पुस्तकालय क्लाइंट। वास्तविक ताजगी = मिनट (टीटीएल, ग्राहक नीति)। नकारात्मक कैश (NXDOMAIN) को 'SOA' पर भी कैश किया जाता है। न्यूनतम '/' टीटीएल '।
सिफारिशें:- प्रोड - गतिशील रिकॉर्ड के लिए टीटीएल 30-120, स्थिर के लिए 300-600।
- स्विच (feilover) के लिए, अग्रिम में एक कम TTL तैयार करें, न कि "आग के दौरान।"
- पुस्तकालयों (जावा/गो/नोड) के चिपचिपे कैश पर विचार करें - यदि आवश्यक हो, तो रनटाइम के अंदर रिसॉल्वर के टीटीएल को कॉन्फ़िगर करें।
4) DNS संतुलन और दोष सहिष्णुता नीतियों
भारित आरआर - ए/एएएए/एसआरवी पर वजन।
असफल - प्राथमिक/माध्यमिक सेट (स्वास्थ्य-जांच बाहर)।
जियो/लेटेंसी - "निकटतम" POP/क्षेत्र के लिए प्रतिक्रिया।
Anycast - अलग POP (BGP) में एक आईपी; क्षेत्रीय व्यवधानों के लिए लचीला।
स्प्लिट-क्षितिज - वीपीसी/ऑन-प्रेम और इंटरनेट पर अलग-अलग उत्तर।
जीएसएलबी स्वास्थ्य जांच और नीतियों (विलंबता, भू, क्षमता) के साथ एक वैश्विक संतुलन है।
5) स्वास्थ्य-जांच और ताजगी
डीएनएस खुद "गूंगा" है: यह बैकेंड्स के स्वास्थ्य को नहीं जानता है। इसलिए:- या एक बाहरी स्वास्थ्य-चेकर रिकॉर्ड/वजन (GSLB, Route53/Traffic-policy, बाहरी-dns + नमूने) का प्रबंधन करता है।
- या/जाल क्लाइंट एक सक्रिय बाहरी-इजेक्शन बनाता है और कई समापन बिंदुओं से पुन: प्रयास करता है।
6) कुबर्नेट्स: बॉक्स से बाहर खोज
सेवा नाम: 'svc। Namespace। svc। क्लस्टर। स्थानीय '।
ClusterIP: स्थिर आभासी IP + kube-proxy/ebpf।
हेडलेस सर्विस ('क्लस्टरआईपी: कोई नहीं'): बंदरगाहों के लिए एसआरवी, पॉड्स (या उनके सबडोमेन) को ए-रिकॉर्ड देता है।
EndpointSlice: एंडपॉइंट्स की स्केलेबल सूची (एंडपॉइंट्स की जगह)।
CoreDNS: क्लस्टर DNS रिज़ॉल्वर; प्लगिन पुनर्लेखन/टेम्पलेट/आगे/कैश; 'क्यूब-डीएनएस' ज़ोन।
NodeLocal DNSCache: नोड पर स्थानीय कैश - कम विलंबता और अपस्ट्रीम रिज़ॉल्यूशन समस्याओं का अवरोधन।
उदाहरण: हेडलेस + एसआरवी
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 को हल कर सकता है। भुगतान। prod। svc। क्लस्टर। स्थानीय '(SRV) और होस्ट/पोर्ट/वेट प्राप्त करें।
CorDNS (कॉन्फ़िगमैप टुकड़ा)
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 (विचार):
- '169 पर स्थानीय संकल्प के साथ डेमनसेट। 254. 20. 10`; kubelet इस बिंदु को निर्दिष्ट करता है।
- p99 नाम-रिज़ॉल्यूशन को कम करता है और अपस्ट्रीम डीएनएस फ्लैप से बचाता है।
7) सेवा खोज вне K8s
कांसुल: एजेंट, स्वास्थ्य-जांच, सेवा निर्देशिका, डीएनएस इंटरफ़ेस ('.consul'), कॉन्फ़िग के लिए केवी।
यूरेका/ज़ूकीपर/आदि: जेवीएम/विरासत के लिए पंजीकरण; अक्सर एक साइडकार/गेटवे के साथ संयोजन में।
दूत/इस्तियो: ईडीएस/एक्सडीएस (एंडपॉइंट डिस्कवरी) और एसडीएस (रहस्य); सेवाओं को नियंत्रण-विमान के माध्यम से घो
8) डीएनएस सुरक्षा
DNSSEC: रिकॉर्ड अखंडता (ज़ोन हस्ताक्षर) की रक्षा करें। सार्वजनिक डोमेन के लिए महत्वपू
DoT/DoH: चैनल टू रिकर्शन एन्क्रिप्शन (आंतरिक नीतियां, संगतता)।
एसीएल और स्प्लिट-क्षितिज: निजी क्षेत्र - केवल वीपीसी/वीपीएन से।
कैश विषाक्तता के खिलाफ सुरक्षा: पोर्ट/आईडी रैंडमाइजेशन, गतिशीलता के लिए छोटे टीटीएल।
Egress पर नीतियां: केवल विश्वसनीय समाधानकर्ताओं पर DNS की अनुमति दें, लॉग करें
9) ग्राहक और पीछे हटने का व्यवहार
टीटीएल का सम्मान करें: अंतहीन रूप से कैश न करें, लगातार संकल्पों (पुनरावर्ती करने के लिए तूफान) के साथ "कानूनविहीन" न करें।
हैप्पी आईबॉल (IPv4/IPv6), मल्टीपल A/AAAAs के समानांतर कनेक्शन पूंछ को कम करते हैं।
केवल अज्ञात अनुरोधों के लिए रिट्रेज़; जिटर, बजट रिट्रेट को सीमित करना।
रनटाइम रिसॉल्वर को ठीक करना:- जावा: 'नेटवर्कड्रेस। कैश। ttl ',' नेटवर्कड्रेस। कैश। नकारात्मक। ttl '।
- गो: 'GODEBUG = netdns = go '/' cgo', 'Resolver। PreferGo ',' DialTimeout '।
- नोड: 'dns। SeteDefaultReliance ('ipv4first'), 'lookup' с 'all: true'।
10) जीएसएलबी/डीएनएस स्विचिंग: अभ्यास
निर्धारित स्विचओवर से 300→60 24-48 घंटे पहले टीटीएल को कम करें।
सत्यापन के लिए कम वजन वाले समापन बिंदुओं का एक कैनरी सेट रखें।
ए-रिकॉर्ड के मैनुअल मास अपडेट के बजाय भारित + स्वास्थ्य-जांच का उपयोग करें।
स्टेटिक्स/एज के लिए - Anycast; एपीआई के लिए - जियो/लेटेंसी + फास्ट -।
11) नाम के लिए अवलोकन और एसएलओ
मेट्रिक्स:- डीएनएस प्रश्नों की दर/विलंबता, कैश हिट-अनुपात, प्रकार द्वारा त्रुटियां (SERVFAIL/NXDOMAIN)।
- बासी प्रतिक्रियाओं के साथ अनुरोधों का प्रतिशत (यदि बासी-कैश का उपयोग किया जाता है)।
- रिकॉर्ड परिवर्तनों पर उपयोगकर्ता संचालन की सफलता (व्यवसाय एसएलआई)।
- p95/p99 अनुप्रयोगों में हल-समय।
- पथ को स्ट्रैटिफाई करें: क्लाइंट → लोकल कैश → नोडल कैश → क्लस्टर रिसॉल्वर → प्रदाता पुनरावृत्ति।
- ट्रैक NXDOMAIN (नाम/टाइपो त्रुटियाँ) और SERVFAIL (पुनरावृत्ति मुद्दे/संसाधन सीमा) स्पाइक्स।
12) कॉन्फ़िगरेशन उदाहरण
CoreDNS: फिर से लिखें और स्टब ज़ोन
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
}
प्रणालीबद्ध-समाधान
ini
[Resolve]
DNS=169. 254. 20. 10
FallbackDNS=1. 1. 1. 1 8. 8. 8. 8
Domains=~cluster. local ~internal
DNSSEC=yes
दूत: गतिशील DNS-ताज़ा
yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true
बाहरी-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/hybrid)।
बेसिक टीटीएल, NodeLocal DNSCache, DNS मेट्रिक्स डैशबोर्ड सक्षम करें।
कॉन्फ़िग/कोड में "हार्ड आईपी" का निषेध।
8-20 दिन
जीआरपीसी के लिए हेडलेस सेवाएं + एसआरवी; EndpointSlice सक्षम है।
जीएसएलबी/बाहरी के लिए भारित; स्वास्थ्य-जांच और कैनरी।
क्लाइंट टाइमआउट/रिट्रे और रिट्रे बजट कॉन्फ़िगर किए गए हैं।
21-30 दिन
विभाजन-क्षितिज और निजी क्षेत्र; नीति द्वारा DoT/DoH।
स्विचिंग परीक्षण (टीटीएल द्वारा) और फीलओवर; विश्लेषण के बाद।
मेश/ईडीएस, बाहरी-इजेक्शन नीतियां सक्षम हैं।
14) एंटी-पैटर्न
TTL = 0 prod → तूफान में पुनरावृत्ति, अप्रत्याशित देरी।
आईपी/पोर्ट हार्डकोड, स्तरों के लिए कोई CNAME/उपनाम नहीं।
स्वास्थ्य-जांच और कैनरी के बिना "मैन्युअल रूप से" रिकॉर्ड बदलना।
कोई नोड कैश (अड़चन) के साथ एक वैश्विक समाधानकर्ता।
नकारात्मक कैश की अनदेखी (NXDOMAIN स्पाइक्स)।
डेटा/फीलोवर परत के बजाय डीएनएस के माध्यम से एक डेटाबेस विफलता को "चंगा" करने का प्रयास।
15) परिपक्वता मैट्रिक्स
100% सेवाएं नामों का उपयोग करती हैं; शून्य हार्ड-आईपी मामले।
CoreDNS/NodeLocal बिक्री में, नोड्स पर कैश हिट-अनुपात> 90%।
स्वास्थ्य-जांच के साथ जीएसएलबी, प्रलेखित टीटीएल और रनबुक स्विच।
SRV/EndpointSlice स्टेटफुल/gRPC के लिए, p99 आवेदनों में समाधान-समय ≤ 20-30 ms।
SERVFAIL/NXDOMAIN और कैश हिट-अनुपात गिरावट के लिए अलर्ट।
सीआई में जाँच: चार्ट/कॉन्फ़िग में ': नवीनतम' और हार्ड-आईपी पर प्रतिबंध।
16) निष्कर्ष
सेवा खोज एक स्थिर नाम अनुबंध और कैश अनुशासन है। एक हाइब्रिड मॉडल का निर्माण: डीएनएस त्वरित और आसान लॉगिन, L7/mesh - स्वास्थ्य और स्मार्ट नीतियां देता है। स्मार्ट टीटीएल, होस्ट कैश, हेडलेस सेवाओं और एसआरवी को बनाए रखें, जहां जरूरत हो, क्षेत्रीय सीमाओं के लिए जीएसएलबी/एनीकास्ट का उपयोग करें, NXDOMAIN/SERVFAIL और p99 संकल्प-समय पर नजर रखें। तब आपका नाम सेवा के रूप में एक विश्वसनीय परिसंपत्ति के रूप में होगा।