Εξεύρεση υπηρεσίας и DNS
Ανακάλυψη υπηρεσίας и DNS
1) Γιατί το χρειάζεστε
Στα κατανεμημένα συστήματα, οι κόμβοι εμφανίζονται και εξαφανίζονται, και οι πελάτες πρέπει να βρίσκουν γρήγορα και αξιόπιστα λειτουργικά περιστατικά της υπηρεσίας. DNS - στρώμα καθολικής ονομασίας· ανακάλυψη υπηρεσίας - μια στρατηγική για την αντιστοίχιση του ονόματος υπηρεσίας με πραγματικά τελικά σημεία, λαμβάνοντας υπόψη την πολιτική υγείας, βάρους και δρομολόγησης.
Βασικοί στόχοι:- σταθερές ονομασίες αντί εφήμερων διευθύνσεων,
- ακριβής, αλλά όχι θορυβώδης επικαιροποίηση (ισορροπία μεταξύ φρεσκάδας και TTL),
- υποβάθμιση χωρίς πλήρη πτώση (αποτυχία/διαγνωστικός έλεγχος),
- ελάχιστη «εικασία» για τον πελάτη: timeouts, retrays, cache policies.
2) Μοντέλα εξεύρεσης υπηρεσιών
2. 1 Πλευρά πελάτη
Ο ίδιος ο πελάτης επιλύει το όνομα σε ένα σύνολο τελικών σημείων και ισορροπιών (round-robin, EWMA, hash by key). Πηγή - DNS (A/AAAA/SRV), μητρώο υπηρεσιών (πρόξενος/Eureka), στατικός κατάλογος.
Pros: λιγότερα κεντρικά SPOF, ευέλικτοι αλγόριθμοι.
Κατά: ετερογένεια πελατών, είναι πιο δύσκολο να ενημερωθεί η λογική.
2. 2 Εξυπηρετητής (server-side)
Ο πελάτης πηγαίνει μπροστά/LB (L4/L7 πύλη/είσοδος). Εξισορρόπηση και υγειονομικός έλεγχος - από την πλευρά πληρεξουσίου/εξισορρόπησης.
Επαγγελματίες: ενιαίος πολιτικός χώρος, παρατηρησιμότητα.
Cons: Χρειάζεται μια εξαιρετικά διαθέσιμη περίμετρο (N + 1, multi-AZ).
2. 3 Υβρίδιο
Το DNS δίνει ένα σύνολο σημείων εισόδου (περιφερειακές LB) και στη συνέχεια L7/mesh εξισορρόπηση.
3) DNS: βασικά, αρχεία και TTL
3. 1 Βασικοί τύποι
A/AAAA - IPv4/IPv6 διευθύνσεις.
CNAME - γνωστό και ως άλλο όνομα (όχι ως apex).
SRV - '_ service. _ proto. ονοματεπώνυμο "υποδοχή/θύρα/βάρος/προτεραιότητα (για gRPC/LDAP/SIP κ.λπ.).
TXT/HTTP/HTTPS - μεταδεδομένα/δείκτες (συμπεριλαμβανομένης της ανακάλυψης HTTP).
NS/SOA - εξουσιοδότηση και χαρακτηριστικά της ζώνης.
3. 2 TTL και Cache
Η κρύπτη είναι διαθέσιμη από: resolver OS, τοπικό stub resolver, κόμβους (NodeLocal DNS/CoreDNS), πάροχο, ενδιάμεσους recursers και πελάτη βιβλιοθήκης. Πραγματική φρεσκάδα = min (TTL, πολιτική πελατών). Αρνητική κρύπτη (NXDOMAIN) είναι επίσης cached over 'SOA. ΕΛΑΧΙΣΤΟ '/' TTL '.
Συστάσεις:- Prod - TTL 30-120 για δυναμικές εγγραφές, 300-600 για σταθερές.
- Για διακόπτες (feilover), ετοιμάστε εκ των προτέρων ένα χαμηλωμένο TTL και όχι «κατά τη διάρκεια πυρκαγιάς».
- Σκεφτείτε την κολλώδη μνήμη των βιβλιοθηκών (Java/Go/Node) - αν είναι απαραίτητο, ρυθμίστε το TTL του resolver μέσα στο χρόνο εκτέλεσης.
4) Πολιτικές εξισορρόπησης και ανοχής βλάβης DNS
Σταθμισμένα RR - συντελεστές στάθμισης A/AAAA/SRV.
Αποτυχία - πρωτογενή/δευτερεύοντα σύνολα (έλεγχος υγείας εκτός).
Geo/Latency - απάντηση στην «πλησιέστερη» POP/περιφέρεια.
Anycast - ένα IP σε διαφορετικό POP (BGP), ανθεκτική στις περιφερειακές διαταραχές.
Split-horizon - διαφορετικές απαντήσεις στο εσωτερικό της VPC/on-prem και στο Διαδίκτυο.
Η GSLB είναι μια παγκόσμια ισορροπία με τους υγειονομικούς ελέγχους και πολιτικές (καθυστέρηση, γεω, δυναμικότητα).
5) Υγειονομικοί έλεγχοι και φρεσκάδα
Το ίδιο το DNS είναι «χαζό»: δεν γνωρίζει την υγεία των backends. Συνεπώς:- Ή ένας εξωτερικός ελεγκτής υγείας διαχειρίζεται εγγραφές/βάρη (GSLB, Route53/Traffic-policy, εξωτερικά dns + δείγματα).
- Ή ο πελάτης/πελάτης ματιών κάνει μια ενεργή εξώθηση και επαναπροσδιορίζει από πολλά τελικά σημεία.
6) Kubernetes: ανακάλυψη έξω από το κουτί
Ονόματα υπηρεσιών: 'svc. χώρος ονομάτων. svc. δέσμη. τοπικό '.
ClusterIP: σταθερό εικονικό IP + kube-proxy/ebpf.
Headless Service («clusterIP: No»): δίνει A-records σε λοβούς (ή τις υποδιαιρέσεις τους), SRV για λιμένες.
Καταληκτικό σημείο: κλιμακωτή λίστα των τελικών σημείων (αντικατάσταση των τελικών σημείων).
CoreDNS: διαλύτης διασποράς DNS· πρόσθετα επαναγραφή/πρότυπο/εμπρός/κρύπτη· Ζώνη "kube-dn .
NodeLocal DNSCache: τοπική κρύπτη στον κόμβο - λιγότερη καθυστέρηση και υποκλοπή των ανάντη προβλημάτων επίλυσης.
Παράδειγμα: Ακέφαλος + 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. πληρωμές. prod. svc. δέσμη. τοπικό "(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 με τοπικό resolver το '169. 254. 20. 10`; Το kubelet προσδιορίζει αυτό το σημείο.
- Μειώνει την ανάλυση ονομασίας p99 και προστατεύει από το πτερύγιο DNS ανάντη.
7) Ανακάλυψη υπηρεσιών вне K8s
Πρόξενος: πράκτορας, υγειονομικοί έλεγχοι, κατάλογος υπηρεσιών, διεπαφή DNS ('.consul'), KV για ρυθμίσεις.
Eureka/ZooKeeper/etcd: μητρώα JVM/κληροδότημα· συχνά σε συνδυασμό με πλευρικό αυτοκίνητο/πύλη.
Απεσταλμένος/Istio: EDS/xDS (Endiscovery) και SDS (secrets). οι υπηρεσίες δηλώνονται μέσω του επιπέδου ελέγχου.
8) Ασφάλεια DNS
DNSSEC: προστασία της ακεραιότητας των αρχείων (υπογραφή ζώνης). Κρίσιμη για τους δημόσιους χώρους.
DoT/DoH: κανάλι κρυπτογράφησης αναδρομής (εσωτερικές πολιτικές, συμβατότητα).
ACL και split-horizon: ιδιωτική ζώνη - μόνο από VPC/VPN.
Προστασία από δηλητηρίαση από κρύπτη: τυχαιοποίηση θύρας/ταυτότητας, σύντομες TTL για δυναμική.
Πολιτικές εξόδου: αφήστε το DNS μόνο σε αξιόπιστους επιλυτές, καταγραφή.
9) Συμπεριφορά πελάτη και υποχώρηση
Σεβαστείτε το TTL: μην κρυφτείτε ατελείωτα, μην «νομιμοποιείτε» με συχνές αποφάσεις (καταιγίδα αναδρομική).
Χαρούμενα μάτια (IPv4/IPv6), παράλληλες συνδέσεις με πολλαπλές A/AAAA μειώνουν την ουρά.
Retrays μόνο για idempotent αιτήματα· νευρικότητα, περιορισμός των ανατροπών του προϋπολογισμού.
- Java: "networkaddress. κρύπτη. ttl ',' networkaddress. κρύπτη. αρνητικό. tt .
- Πηγαίνετε: 'GODEBUG = netdns = go '/' cgo', 'Resolver. PreferGo ',' DialTimeout '.
- Κόμβος: 'dns. setDefaultResultOrder ('ipv4firs )', 'lookup' 'all: true'.
10) Αλλαγή GSLB/DNS: πρακτική
Μείωση του TTL από τις 300→60 24-48 ώρες πριν από την προγραμματισμένη μετάβαση.
Φυλάσσετε σε ψυγείο (2 ° C - 8 ° C).
Χρήση σταθμισμένου + διαγνωστικού ελέγχου αντί χειροκίνητης επικαιροποίησης μάζας των εγγραφών Α.
Για στατικά/άκρα - Anycast. για API - Geo/Latency + ταχεία L7-feiler.
11) Παρατηρησιμότητα και SLO για την ονομασία
Μετρήσεις:- Ρυθμός/καθυστέρηση ερωτήσεων DNS, λόγος απόκρυψης, σφάλματα ανά τύπο (SERVFAIL/NXDOMAIN).
- Το ποσοστό αιτήσεων με μπαγιάτικες απαντήσεις (εάν χρησιμοποιείται μπαγιάτικη μνήμη).
- Επιτυχία των λειτουργιών των χρηστών στις αλλαγές αρχείων (SLI επιχειρήσεων).
- p95/p99 resolve-time in applications.
- Διαστρωμάτωση της διαδρομής: client → local cache → nodal cache → cluster resolver → provider recursion.
- Εντοπισμός ακίδων NXDOMAIN (Name/Typo Errors) και SERVFAIL (Recursion Issues/Resource Limits).
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
εξωτερικές δόσεις (στήριξη δημόσιας ζώνης)
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).
Βασικό TTL, ενεργοποιήστε NodeLocal DNSCache, DNS μετρήσεις ταμπλό.
Απαγόρευση «σκληρού IP» στον κωδικό ρύθμισης/ρύθμισης.
8- 20 ημέρες
Ακέφαλες υπηρεσίες + SRV για gRPC. Το τελικό σημείο είναι ενεργοποιημένο.
GSLB/σταθμισμένο για εξωτερικά· υγειονομικοί έλεγχοι και καναρίνια.
Τα timeouts/retrays πελατών και ο προϋπολογισμός retray είναι ρυθμισμένα.
21- 30 ημέρες
Διαχωρισμός του ορίζοντα και των ιδιωτικών περιοχών. DoT/DoH ανά πολιτική.
Δοκιμή μεταγωγής (με TTL) και feilover. μετά την ανάλυση.
Mesh/EDS, ενεργοποιούνται πολιτικές εξώθησης.
14) Αντι-μοτίβα
TTL = 0 σε prod → καταιγίδα σε επανεμφάνιση, απρόβλεπτες καθυστερήσεις.
IP/port hardcode, no CNAME/ψευδώνυμα για τα επίπεδα.
Αλλαγή αρχείων «χειροκίνητα» χωρίς υγειονομικούς ελέγχους και καναρίνια.
Μια παγκόσμια λύση χωρίς κρυφή μνήμη κόμβου (σημείο συμφόρησης).
Αγνοώντας την αρνητική μνήμη (ακίδες NXDOMAIN).
Επιχειρεί να «θεραπεύσει» μια αποτυχία βάσης δεδομένων μέσω DNS αντί του επιπέδου δεδομένων/feilover.
15) Μετρήσεις διάρκειας
το 100% των υπηρεσιών χρησιμοποιούν ονόματα· κρούσματα μηδενικού σκληρού IP.
CoreDNS/NodeLocal in sales, cache hit-ratio> 90% on nodes.
GSLB με υγειονομικούς ελέγχους, τεκμηριωμένους διακόπτες TTL και runbook.
SRV/Τελικό σημείο Slice για stateful/gRPC, p99 resolve-time σε εφαρμογές ≤ 20-30 ms.
Καταχωρίσεις για την υποβάθμιση του λόγου hit-ratio SERVFAIL/NXDOMAIN και cache.
Έλεγχοι σε CI: απαγόρευση ': τελευταία' και σκληρή IP σε διαγράμματα/ρυθμίσεις.
16) Συμπέρασμα
Η ανακάλυψη υπηρεσιών είναι ένα σταθερό συμβόλαιο ονόματος και πειθαρχία κρυφής μνήμης. Κατασκευή υβριδικού μοντέλου: το DNS παρέχει γρήγορη και εύκολη σύνδεση, L7/mesh - υγεία και έξυπνες πολιτικές. Διατήρηση έξυπνου TTL, κρυφής μνήμης, ακέφαλων υπηρεσιών και SRV όπου χρειάζεται, χρήση GSLB/Anycast για περιφερειακά όρια, παρακολούθηση NXDOMAIN/SERVFAIL και p99 χρόνο επίλυσης. Τότε το όνομά σας θα είναι τόσο αξιόπιστο όσο και η ίδια η υπηρεσία.