«Κίνδυνος είναι το μεσαίο μου όνομα», είπε ο Όστιν Πάουερς, ο διεθνής άνθρωπος του μυστηρίου. Αλλά αυτό που χαίρει μεγάλης εκτίμησης από τους υπερ-πράκτορες και τις ειδικές υπηρεσίες δεν είναι καθόλου κατάλληλο για υπηρεσίες πληροφορικής, όπου η πλήξη είναι πολύ καλύτερη από τον κίνδυνο.

Και το Istio, μαζί με το OpenShift και το Kubernetes, κάνει την ανάπτυξη μικροϋπηρεσιών πραγματικά βαρετή και προβλέψιμη - και αυτό είναι υπέροχο. Θα μιλήσουμε για αυτό και για πολλά άλλα στην τέταρτη και τελευταία ανάρτηση της σειράς Istio.
Όταν η πλήξη είναι σωστή
Στην περίπτωσή μας, η πλήξη εμφανίζεται μόνο στην τελική φάση, όταν το μόνο που απομένει είναι να καθίσουμε και να παρακολουθήσουμε τη διαδικασία. Αλλά για αυτό πρέπει πρώτα να ρυθμίσετε τα πάντα, και υπάρχουν πολλά ενδιαφέροντα πράγματα που σας περιμένουν εδώ.
Κατά την ανάπτυξη μιας νέας έκδοσης του λογισμικού σας, αξίζει να λάβετε υπόψη όλες τις επιλογές για την ελαχιστοποίηση των κινδύνων. Η παράλληλη εκτέλεση είναι ένας πολύ ισχυρός και αποδεδειγμένος τρόπος δοκιμών και το Istio σάς επιτρέπει να χρησιμοποιήσετε μια "μυστική υπηρεσία" (μια κρυφή έκδοση της μικρουπηρεσίας σας) για να το κάνετε αυτό χωρίς να παρεμβαίνετε στο σύστημα παραγωγής σας. Υπάρχει μάλιστα και ένας ειδικός όρος για αυτό - «Dark Launch», ο οποίος με τη σειρά του ενεργοποιείται από μια συνάρτηση με εξίσου κατασκοπευτικό όνομα «traffic mirroring».
Σημειώστε ότι η πρώτη πρόταση της προηγούμενης παραγράφου χρησιμοποιεί τον όρο «ανάπτυξη» αντί για «απελευθέρωση». Θα πρέπει πραγματικά να μπορείτε να αναπτύξετε - και φυσικά να χρησιμοποιήσετε - την μικρουπηρεσία σας όσο συχνά θέλετε. Αυτή η υπηρεσία πρέπει να είναι σε θέση να λαμβάνει και να επεξεργάζεται επισκεψιμότητα, να παράγει αποτελέσματα, καθώς και να γράφει σε αρχεία καταγραφής και να παρακολουθείται. Αλλά ταυτόχρονα, δεν είναι καθόλου απαραίτητο να κυκλοφορήσει αυτή η υπηρεσία στην παραγωγή. Η ανάπτυξη και η κυκλοφορία λογισμικού δεν είναι πάντα το ίδιο πράγμα. Μπορείτε να το αναπτύξετε όποτε θέλετε, αλλά να το απελευθερώσετε μόνο όταν είστε έτοιμοι.
Η οργάνωση της βαρεμάρας είναι ενδιαφέρουσα.
Ρίξτε μια ματιά στον ακόλουθο κανόνα δρομολόγησης Istio που δρομολογεί όλα τα αιτήματα HTTP στην μικρουπηρεσία σύστασης v1 (όλα τα παραδείγματα προέρχονται από ), ενώ ταυτόχρονα τα αντικατοπτρίζει στην μικρουπηρεσία σύστασης v2:

Παρακαλώ σημειώστε την ετικέτα mirror: στο κάτω μέρος της οθόνης – αυτό ρυθμίζει την κατοπτρική απεικόνιση της κυκλοφορίας. Ναι, είναι τόσο απλό!
Το αποτέλεσμα αυτού του κανόνα είναι ότι το σύστημα παραγωγής σας (v1) θα εξακολουθεί να επεξεργάζεται τα εισερχόμενα αιτήματα, αλλά τα ίδια τα αιτήματα θα αντικατοπτρίζονται ασύγχρονα στην v2, πράγμα που σημαίνει ότι θα αποστέλλονται ως πλήρη αντίγραφα. Με αυτόν τον τρόπο, μπορείτε να δοκιμάσετε την έκδοση 2 σε πραγματικές συνθήκες – σε πραγματικά δεδομένα και κίνηση – χωρίς να επηρεάσετε το σύστημα παραγωγής με οποιονδήποτε τρόπο. Μήπως αυτό καθιστά την οργάνωση δοκιμών βαρετή; Ναι, φυσικά. Αλλά γίνεται με έναν ενδιαφέροντα τρόπο.
Ας προσθέσουμε λίγο δράμα
Λάβετε υπόψη ότι ο κώδικας έκδοσης 2 πρέπει να λαμβάνει υπόψη καταστάσεις όπου τα εισερχόμενα αιτήματα ενδέχεται να οδηγήσουν σε αλλαγές δεδομένων. Τα ίδια τα αιτήματα αντικατοπτρίζονται εύκολα και με διαφάνεια, αλλά η επιλογή της μεθόδου επεξεργασίας στη δοκιμή παραμένει δική σας - και αυτό είναι ήδη λίγο συναρπαστικό.
Ας επαναλάβουμε ένα σημαντικό σημείο
Η λειτουργία Dark Launch/Request Mirroring μπορεί να εκτελεστεί χωρίς να αγγίξετε κανέναν κωδικό.
Τροφή για σκέψη
Τι γίνεται αν το μέρος όπου αντικατοπτρίζονται τα αιτήματα στέλνει μερικά από αυτά όχι στην έκδοση 1, αλλά στην έκδοση 2; Για παράδειγμα, ένα τοις εκατό όλων των αιτημάτων ή μόνο αιτήματα από μια συγκεκριμένη ομάδα χρηστών. Και στη συνέχεια, εξετάζοντας πώς λειτουργεί η έκδοση 2, μεταφέρετε σταδιακά όλα τα αιτήματα στη νέα έκδοση. Ή αντίστροφα, επιστρέψτε τα πάντα στην έκδοση 1 εάν κάτι πάει στραβά με την έκδοση 2. Νομίζω ότι λέγεται Canary Deployment (ο όρος είναι , και αν ήταν ρωσικής προέλευσης, πιθανότατα θα περιείχε μια αναφορά σε ), και τώρα θα το εξετάσουμε αυτό με περισσότερες λεπτομέρειες.
Ανάπτυξη Canary στο Ίστιο: απλοποίηση της θέσης σε λειτουργία
Προσεκτικά και σταδιακά
Η ουσία του μοντέλου ανάπτυξης Canary είναι εξαιρετικά απλή: όταν ξεκινάτε μια νέα έκδοση του λογισμικού σας (στην περίπτωσή μας, μια μικρουπηρεσία), πρώτα δίνετε πρόσβαση σε αυτήν σε μια μικρή ομάδα χρηστών. Αν όλα πάνε καλά, μεγαλώνετε σταδιακά αυτήν την ομάδα μέχρι η νέα έκδοση να αρχίσει να παρουσιάζει προβλήματα ή - αν αυτό δεν συμβεί ποτέ - τελικά μεταφέρετε όλους τους χρήστες σε αυτήν. Εισάγοντας προσεκτικά και σταδιακά μια νέα έκδοση και μεταφέροντας τους χρήστες σε αυτήν με ελεγχόμενο τρόπο, μπορείτε να μειώσετε τους κινδύνους και να μεγιστοποιήσετε τα σχόλια.
Φυσικά, το Istio διευκολύνει την ανάπτυξη του Canary προσφέροντας αρκετές καλές επιλογές για έξυπνη δρομολόγηση αιτημάτων. Και ναι, όλα αυτά μπορούν να γίνουν χωρίς να αγγίξετε τον πηγαίο κώδικά σας με οποιονδήποτε τρόπο.
Φιλτράρισμα του προγράμματος περιήγησης
Ένα από τα απλούστερα κριτήρια δρομολόγησης είναι η ανακατεύθυνση μέσω προγράμματος περιήγησης. Ας υποθέσουμε ότι θέλετε μόνο τα αιτήματα από τα προγράμματα περιήγησης Safari να μεταβαίνουν στην έκδοση 2. Δείτε πώς γίνεται:

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

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

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

Μέχρι τώρα πιθανότατα έχετε μια ιδέα για το τι μπορούν να κάνουν οι κανονικές εκφράσεις.
Ενεργήστε έξυπνα
Η έξυπνη δρομολόγηση, συμπεριλαμβανομένης της επεξεργασίας κεφαλίδων πακέτων χρησιμοποιώντας κανονικές εκφράσεις, σας επιτρέπει να κατευθύνετε την κυκλοφορία όπως θέλετε. Και αυτό διευκολύνει πολύ την εφαρμογή νέου κώδικα – είναι απλό, δεν απαιτεί αλλαγή του ίδιου του κώδικα και, εάν είναι απαραίτητο, όλα μπορούν να επανέλθουν γρήγορα στην αρχική τους κατάσταση.
Ενδιαφερόμενος?
Είστε πρόθυμοι να πειραματιστείτε με το Istio, το Kubernetes και το OpenShift στον δικό σας υπολογιστή; Ομάδα ετοίμασε ένα εξαιρετικό σχετικά με αυτό το θέμα και δημοσίευσε όλα τα σχετικά αρχεία δημόσια. Προχώρα λοιπόν και μην αρνείσαι τίποτα στον εαυτό σου.
Ιστιο Έξοδος: έξοδος από το κατάστημα με σουβενίρ
Η χρήση του Istio με το Red Hat OpenShift και το Kubernetes μπορεί να κάνει τη ζωή σας με τις μικροϋπηρεσίες πολύ πιο εύκολη. Το πλέγμα υπηρεσιών Istio είναι κρυμμένο μέσα σε pods Kubernetes και ο κώδικά σας εκτελείται (ως επί το πλείστον) μεμονωμένα. Απόδοση, ευκολία τροποποίησης, εντοπισμός κ.λπ. - όλα αυτά είναι εύκολα στη χρήση ακριβώς λόγω της χρήσης κοντέινερ με πλευρικό αμάξωμα. Τι γίνεται όμως αν η μικρουπηρεσία σας χρειάζεται να επικοινωνήσει με άλλες υπηρεσίες που βρίσκονται εκτός του συστήματος OpenShift-Kubernetes;
Εδώ είναι που έρχεται να σώσει το Istio Egress. Με λίγα λόγια, απλώς σας επιτρέπει να έχετε πρόσβαση σε πόρους (διαβάστε: "υπηρεσίες") που δεν αποτελούν μέρος του συστήματος pod Kubernetes. Χωρίς πρόσθετη διαμόρφωση, το Istio Egress δρομολογεί την κυκλοφορία μόνο εντός και μεταξύ συμπλεγμάτων pod με βάση εσωτερικούς πίνακες IP. Και αυτή η «προστασία» λειτουργεί άψογα εφόσον δεν χρειάζεστε πρόσβαση σε υπηρεσίες από έξω.
Το Egress σάς επιτρέπει να παρακάμψετε τους παραπάνω πίνακες IP, είτε με βάση τους κανόνες Egress είτε με βάση ένα εύρος διευθύνσεων IP.
Ας υποθέσουμε ότι έχουμε ένα πρόγραμμα Java που κάνει ένα αίτημα GET στο httpbin.org/headers.
(Το httpbin.org είναι απλώς ένας βολικός πόρος για τον έλεγχο εξερχόμενων αιτημάτων υπηρεσιών.)
Αν εισαγάγετε στη γραμμή εντολών curl http://httpbin.org/headers, θα δούμε τα εξής:

Ή μπορείτε να ανοίξετε την ίδια διεύθυνση στο πρόγραμμα περιήγησής σας:

Όπως μπορούμε να δούμε, η υπηρεσία που βρίσκεται εκεί απλώς επιστρέφει τις κεφαλίδες που της έχουν διαβιβαστεί.
Αντικαθιστούμε τις εισαγωγές μετωπικά
Τώρα ας πάρουμε τον κώδικα Java αυτής της υπηρεσίας που βρίσκεται έξω από το σύστημά μας και ας τον εκτελέσουμε στο σύστημά μας, όπου, ας θυμηθούμε, βρίσκεται το Istio. (Μπορείτε να το κάνετε αυτό μόνοι σας επικοινωνώντας .) Μόλις δημιουργήσουμε την κατάλληλη εικόνα και την εκτελέσουμε στην πλατφόρμα OpenShift, θα καλέσουμε αυτήν την υπηρεσία με την εντολή curl egresshttpbin-istioegress.$(minishift ip).nip.io, μετά από το οποίο θα δούμε αυτό στην οθόνη:

Ωχ, τι συνέβη; Όλα απλώς λειτούργησαν. Τι σημαίνει Δεν Βρέθηκε; Το κάναμε απλώς για αυτόν curl.
Επέκταση πινάκων IP σε ολόκληρο το Διαδίκτυο
Το Ιστίο φταίει (ή ευχαριστεί) γι' αυτό. Άλλωστε, το Istio είναι απλώς ένα κοντέινερ με πλευρικό αμάξωμα που είναι υπεύθυνο για την ανακάλυψη και τη δρομολόγηση (και για ένα σωρό άλλα πράγματα που συζητήσαμε νωρίτερα). Για αυτόν τον λόγο, οι πίνακες IP γνωρίζουν μόνο τι υπάρχει μέσα στο σύστημα συμπλέγματός σας. Και το httpbin.org βρίσκεται έξω και επομένως δεν είναι διαθέσιμο. Εδώ ακριβώς έρχεται το Istio Egress – χωρίς καμία αλλαγή στον πηγαίο κώδικά σας.
Ο παρακάτω κανόνας εξόδου υποδεικνύει στο Istio να αναζητήσει (εάν είναι απαραίτητο, ολόκληρο το Διαδίκτυο) την απαιτούμενη υπηρεσία, στην προκειμένη περίπτωση, το httpbin.org. Όπως μπορείτε να δείτε από αυτό το αρχείο (egress_httpbin.yml), η λειτουργικότητα εδώ είναι αρκετά απλή:

Το μόνο που μένει είναι να εφαρμόσουμε αυτόν τον κανόνα:
istioctl create -f egress_httpbin.yml -n istioegress
Μπορείτε να δείτε τους κανόνες εξόδου με την εντολή istioctl get egressrules:

Και τέλος, εκτελούμε ξανά την εντολή μπούκλα – και βλέπουμε ότι όλα λειτουργούν:

Σκέψου ανοιχτά
Όπως μπορείτε να δείτε, το Istio σας επιτρέπει να οργανώσετε την αλληλεπίδραση με τον έξω κόσμο. Με άλλα λόγια, μπορείτε ακόμα να δημιουργείτε υπηρεσίες OpenShift και να τις διαχειρίζεστε μέσω του Kubernetes, διατηρώντας τα πάντα σε pods που κλιμακώνονται προς τα πάνω και προς τα κάτω ανάλογα με τις ανάγκες. Και ταυτόχρονα, μπορείτε εύκολα να έχετε πρόσβαση σε υπηρεσίες εξωτερικές του περιβάλλοντός σας. Και ναι, ας επαναλάβουμε για άλλη μια φορά ότι όλα αυτά μπορούν να γίνουν χωρίς να αγγίξετε τον κώδικά σας με οποιονδήποτε τρόπο.
Αυτή ήταν η τελευταία ανάρτηση της σειράς Istio. Μείνετε συντονισμένοι - σας περιμένουν πολλά ενδιαφέροντα πράγματα!
Πηγή: www.habr.com
