Πρόσφατα, εργάζομαι σε περιεχόμενο PaaS και μόλις ήρθα σε επαφή με το Kubernetes, το οποίο περιλαμβάνει κάλυψη δικτύου, δηλαδή επικοινωνία μεταξύ κοντέινερ μεταξύ κεντρικών υπολογιστών. Έτσι έχει προκύψει μια σειρά από στοιχεία ανοιχτού κώδικα, όπως φανέλα, τσίτι, ύφανση κ.λπ. Εδώ είναι κυρίως Calico και Fannel.
Αρχή φανέλας
Το Flannel, ένα project που αναπτύχθηκε από την CoreOS, είναι ίσως το πιο άμεσο και δημοφιλές πρόσθετο CNI. Είναι ένα από τα πιο ώριμα παραδείγματα αρχιτεκτονικής δικτύου σε συστήματα ενορχήστρωσης κοντέινερ και έχει σχεδιαστεί για να επιτρέπει καλύτερη δικτύωση μεταξύ κοντέινερ και μεταξύ κεντρικών υπολογιστών. Με την άνοδο της ιδέας CNI, το πρόσθετο Flannel CNI είναι μια πρώιμη εισαγωγή.
Η φανέλα είναι σχετικά εύκολη στην εγκατάσταση και τη διαμόρφωση σε σύγκριση με άλλες επιλογές. Είναι συσκευασμένο ως ένα ενιαίο δυαδικό FlannelD και πολλά κοινά εργαλεία ανάπτυξης συμπλέγματος Kubernetes και πολλές διανομές Kubernetes μπορούν να εγκαταστήσουν το Flannel από προεπιλογή. Η φανέλα μπορεί να χρησιμοποιήσει το υπάρχον σύμπλεγμα etcd του συμπλέγματος Kubernetes για να αποθηκεύσει τις πληροφορίες κατάστασής του χρησιμοποιώντας το API, επομένως δεν απαιτεί αποκλειστικό χώρο αποθήκευσης δεδομένων.
Η φανέλα διαμορφώνει ένα δίκτυο επικάλυψης IPv3 επιπέδου 4. Δημιουργεί ένα μεγάλο εσωτερικό δίκτυο που εκτείνεται σε κάθε κόμβο του συμπλέγματος. Σε αυτό το δίκτυο επικάλυψης, κάθε κόμβος έχει ένα υποδίκτυο που χρησιμοποιείται για την εσωτερική εκχώρηση διευθύνσεων IP. Κατά τη διαμόρφωση ενός pod, η διεπαφή γέφυρας Docker σε κάθε κόμβο εκχωρεί μια διεύθυνση σε κάθε νέο κοντέινερ. Τα pods στον ίδιο κεντρικό υπολογιστή μπορούν να επικοινωνούν χρησιμοποιώντας γέφυρες Docker, ενώ τα pods σε διαφορετικούς κεντρικούς υπολογιστές χρησιμοποιούν φανέλα για να ενθυλακώσουν την κυκλοφορία τους σε πακέτα UDP, ώστε να μπορούν να δρομολογηθούν στον κατάλληλο προορισμό.
Η φανέλα έχει πολλούς διαφορετικούς τύπους backend που μπορούν να χρησιμοποιηθούν για ενθυλάκωση και δρομολόγηση. Η προεπιλεγμένη και συνιστώμενη προσέγγιση είναι η χρήση VXLAN επειδή το VXLAN αποδίδει καλύτερα και απαιτεί λιγότερη χειροκίνητη παρέμβαση.
Αρχιτεκτονική Calico
Το calico περιλαμβάνει τα ακόλουθα σημαντικά στοιχεία: Felix, etcd, BGP Client και BGP Route Reflector. Ακολουθούν οι εξηγήσεις για καθένα από αυτά τα στοιχεία.
Felix: Κυρίως υπεύθυνος για τη διαμόρφωση δρομολόγησης, τη διαμόρφωση και την παράδοση κανόνων ACLS, υπάρχει σε κάθε κόμβο.
κ.λπ.: Ο κατανεμημένος χώρος αποθήκευσης κλειδιού-τιμής, κυρίως υπεύθυνος για τη συνέπεια των μεταδεδομένων δικτύου, διασφαλίζοντας την ακρίβεια της κατάστασης του δικτύου Calico, μπορεί να κοινοποιηθεί στο kubernetes.
Το BGPClient (BIRD) είναι κυρίως υπεύθυνο για τη διανομή των πληροφοριών δρομολόγησης που γράφτηκαν από τον Felix στον πυρήνα στο τρέχον δίκτυο Calico για να διασφαλιστεί η αποτελεσματικότητα της επικοινωνίας μεταξύ των φόρτων εργασίας.
Το BGPRoute Reflector (BIRD) χρησιμοποιείται σε αναπτύξεις μεγάλης κλίμακας, εγκαταλείποντας τη λειτουργία πλέγματος διασύνδεσης όλων των κόμβων και χρησιμοποιώντας έναν ή περισσότερους ανακλαστήρες BGPRoute για την ολοκλήρωση της κεντρικής δρομολόγησης και διανομής.
Η αρχή του τσίτι
Όπως φαίνεται στο παρακάτω διάγραμμα, η διαδικασία απεικονίζεται από το κοντέινερ προέλευσης μέσω του κεντρικού υπολογιστή προέλευσης, μέσω της δρομολόγησης του κέντρου δεδομένων και, τέλος, στον κεντρικό υπολογιστή προορισμού και τελικά εκχωρείται στο κοντέινερ προορισμού.
Αντίθεση
Από την παραπάνω αρχή, μπορεί να φανεί ότι η φανέλα εκτελεί λειτουργίες αποσυσκευασίας πακέτων με βάση την προώθηση δρομολόγησης, η οποία σπαταλά τους υπολογιστικούς πόρους της CPU. Το παρακάτω διάγραμμα συγκρίνει την απόδοση διαφόρων στοιχείων δικτύου ανοιχτού κώδικα που βρίσκονται στο διαδίκτυο. Μπορεί να φανεί ότι όσον αφορά το εύρος ζώνης και την καθυστέρηση δικτύου, η απόδοση του Calico και του κεντρικού υπολογιστή είναι παρόμοια.
|