Kubernetes, επίσης γνωστό και ως K8s, είναι ένα ανοιχτού κώδικα σύστημα ενορχήστρωσης για την αυτοματοποίηση της ανάπτυξης, της κλιμάκωσης και της διαχείρισης εφαρμογών σε κοντέινερ. Η φορητότητα, η ευελιξία και οι δυνατότητες αυτόματης κλιμάκωσής του το καθιστούν ένα ευρέως χρησιμοποιούμενο σύστημα. Πάνω από όλα τα εξαιρετικά χαρακτηριστικά του, η επιλογή δημιουργίας εγγραφών DNS για υπηρεσίες και pods το καθιστά ασυναγώνιστο σε σύγκριση με άλλα συστήματα λογισμικού. Η υπηρεσία Kubernetes DNS σάς επιτρέπει να επικοινωνείτε με υπηρεσίες χρησιμοποιώντας σταθερά ονόματα DNS αντί για διευθύνσεις IP.
Προαπαιτούμενα
Για να επωφεληθείτε στο έπακρο από αυτόν τον οδηγό και να κατανοήσετε καλύτερα την υπηρεσία Kubernetes DNS, βεβαιωθείτε ότι έχετε φρεσκάρει τις γνώσεις σας σχετικά με τα βασικά στοιχεία του Kubernetes. Θα επωφεληθείτε επίσης διαβάζοντας την Επισκόπηση των Ορολογιών, Συστατικών και Εννοιών του DNS για να κατανοήσετε καλύτερα τις έννοιες του DNS. Επιπλέον, μια επισκόπηση του οικοσυστήματος Docker και τα βασικά στοιχεία της τεχνολογίας containerization θα αποτελέσουν σημαντικό πλεονέκτημα.
Τι είναι ένα σύστημα DNS;
Το Σύστημα Ονομάτων Τομέα (DNS) είναι ένας μηχανισμός για τη σύνδεση διαφόρων ειδών πληροφοριών με εύκολα απομνημονεύσιμα ονόματα, όπως οι διευθύνσεις IP. Η χρήση ενός συστήματος DNS για τη μετάφραση των ονομάτων αιτημάτων σε διευθύνσεις IP διευκολύνει τους τελικούς χρήστες να φτάσουν στον επιθυμητό όνομα τομέα χωρίς κόπο. Τα περισσότερα clusters του Kubernetes περιλαμβάνουν μια εσωτερική υπηρεσία DNS ρυθμισμένη από προεπιλογή για να προσφέρει μια ελαφριά προσέγγιση για τον εντοπισμό υπηρεσιών (service discovery). Ακόμη και όταν τα pods και οι υπηρεσίες δημιουργούνται, διαγράφονται ή μετακινούνται μεταξύ κόμβων, ο ενσωματωμένος εντοπισμός υπηρεσιών απλοποιεί τις εφαρμογές ώστε να αναγνωρίζουν και να επικοινωνούν με τα clusters του Kubernetes.
Στις πρόσφατες εκδόσεις του Kubernetes, οι τεχνικές λεπτομέρειες της υπηρεσίας Kubernetes DNS έχουν αλλάξει. Αυτός ο οδηγός στοχεύει να παρουσιάσει τόσο την υλοποίηση kube-dns όσο και την CoreDNS της υπηρεσίας Kubernetes DNS. Θα κατανοήσουμε λεπτομερώς τις εγγραφές Kubernetes DNS και θα δείξουμε πώς λειτουργεί το Kubernetes DNS.
Τι περιλαμβάνεται στην υπηρεσία Kubernetes DNS;
Παλαιότερα, η υπηρεσία Kubernetes DNS βασιζόταν στο kube-dns πριν από την κυκλοφορία της έκδοσης 1.11. Ωστόσο, η ασφάλεια και το απόρρητο εξακολουθούσαν να αποτελούν σοβαρή ανησυχία. Αργότερα, η κοινότητα του Kubernetes εισήγαγε το CoreDNS στη νέα έκδοση 1.11 για την αντιμετώπιση των προβλημάτων ασφάλειας και σταθερότητας του kube-dns.
Ανεξάρτητα από την έκδοση λογισμικού που χρησιμοποιείτε για τη διαχείριση των εγγραφών DNS, το kube-dns και το CoreDNS λειτουργούν με παρόμοιο τρόπο:
- Μια kube-dns υπηρεσία και ένα ή περισσότερα pods δημιουργούνται.
- Η kube-dns υπηρεσία παρακολουθεί το Kubernetes API για συμβάντα υπηρεσιών και endpoints και αλλάζει τις εγγραφές DNS της ανάλογα. Όταν τροποποιείτε αυτές τις υπηρεσίες Kubernetes και τα σχετικά pods τους με λειτουργίες δημιουργίας, επεξεργασίας ή διαγραφής, αυτά τα συμβάντα ενεργοποιούνται αυτόματα.
- Kubelet εκχωρεί την IP του cluster της kube-dns υπηρεσίας σε κάθε νέο pod etc/resolv.conf nameserver επιλογή, μαζί με τις κατάλληλες search ρυθμίσεις για να επιτρέπονται συντομότερα hostnames:
|
1 2 3 |
nameserver 10.32.0.10 search namespace.svc.cluster.local svc.cluster.local cluster.local options ndots:5 |
-
Οι εφαρμογές σε κοντέινερ μπορούν στη συνέχεια να αναλύουν hostnames όπως example-service.namespace στην κατάλληλη διεύθυνση IP του cluster.
Μια επισκόπηση των εγγραφών Kubernetes DNS
Ας κατανοήσουμε καλύτερα τις εγγραφές Kubernetes DNS με τη βοήθεια ενός παραδείγματος. Η πλήρης εγγραφή DNS A για μια υπηρεσία Kubernetes θα μοιάζει με:
service.namespace.svc.cluster.local
Ένα pod θα είχε μια εγγραφή σε αυτή τη μορφή, η οποία θα αντιπροσώπευε την πραγματική διεύθυνση IP του pod:
10.32.0.125.namespace.pod.cluster.local
Επιπλέον, SRV εγγραφές δημιουργούνται για τις καθορισμένες θύρες μιας υπηρεσίας Kubernetes:
|
1 |
_port-name._protocol.service.namespace.svc.cluster.local |
Ως αποτέλεσμα, η εφαρμογή ή η μικροϋπηρεσία σας μπορεί να καλέσει ένα απλό και σταθερό hostname για να προσεγγίσει άλλες υπηρεσίες ή pods στο cluster, χάρη στον ενσωματωμένο μηχανισμό εντοπισμού υπηρεσιών που βασίζεται στο DNS.
Επίλυση συντομότερων hostnames και αναζήτηση τομέων
Δεν θα χρειάζεται πάντα να χρησιμοποιείτε ολόκληρο το όνομα κεντρικού υπολογιστή για να αποκτήσετε πρόσβαση σε μια άλλη υπηρεσία, λόγω των επιθεμάτων τομέα αναζήτησης που έχουν οριστεί στο resolv.conf αρχείο. Εάν επικοινωνείτε με μια υπηρεσία στο ίδιο namespace, μπορείτε απλώς να την καλέσετε με το όνομά της:
|
1 |
other-service |
Προσθέστε other-service στο ερώτημα εάν η υπηρεσία βρίσκεται σε διαφορετικό namespace:
|
1 |
other-service.other-namespace |
Θα πρέπει να χρησιμοποιήσετε τουλάχιστον τα ακόλουθα εάν θέλετε να συνδεθείτε με ένα pod:
|
1 |
pod-ip.other-namespace.pod |
Μόνο τα .svc επιθέματα συμπληρώνονται αυτόματα στο προεπιλεγμένο resolv.conf αρχείο. Επομένως, είναι απαραίτητο να καθορίσετε τις ρυθμίσεις μέχρι το .pod. Στη συνέχεια, ας δούμε τις λεπτομέρειες των δύο εναλλακτικών υλοποιήσεων DNS του Kubernetes που έχουμε μάθει μέχρι τώρα.
Υλοποίηση DNS του Kubernetes
Η έκδοση 1.11 του Kubernetes παρείχε νέο λογισμικό για τη διαχείριση της υπηρεσίας kube-dns , όπως αναφέρθηκε στην προηγούμενη ενότητα. Ο κύριος λόγος πίσω από τη νέα ενημέρωση ήταν η βελτίωση της απόδοσης και της ασφάλειας της υπηρεσίας. Ας ξεκινήσουμε με την ενσωμάτωση του kube-dns από την αρχή.
-
kube-dns
Στην προηγούμενη έκδοση Kubernetes 1.11, η υπηρεσία kube-dns είχε τρία containers που λειτουργούσαν σε ένα pod kube-dns στο namespace kube-system . Ρίξτε μια ματιά στα τρία containers παρακάτω:
- kube-dns: ένα container που εκτελεί το SkyDNS και λειτουργεί ως υπηρεσία επίλυσης ερωτημάτων DNS.
- dnsmasq: Οι απαντήσεις του SkyDNS αποθηκεύονται στην προσωρινή μνήμη από το dnsmasq, έναν κοινό ελαφρύ επιλυτή DNS και cache.
- sidecar: ένα container στο πλάι της υπηρεσίας που εκτελεί αναφορά μετρήσεων και αντιδρά στους ελέγχους υγείας.
Το CoreDNS δημιουργήθηκε ως αποτέλεσμα ευπαθειών ασφαλείας στο Dnsmasq και ανησυχιών σχετικά με την απόδοση κλιμάκωσης του SkyDNS.
-
CoreDNS
Ως νέα υπηρεσία DNS του Kubernetes, το CoreDNS έχει αναβαθμιστεί σε General Availability στο Kubernetes 1.11. Αυτό σημαίνει ότι είναι έτοιμο για παραγωγή και θα χρησιμοποιείται από πολλά εργαλεία εγκατάστασης και διαχειριζόμενους παρόχους Kubernetes ως η προεπιλεγμένη υπηρεσία DNS του cluster.
Το CoreDNS είναι ένας ευέλικτος και επεκτάσιμος διακομιστής DNS που λειτουργεί ως DNS cluster του Kubernetes. Εκτελεί όλες τις λειτουργίες του προηγούμενου συστήματος. Ένα container DNS είναι υπεύθυνο για την επίλυση και την προσωρινή αποθήκευση ερωτημάτων DNS. Το CoreDNS ανταποκρίνεται σε ελέγχους υγείας και παρέχει μετρήσεις σε ένα μόνο container. Επιπλέον, αντιμετωπίζει μερικά μικρά ελαττώματα και παρέχει νέες δυνατότητες για την επίλυση προβλημάτων απόδοσης και ασφάλειας:
- Ορισμένες διενέξεις μεταξύ της χρήσης των stubDomains και των εξωτερικών υπηρεσιών έχουν επιλυθεί.
- Τυχαιοποιώντας τη σειρά με την οποία επιστρέφονται ορισμένες καταχωρίσεις, το CoreDNS μπορεί να βελτιώσει την βασισμένη σε DNS round-robin load balancing.
- Με το να είναι πιο αποτελεσματικό στην επανάληψη σε καθένα από τα επιθέματα τομέα αναζήτησης που ορίζονται στο resolv.conf, μια δυνατότητα που ονομάζεται autopath μπορεί να βελτιώσει τους χρόνους απόκρισης DNS κατά την επίλυση εξωτερικών ονομάτων κεντρικών υπολογιστών.
- Ακόμα κι αν το pod δεν υπάρχει, το kube-dns 10.32.0.125.namespace.pod.cluster.local θα επιλύεται πάντα σε 10.32.0.125. Το CoreDNS προσφέρει μια λειτουργία επικύρωσης pods που θα επιλύει μόνο εάν υπάρχει ένα pod με τη σωστή διεύθυνση IP και namespace.
Για να διευρύνετε τις γνώσεις σας σχετικά με τα Kubernetes endpoints, autopaths, και wildcards, δείτε έναν οδηγό σχετικά με το πώς Kubernetes επιτρέπει την ανάγνωση δεδομένων ζώνης από το cluster του.
Customization Features
Το Kubernetes σάς επιτρέπει να διαμορφώσετε τα DNS pods και να προσαρμόσετε την επίλυση DNS του cluster, χάρη στην customizing DNS service. Οι διαχειριστές μπορούν να αξιοποιήσουν αυτές τις υπηρεσίες για να αλλάξουν τους upstream nameservers ή τα επιθέματα τομέα αναζήτησης που ορίζονται στο resolv.conf. Πάνω απ' όλα, υπάρχει μια πρόσθετη δυνατότητα εξατομίκευσης των pods και των containers χρησιμοποιώντας την επιλογή dnsConfig :

Η ενημέρωση αυτής της διαμόρφωσης θα αναγκάσει την επανεγγραφή του resolv.conf του pod, επιτρέποντας στις αλλαγές να τεθούν σε ισχύ. Η παραπάνω ρύθμιση θα δημιουργήσει ένα αρχείο που περιέχει γραμμές nameserver 203.0.113.44 and search custom.dns.local, οι οποίες μεταφέρονται απευθείας στις κανονικές επιλογές resolv.conf .
Συμπέρασμα
Σε αυτόν τον οδηγό, σας ξεναγήσαμε στα βασικά της υπηρεσίας Kubernetes DNS και στην υλοποίησή της σε διαφορετικές εκδόσεις. Συζητήθηκαν επίσης οι εγγραφές Kubernetes DNS με τη βοήθεια ενός παραδείγματος. Επιπλέον, επισημάναμε ορισμένες πρόσθετες επιλογές διαμόρφωσης για την προσαρμογή των pods και την επίλυση ερωτημάτων DNS. Αυτό καλύπτει τα βασικά της υπηρεσίας Kubernetes DNS, αλλά η εκμάθησή σας δεν πρέπει να σταματήσει εδώ. Ελέγξτε την επίσημη τεκμηρίωση του Kubernetes για να εξερευνήσετε περισσότερα σχετικά με το θέμα.
Για να διευρύνετε τις γνώσεις σας στο DevOps και να εμβαθύνετε στα βασικά στοιχεία του Kubernetes, δείτε τους παρακάτω οδηγούς από το blog:
- Εισαγωγή στο Helm: Διαχειριστής πακέτων για το Kubernetes
- Πώς να εγκαταστήσετε και να χρησιμοποιήσετε το Kubernetes στο Ubuntu 20.04
- Ανάπτυξη μιας εφαρμογής PHP σε ένα Kubernetes Cluster με Ubuntu 18.04
Καλή συνέχεια!
Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.