Επισκόπηση και σύγκριση ελεγκτών Ingress για Kubernetes

Επισκόπηση και σύγκριση ελεγκτών Ingress για Kubernetes

Κατά την εκκίνηση ενός συμπλέγματος Kubernetes για μια συγκεκριμένη εφαρμογή, πρέπει να κατανοήσετε τι θέτουν η ίδια η εφαρμογή, η επιχείρηση και οι προγραμματιστές σε αυτόν τον πόρο. Με αυτές τις πληροφορίες, μπορείτε να αρχίσετε να παίρνετε μια αρχιτεκτονική απόφαση και, ειδικότερα, να επιλέγετε έναν συγκεκριμένο ελεγκτή Ingress, από τον οποίο υπάρχει ήδη μεγάλος αριθμός σήμερα. Προκειμένου να έχουμε μια βασική ιδέα των διαθέσιμων επιλογών χωρίς να χρειάζεται να περάσετε από πολλά άρθρα / τεκμηρίωση κ.λπ., ετοιμάσαμε αυτήν την επισκόπηση, συμπεριλαμβανομένων των κύριων (έτοιμων για παραγωγή) ελεγκτών εισόδου.

Ελπίζουμε ότι θα βοηθήσει τους συναδέλφους στην επιλογή μιας αρχιτεκτονικής λύσης - τουλάχιστον θα γίνει αφετηρία για την απόκτηση λεπτομερέστερων πληροφοριών και πρακτικών πειραμάτων. Προηγουμένως, μελετήσαμε άλλα παρόμοια υλικά στο διαδίκτυο και, παραδόξως, δεν βρήκαμε ούτε μία, περισσότερο ή λιγότερο πλήρη, και το σημαντικότερο - δομημένη - κριτική. Ας καλύψουμε λοιπόν αυτό το κενό!

Κριτήρια

Κατ 'αρχήν, για να κάνετε μια σύγκριση και να έχετε οποιοδήποτε χρήσιμο αποτέλεσμα, πρέπει να κατανοήσετε όχι μόνο τη θεματική περιοχή, αλλά και να έχετε μια συγκεκριμένη λίστα κριτηρίων που θα καθορίσουν το διάνυσμα της έρευνας. Χωρίς να προσποιούμαστε ότι αναλύουμε όλες τις πιθανές περιπτώσεις χρήσης του Ingress / Kubernetes, προσπαθήσαμε να επισημάνουμε τις πιο γενικές απαιτήσεις για τους ελεγκτές - να είστε προετοιμασμένοι ότι σε κάθε περίπτωση θα πρέπει να μελετήσετε όλες τις ιδιαιτερότητες και τα στοιχεία σας ξεχωριστά.

Αλλά θα ξεκινήσω με τα χαρακτηριστικά που έχουν γίνει τόσο οικεία που εφαρμόζονται σε όλες τις λύσεις και δεν λαμβάνονται υπόψη:

  • δυναμική ανακάλυψη υπηρεσιών (ανακάλυψη υπηρεσιών).
  • Τερματισμός SSL.
  • εργασία με δικτυακές υποδοχές.

Τώρα για τα σημεία σύγκρισης:

Υποστηριζόμενα πρωτόκολλα

Ένα από τα βασικά κριτήρια επιλογής. Το λογισμικό σας μπορεί να μην λειτουργεί σε τυπικό HTTP ή μπορεί να απαιτεί εργασία σε πολλά πρωτόκολλα ταυτόχρονα. Εάν η περίπτωσή σας δεν είναι τυπική, φροντίστε να λάβετε υπόψη αυτόν τον παράγοντα, ώστε να μην χρειαστεί να διαμορφώσετε ξανά το σύμπλεγμα αργότερα. Για όλους τους ελεγκτές, η λίστα των υποστηριζόμενων πρωτοκόλλων ποικίλλει.

λογισμικό στον πυρήνα

Υπάρχουν πολλές παραλλαγές εφαρμογών στις οποίες βασίζεται ο ελεγκτής. Δημοφιλείς είναι οι nginx, traefik, haproxy, envoy. Στη γενική περίπτωση, μπορεί να μην έχει μεγάλη επίδραση στον τρόπο λήψης και μετάδοσης της κίνησης, αλλά είναι πάντα χρήσιμο να γνωρίζουμε τις πιθανές αποχρώσεις και τα χαρακτηριστικά του τι υπάρχει "κάτω από την κουκούλα".

Δρομολόγηση της κυκλοφορίας

Με βάση το τι είναι δυνατόν να ληφθεί μια απόφαση σχετικά με την κατεύθυνση της κυκλοφορίας προς μια συγκεκριμένη υπηρεσία; Συνήθως αυτά είναι host και path, αλλά υπάρχουν επιπλέον δυνατότητες.

Χώρος ονομάτων μέσα σε ένα σύμπλεγμα

Χώρος ονομάτων (χώρος ονομάτων) - η δυνατότητα λογικού διαχωρισμού πόρων στο Kubernetes (για παράδειγμα, στη σκηνή, την παραγωγή κ.λπ.). Υπάρχουν ελεγκτές Ingress που πρέπει να εγκατασταθούν χωριστά σε κάθε χώρο ονομάτων (και στη συνέχεια μπορεί να κατευθύνει την κυκλοφορία μόνο στους λοβούς αυτού του χώρου). Και υπάρχουν εκείνα (και η σαφής πλειοψηφία τους) που λειτουργούν συνολικά για ολόκληρο το σύμπλεγμα - σε αυτά η κυκλοφορία κατευθύνεται σε οποιοδήποτε pod του συμπλέγματος, ανεξάρτητα από τον χώρο ονομάτων.

Δείγματα για ανάντη

Πώς κατευθύνεται η επισκεψιμότητα σε υγιείς παρουσίες της εφαρμογής, των υπηρεσιών; Υπάρχουν επιλογές με ενεργητικούς και παθητικούς ελέγχους, επαναλήψεις, διακόπτες κυκλώματος (Για περισσότερες λεπτομέρειες, βλ., για παράδειγμα, άρθρο για το Ιστιο), προσαρμοσμένους υγειονομικούς ελέγχους κ.λπ. Μια πολύ σημαντική παράμετρος εάν έχετε υψηλές απαιτήσεις για διαθεσιμότητα και έγκαιρη αφαίρεση αποτυχημένων υπηρεσιών από την εξισορρόπηση.

Αλγόριθμοι εξισορρόπησης

Υπάρχουν πολλές επιλογές: από το παραδοσιακό γύρος στο εξωτικό rdp-cookie, καθώς και μεμονωμένα χαρακτηριστικά όπως κολλώδεις συνεδρίες.

Έλεγχος ταυτότητας

Ποια συστήματα εξουσιοδότησης υποστηρίζει ο υπεύθυνος επεξεργασίας; Basic, digest, oauth, external-auth - Νομίζω ότι αυτές οι επιλογές θα πρέπει να είναι γνωστές. Αυτό είναι ένα σημαντικό κριτήριο εάν υπάρχουν πολλοί βρόχοι προγραμματιστών (ή/και απλώς ιδιωτικοί) στους οποίους έχετε πρόσβαση μέσω του Ingress.

Κατανομή κυκλοφορίας

Υποστηρίζει ο ελεγκτής τέτοιους ευρέως χρησιμοποιούμενους μηχανισμούς διανομής της κυκλοφορίας, όπως το rollouts του καναρινιού (καναρίνι), το A/B testing, το traffic mirroring (mirroring / shadowing); Αυτό είναι ένα πραγματικά επώδυνο θέμα για εφαρμογές που απαιτούν ακριβή και ακριβή διαχείριση της κυκλοφορίας για παραγωγικές δοκιμές, εντοπισμό σφαλμάτων προϊόντων εκτός σύνδεσης (ή με ελάχιστη απώλεια), ανάλυση κυκλοφορίας και ούτω καθεξής.

Συνδρομή επί πληρωμή

Υπάρχει δυνατότητα επί πληρωμή για τον ελεγκτή, με προηγμένη λειτουργικότητα ή/και τεχνική υποστήριξη;

Γραφική διεπαφή χρήστη (Διεπαφή χρήστη Ιστού)

Υπάρχει κάποιο GUI για τη διαχείριση της διαμόρφωσης του ελεγκτή; Κυρίως για "ευχρηστία" ή/και για όσους πρέπει να κάνουν κάποιες αλλαγές στη διαμόρφωση του Ingress'a, αλλά η εργασία με "ακατέργαστα" πρότυπα είναι άβολη. Μπορεί να είναι χρήσιμο εάν οι προγραμματιστές θέλουν να διεξάγουν κάποια πειράματα με την κυκλοφορία εν κινήσει.

Επικύρωση JWT

Η παρουσία ενσωματωμένης επικύρωσης JSON web tokens για εξουσιοδότηση και επικύρωση του χρήστη στην τελική εφαρμογή.

Δυνατότητες προσαρμογής παραμέτρων

Επεκτασιμότητα προτύπου με την έννοια της ύπαρξης μηχανισμών που σας επιτρέπουν να προσθέτετε τις δικές σας οδηγίες, σημαίες κ.λπ. σε τυπικά πρότυπα διαμόρφωσης.

Βασικοί μηχανισμοί προστασίας DDOS

Απλοί αλγόριθμοι ορίου ρυθμού ή πιο σύνθετες επιλογές φιλτραρίσματος επισκεψιμότητας με βάση διευθύνσεις, λίστες επιτρεπόμενων, χώρες κ.λπ.

Ζητήστε ίχνος

Δυνατότητα παρακολούθησης, παρακολούθησης και εντοπισμού σφαλμάτων αιτημάτων από Ingresses σε συγκεκριμένες υπηρεσίες / pods και ιδανικά μεταξύ υπηρεσιών / pods επίσης.

WAF

Υποστήριξη τείχος προστασίας εφαρμογών.

Ελεγκτές

Ο κατάλογος των ελεγκτών σχηματίστηκε με βάση επίσημη τεκμηρίωση Kubernetes и αυτό το τραπέζι. Εξαιρέσαμε ορισμένα από αυτά από την ανασκόπηση λόγω ειδικότητας ή χαμηλού επιπολασμού (πρώιμο στάδιο ανάπτυξης). Τα υπόλοιπα συζητούνται παρακάτω. Ας ξεκινήσουμε με μια γενική περιγραφή των λύσεων και ας συνεχίσουμε με έναν συνοπτικό πίνακα.

Είσοδος από την Kubernetes

Website: github.com/kubernetes/ingress-nginx
Άδεια χρήσης: Apache 2.0

Αυτός είναι ο επίσημος ελεγκτής για το Kubernetes και αναπτύσσεται από την κοινότητα. Προφανώς από το όνομα, βασίζεται στο nginx και συμπληρώνεται από ένα διαφορετικό σύνολο προσθηκών Lua που χρησιμοποιούνται για την υλοποίηση πρόσθετων λειτουργιών. Λόγω της δημοτικότητας του ίδιου του nginx και των ελάχιστων τροποποιήσεων του όταν χρησιμοποιείται ως ελεγκτής, αυτή η επιλογή μπορεί να είναι η πιο εύκολη και εύκολη στη διαμόρφωση για τον μέσο μηχανικό (με εμπειρία ιστού).

Ingress από την NGINX Inc.

Website: github.com/nginxinc/kubernetes-ingress
Άδεια χρήσης: Apache 2.0

Το επίσημο προϊόν των προγραμματιστών nginx. Διαθέτει πληρωμένη έκδοση με βάση NGINX Plus. Η κύρια ιδέα είναι ένα υψηλό επίπεδο σταθερότητας, σταθερή συμβατότητα προς τα πίσω, η απουσία οποιωνδήποτε εξωτερικών μονάδων και η δηλωμένη αυξημένη ταχύτητα (σε σύγκριση με τον επίσημο ελεγκτή), που επιτεύχθηκε λόγω της απόρριψης του Lua.

Η δωρεάν έκδοση μειώνεται σημαντικά, ακόμη και σε σύγκριση με τον επίσημο ελεγκτή (λόγω της έλλειψης των ίδιων μονάδων Lua). Ταυτόχρονα, το επί πληρωμή έχει μια αρκετά μεγάλη πρόσθετη λειτουργικότητα: μετρήσεις σε πραγματικό χρόνο, επικύρωση JWT, ενεργούς ελέγχους υγείας και πολλά άλλα. Ένα σημαντικό πλεονέκτημα σε σχέση με το NGINX Ingress είναι η πλήρης υποστήριξη της κυκλοφορίας TCP / UDP (και στην έκδοση κοινότητας επίσης!). Μείον - απουσία χαρακτηριστικό διανομής επισκεψιμότητας, το οποίο, ωστόσο, «έχει την υψηλότερη προτεραιότητα για τους προγραμματιστές», αλλά απαιτεί χρόνο για να εφαρμοστεί.

Κονγκ Είσοδος

Website: github.com/Kong/kubernetes-ingress-controller
Άδεια χρήσης: Apache 2.0

Προϊόν που αναπτύχθηκε από την Kong Inc. σε δύο εκδόσεις: εμπορική και δωρεάν. Βασίζεται στο nginx, το οποίο έχει επεκταθεί με μεγάλο αριθμό λειτουργικών μονάδων Lua.

Αρχικά, επικεντρώθηκε στην επεξεργασία και δρομολόγηση αιτημάτων API, π.χ. ως πύλη API, αλλά αυτή τη στιγμή έχει γίνει ένας πλήρης ελεγκτής Ingress. Κύρια πλεονεκτήματα: πολλές πρόσθετες ενότητες (συμπεριλαμβανομένων εκείνων από τρίτους προγραμματιστές) που είναι εύκολο να εγκατασταθούν και να ρυθμιστούν και με τη βοήθεια των οποίων υλοποιείται ένα ευρύ φάσμα πρόσθετων λειτουργιών. Ωστόσο, οι ενσωματωμένες λειτουργίες προσφέρουν ήδη πολλές δυνατότητες. Η διαμόρφωση της εργασίας γίνεται με χρήση πόρων CRD.

Ένα σημαντικό χαρακτηριστικό του προϊόντος - η εργασία εντός του ίδιου περιγράμματος (αντί του διαστήματος ονομάτων) είναι ένα αμφιλεγόμενο θέμα: για κάποιους θα φαίνεται μειονέκτημα (πρέπει να δημιουργήσετε οντότητες για κάθε περίγραμμα) και για κάποιον είναι χαρακτηριστικό ( σιоΜεγαλύτερο επίπεδο απομόνωσης, όπως εάν ένας ελεγκτής είναι χαλασμένος, τότε το πρόβλημα περιορίζεται μόνο στο κύκλωμα).

Τραϊφίκ

Website: github.com/containous/traefik
Άδεια: MIT

Ένας διακομιστής μεσολάβησης που δημιουργήθηκε αρχικά για να λειτουργεί με τη δρομολόγηση αιτημάτων για μικροϋπηρεσίες και το δυναμικό τους περιβάλλον. Ως εκ τούτου, πολλά χρήσιμα χαρακτηριστικά: ενημέρωση της διαμόρφωσης χωρίς καθόλου επανεκκίνηση, υποστήριξη για μεγάλο αριθμό μεθόδων εξισορρόπησης, διεπαφή ιστού, προώθηση μετρήσεων, υποστήριξη για διάφορα πρωτόκολλα, REST API, εκδόσεις καναρινιών και πολλά άλλα. Ένα άλλο ωραίο χαρακτηριστικό είναι η υποστήριξη για πιστοποιητικά Let's Encrypt out of the box. Το μειονέκτημα είναι ότι για να οργανωθεί η υψηλή διαθεσιμότητα (HA), ο ελεγκτής θα πρέπει να εγκαταστήσει και να συνδέσει τη δική του αποθήκευση KV.

HAProxy

Website: github.com/jcmoraisjr/haproxy-ingress
Άδεια χρήσης: Apache 2.0

Το HAProxy ήταν από καιρό γνωστό ως διακομιστής μεσολάβησης και εξισορρόπησης κυκλοφορίας. Ως μέρος ενός συμπλέγματος Kubernetes, προσφέρει μια «απαλή» ενημέρωση διαμόρφωσης (χωρίς απώλεια επισκεψιμότητας), ανακάλυψη υπηρεσίας βάσει DNS, δυναμική διαμόρφωση με χρήση API. Μπορεί να είναι ελκυστικό να προσαρμόσετε πλήρως το πρότυπο διαμόρφωσης αντικαθιστώντας το CM, καθώς και τη δυνατότητα χρήσης συναρτήσεων βιβλιοθήκης Sprig σε αυτό. Σε γενικές γραμμές, η κύρια έμφαση της λύσης είναι η υψηλή ταχύτητα, η βελτιστοποίηση και η αποδοτικότητά της σε καταναλωμένους πόρους. Το πλεονέκτημα του ελεγκτή είναι η υποστήριξη ενός ρεκόρ διαφορετικών μεθόδων εξισορρόπησης.

Ταξιδιώτης

Website: github.com/appscode/voyager
Άδεια χρήσης: Apache 2.0

Βασίζεται στον ελεγκτή HAproxy, ο οποίος τοποθετείται ως μια καθολική λύση που υποστηρίζει ένα ευρύ φάσμα δυνατοτήτων σε μεγάλο αριθμό παρόχων. Προσφέρεται μια ευκαιρία για εξισορρόπηση της κυκλοφορίας στο L7 και στο L4 και η εξισορρόπηση της κυκλοφορίας TCP L4 στο σύνολό της μπορεί να ονομαστεί ένα από τα βασικά χαρακτηριστικά της λύσης.

Περίγραμμα

Website: github.com/heptio/contour
Άδεια χρήσης: Apache 2.0

Αυτή η λύση δεν βασίζεται μόνο στον Envoy: αναπτύχθηκε από από κοινού με τους συντάκτες αυτού του δημοφιλούς πληρεξούσιου. Ένα σημαντικό χαρακτηριστικό είναι η δυνατότητα διαχωρισμού του ελέγχου των πόρων Ingress χρησιμοποιώντας πόρους IngressRoute CRD. Για οργανισμούς με πολλές ομάδες ανάπτυξης που χρησιμοποιούν το ίδιο σύμπλεγμα, αυτό βοηθά στη μεγιστοποίηση της ασφάλειας της εργασίας με κίνηση σε γειτονικούς βρόχους και στην προστασία τους από σφάλματα κατά την αλλαγή πόρων Ingress.

Προσφέρει επίσης ένα εκτεταμένο σύνολο μεθόδων εξισορρόπησης (υπάρχει κατοπτρισμός αιτήματος, αυτόματη επανάληψη, περιορισμός ρυθμού αιτήματος και πολλά άλλα), λεπτομερής παρακολούθηση της ροής της κυκλοφορίας και των αστοχιών. Ίσως για κάποιον να είναι ένα σημαντικό μειονέκτημα η έλλειψη υποστήριξης για κολλώδεις συνεδρίες (αν και το έργο ήδη σε εξέλιξη).

Istio Ingress

Website: istio.io/docs/tasks/traffic-management/ingress
Άδεια χρήσης: Apache 2.0

Μια ολοκληρωμένη λύση πλέγματος υπηρεσιών που δεν είναι μόνο ένας ελεγκτής εισόδου που διαχειρίζεται την εισερχόμενη κίνηση από το εξωτερικό, αλλά και ελέγχει όλη την κίνηση μέσα στο σύμπλεγμα. Κάτω από το καπό, το Envoy χρησιμοποιείται ως proxy sidecar για κάθε υπηρεσία. Στην ουσία, πρόκειται για έναν μεγάλο συνδυασμό που «μπορεί να κάνει τα πάντα», και η βασική του ιδέα είναι η μέγιστη διαχειρισιμότητα, η επεκτασιμότητα, η ασφάλεια και η διαφάνεια. Με αυτό, μπορείτε να ρυθμίσετε τη δρομολόγηση της κυκλοφορίας, να αποκτήσετε πρόσβαση σε εξουσιοδότηση μεταξύ υπηρεσιών, εξισορρόπηση, παρακολούθηση, απελευθέρωση καναρινιών και πολλά άλλα. Διαβάστε περισσότερα για το Ίστιο στη σειρά άρθρων "Επιστροφή στις microservices με το Istio».

Πρεσβευτής

Website: github.com/datawire/ambassador
Άδεια χρήσης: Apache 2.0

Μια άλλη λύση βασισμένη στον Απεσταλμένο. Έχει δωρεάν και εμπορικές εκδόσεις. Τοποθετείται ως "πλήρως εγγενές στο Kubernetes", το οποίο φέρνει τα αντίστοιχα πλεονεκτήματα (στενή ενοποίηση με τις μεθόδους και τις οντότητες του συμπλέγματος K8s).

συγκριτικός πίνακας

Άρα, το αποκορύφωμα του άρθρου είναι αυτός ο τεράστιος πίνακας:

Επισκόπηση και σύγκριση ελεγκτών Ingress για Kubernetes

Έχει δυνατότητα κλικ για πιο κοντινή προβολή και είναι επίσης διαθέσιμο σε μορφή Google Sheets.

Για να συνοψίσουμε

Ο σκοπός αυτού του άρθρου είναι να παρέχει μια πληρέστερη κατανόηση (ωστόσο, σε καμία περίπτωση εξαντλητική!) για την επιλογή που πρέπει να κάνετε στη συγκεκριμένη περίπτωσή σας. Ως συνήθως, κάθε ελεγκτής έχει τα δικά του πλεονεκτήματα και μειονεκτήματα…

Το κλασικό Ingress από την Kubernetes είναι καλό για τη διαθεσιμότητα και την αξιοπιστία του, αρκετά πλούσια χαρακτηριστικά - στη γενική περίπτωση, θα πρέπει να είναι "αρκετό για τα μάτια". Ωστόσο, εάν υπάρχουν αυξημένες απαιτήσεις για σταθερότητα, το επίπεδο των δυνατοτήτων και την ανάπτυξη, θα πρέπει να δώσετε προσοχή στο Ingress με NGINX Plus και μια πληρωμένη συνδρομή. Το Kong έχει το πλουσιότερο σύνολο προσθηκών (και, κατά συνέπεια, τις ευκαιρίες που παρέχουν), και στην πληρωμένη έκδοση υπάρχουν ακόμη περισσότερα από αυτά. Έχει πολλές ευκαιρίες να εργαστεί ως πύλη API, δυναμική διαμόρφωση που βασίζεται σε πόρους CRD, καθώς και βασικές υπηρεσίες Kubernetes.

Με αυξημένες απαιτήσεις για μεθόδους εξισορρόπησης και εξουσιοδότησης, ρίξτε μια ματιά στο Traefik και το HAProxy. Πρόκειται για έργα ανοιχτού κώδικα, αποδεδειγμένα με τα χρόνια, πολύ σταθερά και ενεργά αναπτυσσόμενα. Το Contour έχει κυκλοφορήσει εδώ και μερικά χρόνια, αλλά εξακολουθεί να φαίνεται πολύ νέο και έχει μόνο βασικά χαρακτηριστικά που έχουν προστεθεί πάνω από το Envoy. Εάν υπάρχουν απαιτήσεις για την παρουσία / ενσωμάτωση του WAF μπροστά από την εφαρμογή, θα πρέπει να δώσετε προσοχή στο ίδιο Ingress από Kubernetes ή HAProxy.

Και τα πιο πλούσια σε χαρακτηριστικά είναι τα προϊόντα που κατασκευάζονται πάνω από το Envoy, ειδικά το Istio. Φαίνεται να είναι μια ολοκληρωμένη λύση που «μπορεί να κάνει τα πάντα», κάτι που, ωστόσο, σημαίνει επίσης ένα σημαντικά υψηλότερο όριο εισόδου για διαμόρφωση / εκκίνηση / διαχείριση από άλλες λύσεις.

Επιλέξαμε και χρησιμοποιούμε το Ingress από την Kubernetes ως τυπικό ελεγκτή, που καλύπτει το 80-90% των αναγκών. Είναι αρκετά αξιόπιστο, εύκολο στη διαμόρφωση και επέκταση. Γενικά, ελλείψει συγκεκριμένων απαιτήσεων, θα πρέπει να ταιριάζει στα περισσότερα cluster / εφαρμογές. Από τα ίδια καθολικά και σχετικά απλά προϊόντα, μπορούν να προταθούν τα Traefik και HAProxy.

PS

Διαβάστε επίσης στο blog μας:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο