Dark Launch in Istio: Secret Services

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

Dark Launch in Istio: Secret Services

Και το Istio, μαζί με το OpenShift και το Kubernetes, κάνουν την ανάπτυξη μικροϋπηρεσιών πραγματικά βαρετή και προβλέψιμη - και αυτό είναι υπέροχο. Θα μιλήσουμε για αυτό και πολλά άλλα στην τέταρτη και τελευταία ανάρτηση της σειράς Istio.

Όταν η πλήξη είναι σωστή

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

Κατά την ανάπτυξη μιας νέας έκδοσης του λογισμικού σας, αξίζει να λάβετε υπόψη όλες τις επιλογές για την ελαχιστοποίηση των κινδύνων. Η παράλληλη λειτουργία είναι ένας πολύ ισχυρός και αποδεδειγμένος τρόπος δοκιμής και το Istio σάς επιτρέπει να χρησιμοποιήσετε μια «μυστική υπηρεσία» (μια κρυφή έκδοση της microservice σας) για να το κάνετε αυτό χωρίς να παρεμβαίνετε στο σύστημα παραγωγής. Υπάρχει ακόμη και ένας ειδικός όρος για αυτό - "Dark Launch", ο οποίος με τη σειρά του ενεργοποιείται από μια λειτουργία με εξίσου κατασκοπευτικό όνομα "traffic mirroring".

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

Η οργάνωση της πλήξης είναι ενδιαφέρουσα

Ρίξτε μια ματιά στον ακόλουθο κανόνα δρομολόγησης Istio, ο οποίος δρομολογεί όλα τα αιτήματα HTTP στη σύσταση microservice v1 (όλα τα παραδείγματα λαμβάνονται από Istio Tutorial repo GitHub), ενώ ταυτόχρονα αντικατοπτρίζονται στη σύσταση v2 microservice:

Dark Launch in Istio: Secret Services
Δώστε προσοχή στην ετικέτα mirror: στο κάτω μέρος της οθόνης - είναι αυτό που ρυθμίζει τον κατοπτρισμό της κυκλοφορίας. Ναι, είναι τόσο απλό!

Το αποτέλεσμα αυτού του κανόνα θα είναι ότι το σύστημα παραγωγής σας (v1) θα συνεχίσει να επεξεργάζεται τα εισερχόμενα αιτήματα, αλλά τα ίδια τα αιτήματα θα αντικατοπτρίζονται ασύγχρονα στο v2, δηλαδή, τα πλήρη αντίγραφά τους θα πηγαίνουν εκεί. Με αυτόν τον τρόπο, μπορείτε να δοκιμάσετε το v2 σε πραγματικές συνθήκες - σε πραγματικά δεδομένα και κίνηση - χωρίς να παρεμβαίνετε σε καμία περίπτωση στη λειτουργία του συστήματος παραγωγής. Αυτό κάνει την οργάνωση των δοκιμών βαρετή; Ναι σίγουρα. Αλλά γίνεται με ενδιαφέρον τρόπο.

Ας προσθέσουμε και το δράμα

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

Ας επαναλάβουμε ένα σημαντικό σημείο

Η μυστική εκκίνηση με κατοπτρισμό κυκλοφορίας (Dark Launch/Request Mirroring) μπορεί να πραγματοποιηθεί χωρίς να επηρεαστεί ο κώδικας με οποιονδήποτε τρόπο.

Τροφή για σκέψη

Τι γίνεται αν το μέρος όπου αντικατοπτρίζονται τα αιτήματα στέλνει μερικά από αυτά όχι στο v1, αλλά στο v2; Για παράδειγμα, ένα τοις εκατό όλων των αιτημάτων ή μόνο αιτήματα από μια συγκεκριμένη ομάδα χρηστών. Και στη συνέχεια, κοιτάζοντας ήδη πώς λειτουργεί το v2, μεταφέρετε σταδιακά όλα τα αιτήματα στη νέα έκδοση. Ή το αντίστροφο, επιστρέψτε τα πάντα στο v1 εάν κάτι πάει στραβά με το v2. Νομίζω ότι λέγεται Canary Deployment. επιστρέφει στην εξόρυξη, και αν ήταν ρωσικής προέλευσης, μάλλον θα περιείχε αναφορά σε γάτες), και τώρα θα το δούμε αυτό με περισσότερες λεπτομέρειες.

Ανάπτυξη Canary στο Ίστιο: απλοποίηση της θέσης σε λειτουργία

Προσεκτικά και σταδιακά

Η ουσία του μοντέλου ανάπτυξης Canary Deployment είναι εξαιρετικά απλή: όταν εκκινείτε μια νέα έκδοση του λογισμικού σας (στην περίπτωσή μας, μια microservice), δίνετε πρώτα πρόσβαση σε αυτήν σε μια μικρή ομάδα χρηστών. Εάν όλα πάνε καλά, αυξάνετε σιγά-σιγά αυτήν την ομάδα έως ότου αρχίσει να λειτουργεί η νέα έκδοση ή - αν δεν συμβεί - τελικά μεταφέρετε όλους τους χρήστες σε αυτήν. Παρουσιάζοντας προσεκτικά και σταδιακά μια νέα έκδοση και αλλάζοντας τους χρήστες σε αυτήν με ελεγχόμενο τρόπο, μπορείτε να μειώσετε τους κινδύνους και να μεγιστοποιήσετε τα σχόλια.

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

Φιλτράρισμα του προγράμματος περιήγησης

Ένα από τα απλούστερα κριτήρια δρομολόγησης είναι η ανακατεύθυνση βάσει προγράμματος περιήγησης. Ας υποθέσουμε ότι θέλετε μόνο αιτήματα από προγράμματα περιήγησης Safari για μετάβαση στο v2. Δείτε πώς γίνεται:

Dark Launch in Istio: Secret Services
Ας εφαρμόσουμε αυτόν τον κανόνα δρομολόγησης και, στη συνέχεια, χρησιμοποιούμε την εντολή curl Θα προσομοιώσουμε πραγματικά αιτήματα προς την microservice σε βρόχο. Όπως μπορείτε να δείτε στο στιγμιότυπο οθόνης, όλα πηγαίνουν στο v1:

Dark Launch in Istio: Secret Services
Πού είναι η κίνηση στο v2; Εφόσον στο παράδειγμά μας όλα τα αιτήματα προήλθαν μόνο από τη δική μας γραμμή εντολών, απλά δεν υπάρχει. Αλλά δώστε προσοχή στις κατώτατες γραμμές στην παραπάνω οθόνη: αυτή είναι μια αντίδραση στο γεγονός ότι εκτελέσαμε ένα αίτημα από το πρόγραμμα περιήγησης Safari, το οποίο με τη σειρά του παρήγαγε αυτό:

Dark Launch in Istio: Secret Services

Απεριόριστη ισχύς

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

Dark Launch in Istio: Secret Services
Μέχρι τώρα έχετε πιθανώς μια ιδέα για το τι μπορούν να κάνουν οι κανονικές εκφράσεις.

Δράσε Έξυπνα

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

Ενδιαφερόμενος?

Θέλετε να πειραματιστείτε με το Istio, το Kubernetes και το OpenShift στον υπολογιστή σας; Ομάδα Red Hat Developer Team ετοίμασε ένα εξαιρετικό εγχειρίδιο σχετικά με αυτό το θέμα και δημοσιοποίησε όλα τα συνοδευτικά αρχεία. Προχώρα λοιπόν και μην αρνείσαι τίποτα στον εαυτό σου.

Ιστιο Έξοδος: έξοδος από το κατάστημα με σουβενίρ

Χρησιμοποιώντας το Istio μαζί με το Red Hat OpenShift και το Kubernetes, μπορείτε να κάνετε τη ζωή σας με τις μικροϋπηρεσίες πολύ πιο εύκολη. Το πλέγμα υπηρεσιών του Istio είναι κρυμμένο μέσα στα pods Kubernetes και ο κώδικάς σας εκτελείται (κυρίως) μεμονωμένα. Απόδοση, ευκολία αλλαγής, ιχνηλάτηση, κ.λπ. – όλα αυτά είναι εύκολα στη χρήση χάρη στη χρήση κοντέινερ πλευρικού κάδου. Τι γίνεται όμως αν η μικρουπηρεσία σας χρειάζεται να επικοινωνήσει με άλλες υπηρεσίες που βρίσκονται εκτός του συστήματος OpenShift-Kubernetes;

Εδώ έρχεται να σώσει το Istio Egress. Με λίγα λόγια, σας επιτρέπει απλώς να έχετε πρόσβαση σε πόρους (διαβάστε: "υπηρεσίες") που δεν αποτελούν μέρος του συστήματός σας των Kubernetes pods. Εάν δεν εκτελέσετε πρόσθετες ρυθμίσεις παραμέτρων, τότε στο περιβάλλον Istio Egress η κυκλοφορία δρομολογείται μόνο μέσα σε ένα σύμπλεγμα λοβών και μεταξύ τέτοιων συμπλεγμάτων βάσει εσωτερικών πινάκων IP. Και μια τέτοια κούκλα λειτουργεί εξαιρετικά εφόσον δεν χρειάζεστε πρόσβαση σε υπηρεσίες από το εξωτερικό.

Το Egress σάς επιτρέπει να παρακάμψετε τους παραπάνω πίνακες IP, είτε με βάση τους κανόνες Egress είτε με βάση μια σειρά από διευθύνσεις IP.

Ας υποθέσουμε ότι έχουμε ένα πρόγραμμα Java που κάνει ένα αίτημα GET στο httpbin.org/headers.

(Το httpbin.org είναι απλώς ένας βολικός πόρος για τον έλεγχο των εξερχόμενων αιτημάτων υπηρεσίας.)

Εάν εισάγετε στη γραμμή εντολών curl http://httpbin.org/headers, θα δούμε τα εξής:

Dark Launch in Istio: Secret Services
Ή μπορείτε να ανοίξετε την ίδια διεύθυνση στο πρόγραμμα περιήγησης:

Dark Launch in Istio: Secret Services
Όπως μπορείτε να δείτε, η υπηρεσία που βρίσκεται εκεί απλώς επιστρέφει τις κεφαλίδες που της έχουν περάσει.

Αντικαθιστούμε τις εισαγωγές κατά μέτωπο

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

Dark Launch in Istio: Secret Services
Ωχ, τι έγινε; Όλα απλά λειτούργησαν. Τι σημαίνει δεν βρέθηκε; Απλώς το κάναμε για αυτόν curl.

Επέκταση πινάκων IP σε ολόκληρο το Διαδίκτυο

Ο Istio πρέπει να κατηγορηθεί (ή να ευχαριστηθεί) για αυτό. Άλλωστε, το Istio είναι απλώς κοντέινερ πλευρικών καρτών που είναι υπεύθυνα για τον εντοπισμό και τη δρομολόγηση (και πολλά άλλα πράγματα για τα οποία μιλήσαμε νωρίτερα). Για αυτόν τον λόγο, οι πίνακες IP γνωρίζουν μόνο τι υπάρχει μέσα στο σύστημα συμπλέγματός σας. Και το httpbin.org βρίσκεται έξω και επομένως απρόσιτο. Και εδώ είναι που το Istio Egress έρχεται να σώσει - χωρίς την παραμικρή αλλαγή στον πηγαίο κώδικα σας.

Ο παρακάτω κανόνας Egress αναγκάζει το Istio να αναζητήσει (αν είναι απαραίτητο, τότε σε ολόκληρο το Διαδίκτυο) την απαιτούμενη υπηρεσία, σε αυτήν την περίπτωση, το httpbin.org. Όπως μπορείτε να δείτε από αυτό το αρχείο (egress_httpbin.yml), η λειτουργικότητα εδώ είναι αρκετά απλή:

Dark Launch in Istio: Secret Services
Το μόνο που μένει είναι να εφαρμόσετε αυτόν τον κανόνα:

istioctl create -f egress_httpbin.yml -n istioegress

Μπορείτε να δείτε τους κανόνες Egress με την εντολή istioctl get egressrules:

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

Dark Launch in Istio: Secret Services

Σκεφτόμαστε ανοιχτά

Όπως μπορείτε να δείτε, το Istio σας επιτρέπει να οργανώσετε την αλληλεπίδραση με τον έξω κόσμο. Με άλλα λόγια, μπορείτε ακόμα να δημιουργήσετε υπηρεσίες OpenShift και να τις διαχειριστείτε μέσω του Kubernetes, διατηρώντας τα πάντα σε ομάδες που κλιμακώνονται προς τα πάνω και προς τα κάτω ανάλογα με τις ανάγκες. Ταυτόχρονα, μπορείτε να έχετε πρόσβαση με ασφάλεια σε υπηρεσίες εκτός του περιβάλλοντός σας. Και ναι, επαναλαμβάνουμε για άλλη μια φορά ότι όλα αυτά μπορούν να γίνουν χωρίς να αγγίξετε τον κωδικό σας με κανέναν τρόπο.

Αυτή ήταν η τελευταία ανάρτηση της σειράς στο Ιστιο. Μείνετε συντονισμένοι - υπάρχουν πολλά ενδιαφέροντα πράγματα μπροστά!

Πηγή: www.habr.com

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