Βιβλίο "Kubernetes για DevOps"

Βιβλίο "Kubernetes για DevOps" Γεια σας, κάτοικοι του Khabro! Το Kubernetes είναι ένα από τα βασικά στοιχεία του σύγχρονου οικοσυστήματος νέφους. Αυτή η τεχνολογία παρέχει αξιοπιστία, επεκτασιμότητα και ανθεκτικότητα στην εικονικοποίηση κοντέινερ. Ο John Arundel και ο Justin Domingus μιλούν για το οικοσύστημα Kubernetes και παρουσιάζουν αποδεδειγμένες λύσεις σε καθημερινά προβλήματα. Βήμα προς βήμα, θα δημιουργήσετε τη δική σας εγγενή εφαρμογή στο cloud και θα δημιουργήσετε την υποδομή για να την υποστηρίξετε, θα δημιουργήσετε ένα περιβάλλον ανάπτυξης και μια συνεχή γραμμή ανάπτυξης που θα σας βοηθήσει καθώς εργάζεστε στις επόμενες εφαρμογές σας.

• Ξεκινήστε με κοντέινερ και Kubernetes από τα βασικά: δεν απαιτείται ειδική εμπειρία για να μάθετε το θέμα. • Εκτελέστε τα δικά σας συμπλέγματα ή επιλέξτε μια διαχειριζόμενη υπηρεσία Kubernetes από την Amazon, την Google κ.λπ. • Χρησιμοποιήστε το Kubernetes για να διαχειριστείτε τον κύκλο ζωής του κοντέινερ και την κατανάλωση πόρων. • Βελτιστοποιήστε τα clusters με βάση το κόστος, την απόδοση, την ανθεκτικότητα, την ισχύ και την επεκτασιμότητα. • Μάθετε τα καλύτερα εργαλεία για την ανάπτυξη, τη δοκιμή και την ανάπτυξη των εφαρμογών σας. • Αξιοποιήστε τις τρέχουσες πρακτικές του κλάδου για να εξασφαλίσετε ασφάλεια και έλεγχο. • Εφαρμόστε τις αρχές DevOps σε όλη την επιχείρησή σας, έτσι ώστε οι ομάδες ανάπτυξης να μπορούν να ενεργούν πιο ευέλικτα, γρήγορα και αποτελεσματικά.

Σε ποιον απευθύνεται το βιβλίο;

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

Οι έμπειροι χρήστες του Kubernetes θα βρουν επίσης μεγάλη αξία, με σε βάθος κάλυψη θεμάτων όπως το RBAC, η συνεχής ανάπτυξη, η διαχείριση ευαίσθητων δεδομένων και η παρατηρησιμότητα. Ελπίζουμε ότι οι σελίδες του βιβλίου θα περιέχουν σίγουρα κάτι ενδιαφέρον για εσάς, ανεξάρτητα από τις ικανότητες και την εμπειρία σας.

Σε ποιες ερωτήσεις απαντά το βιβλίο;

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

  • «Με ενδιαφέρει γιατί πρέπει να αφιερώσεις χρόνο σε αυτήν την τεχνολογία. Ποια προβλήματα θα βοηθήσει εμένα και την ομάδα μου να λύσουμε;»
  • «Το Kubernetes φαίνεται ενδιαφέρον, αλλά έχει ένα αρκετά υψηλό εμπόδιο εισόδου. Η προετοιμασία ενός απλού παραδείγματος δεν είναι δύσκολη, αλλά η περαιτέρω διαχείριση και ο εντοπισμός σφαλμάτων είναι αποθαρρυντική. Θα θέλαμε να λάβουμε αξιόπιστες συμβουλές για το πώς οι άνθρωποι διαχειρίζονται τα συμπλέγματα Kubernetes στον πραγματικό κόσμο και ποια προβλήματα είναι πιθανό να αντιμετωπίσουμε».
  • «Οι υποκειμενικές συμβουλές θα ήταν χρήσιμες. Το οικοσύστημα Kubernetes δίνει στις νέες ομάδες πάρα πολλές επιλογές για να διαλέξουν. Όταν υπάρχουν πολλοί τρόποι για να κάνετε το ίδιο πράγμα, πώς ξέρετε ποιος είναι ο καλύτερος; Πώς να κάνετε μια επιλογή;

Και ίσως η πιο σημαντική από όλες τις ερωτήσεις:

  • "Πώς μπορώ να χρησιμοποιήσω το Kubernetes χωρίς να διαταράξω την εταιρεία μου;"

Απόσπασμα. Διαμόρφωση και μυστικά αντικείμενα

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

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

Το Kubernetes παρέχει πολλούς διαφορετικούς τρόπους διαχείρισης της διαμόρφωσης. Αρχικά, μπορείτε να μεταβιβάσετε τιμές στην εφαρμογή μέσω μεταβλητών περιβάλλοντος που καθορίζονται στην προδιαγραφή του περιτυλίγματος pod (δείτε «Μεταβλητές περιβάλλοντος» στη σελίδα 192). Δεύτερον, τα δεδομένα διαμόρφωσης μπορούν να αποθηκευτούν απευθείας στο Kubernetes χρησιμοποιώντας ConfigMap και Secret αντικείμενα.

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

Ενημέρωση κελύφους pod όταν αλλάζει η διαμόρφωση

Φανταστείτε ότι έχετε μια ανάπτυξη στο σύμπλεγμα σας και θέλετε να αλλάξετε κάποιες τιμές στο ConfigMap του. Εάν χρησιμοποιείτε το γράφημα Helm (δείτε «Helm: Package Manager για Kubernetes» στη σελίδα 102), μπορείτε να εντοπίσετε αυτόματα μια αλλαγή διαμόρφωσης και να επαναφορτώσετε τα κελύφη λοβών σας με ένα καθαρό κόλπο. Προσθέστε τον ακόλουθο σχολιασμό στις προδιαγραφές ανάπτυξης:

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

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

Ευαίσθητα δεδομένα στο Kubernetes

Γνωρίζουμε ήδη ότι το αντικείμενο ConfigMap παρέχει έναν ευέλικτο μηχανισμό για την αποθήκευση και την πρόσβαση σε δεδομένα διαμόρφωσης σε ένα σύμπλεγμα. Ωστόσο, οι περισσότερες εφαρμογές έχουν πληροφορίες που είναι ευαίσθητες και εμπιστευτικές, όπως κωδικούς πρόσβασης ή κλειδιά API. Μπορεί επίσης να αποθηκευτεί στο ConfigMap, αλλά αυτή η λύση δεν είναι ιδανική.

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

Για να ξεκινήσετε, ρίξτε μια ματιά στο μανιφέστο Kubernetes για το Secret αντικείμενο (δείτε hello-secret-env/k8s/secret.yaml):

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

Σε αυτό το παράδειγμα, το ιδιωτικό κλειδί του magicWord είναι xyzzy (en.wikipedia.org/wiki/Xyzzy_(υπολογιστική)). Η λέξη xyzzy είναι γενικά πολύ χρήσιμη στον κόσμο των υπολογιστών. Παρόμοια με το ConfigMap, μπορείτε να αποθηκεύσετε πολλά κλειδιά και τιμές σε ένα Secret αντικείμενο. Εδώ, για λόγους απλότητας, χρησιμοποιούμε μόνο ένα ζεύγος κλειδιού-τιμής.

Χρήση μυστικών αντικειμένων ως μεταβλητές περιβάλλοντος

Όπως το ConfigMap, το αντικείμενο Secret μπορεί να διατεθεί στο κοντέινερ ως μεταβλητές περιβάλλοντος ή ως αρχείο στο δίσκο του. Στο παρακάτω παράδειγμα, θα εκχωρήσουμε μια μεταβλητή περιβάλλοντος στην τιμή από το Secret:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

Εκτελέστε την ακόλουθη εντολή στο αποθετήριο επίδειξης για να εφαρμόσετε τις δηλώσεις:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

Όπως και πριν, προωθήστε την τοπική θύρα στην ανάπτυξη για να δείτε το αποτέλεσμα στο πρόγραμμα περιήγησής σας:

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

Όταν ανοίγετε μια διεύθυνση localhost:9999/ θα πρέπει να δείτε τα εξής:

The magic word is "xyzzy"

Εγγραφή μυστικών αντικειμένων σε αρχεία

Σε αυτό το παράδειγμα, θα επισυνάψουμε το Secret αντικείμενο στο κοντέινερ ως αρχείο. Ο κώδικας βρίσκεται στο φάκελο hello-secret-file του αποθετηρίου επίδειξης.

Για να συνδέσουμε το Secret ως αρχείο, θα χρησιμοποιήσουμε την ακόλουθη ανάπτυξη:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-file
          ports:
              - containerPort: 8888
          volumeMounts:
              - name: demo-secret-volume
                mountPath: "/secrets/"
                readOnly: true
   volumes:
      - name: demo-secret-volume
        secret:
           secretName: demo-secret

Όπως στην υποενότητα «Δημιουργία αρχείων διαμόρφωσης από αντικείμενα ConfigMap» στη σελ. 240, δημιουργούμε έναν τόμο (σε αυτήν την περίπτωση demo-secret-volume) και τον τοποθετούμε στο κοντέινερ στην ενότητα volumeMounts της προδιαγραφής. Το πεδίο mountPath είναι /secrets, επομένως το Kubernetes θα δημιουργήσει ένα αρχείο σε αυτόν τον φάκελο για κάθε ζεύγος κλειδιού/τιμής που ορίζεται στο Secret αντικείμενο.

Στο παράδειγμά μας, ορίσαμε μόνο ένα ζεύγος κλειδιού-τιμής που ονομάζεται magicWord, έτσι το μανιφέστο θα δημιουργήσει ένα μόνο αρχείο /secrets/magicWord μόνο για ανάγνωση με ευαίσθητα δεδομένα στο κοντέινερ.

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

The magic word is "xyzzy"

Διαβάζοντας μυστικά αντικείμενα

Στην προηγούμενη ενότητα, χρησιμοποιήσαμε την εντολή kubectl describe για να εμφανίσουμε τα περιεχόμενα ενός ConfigMap. Μπορεί να γίνει το ίδιο με το Secret;

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

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

Για να προβάλετε μια κωδικοποιημένη έκδοση YAML ευαίσθητων δεδομένων, χρησιμοποιήστε την εντολή kubectl get:

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

Τι είναι το eHl6enk=, εντελώς διαφορετικό από την αρχική μας αξία; Αυτό είναι στην πραγματικότητα ένα Secret αντικείμενο, που αντιπροσωπεύεται στην κωδικοποίηση base64. Το Base64 είναι ένα σχήμα για την κωδικοποίηση αυθαίρετων δυαδικών δεδομένων ως συμβολοσειρά χαρακτήρων.

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

Το κείμενο beHl6enk= είναι η βασική 64 κωδικοποιημένη έκδοση της μυστικής λέξης xyzzy. Μπορείτε να το επαληθεύσετε εκτελώντας την εντολή base64 —decode στο τερματικό:

echo "eHl6enk=" | base64 --decode
xyzzy

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

Εάν χρειάζεται να κωδικοποιήσετε το base64 κάποιο κείμενο (για παράδειγμα, για να το βάλετε σε ένα Secret), χρησιμοποιήστε την εντολή base64 χωρίς ορίσματα:

echo xyzzy | base64
eHl6enkK

Πρόσβαση σε μυστικά αντικείμενα

Ποιος μπορεί να διαβάσει και να επεξεργαστεί μυστικά αντικείμενα; Αυτό καθορίζεται από το RBAC, έναν μηχανισμό ελέγχου πρόσβασης (θα το συζητήσουμε λεπτομερώς στην υποενότητα «Εισαγωγή στον έλεγχο πρόσβασης βάσει ρόλου» στη σελίδα 258). Εάν εκτελείτε ένα σύμπλεγμα που δεν έχει RBAC ή δεν είναι ενεργοποιημένο, όλα τα μυστικά σας αντικείμενα είναι διαθέσιμα σε οποιονδήποτε χρήστη και κοντέινερ (θα εξηγήσουμε αργότερα ότι δεν πρέπει να έχετε συμπλέγματα παραγωγής χωρίς RBAC).

Παθητική κρυπτογράφηση δεδομένων

Τι γίνεται με όσους έχουν πρόσβαση στη βάση δεδομένων etcd όπου η Kubernetes αποθηκεύει όλες τις πληροφορίες της; Μπορούν να διαβάσουν ευαίσθητα δεδομένα χωρίς να έχουν άδεια ανάγνωσης μυστικών αντικειμένων μέσω του API;

Από την έκδοση 1.7, το Kubernetes υποστηρίζει παθητική κρυπτογράφηση δεδομένων. Αυτό σημαίνει ότι ευαίσθητες πληροφορίες μέσα στο etcd αποθηκεύονται κρυπτογραφημένες στο δίσκο και δεν μπορούν να διαβαστούν ακόμη και από όσους έχουν άμεση πρόσβαση στη βάση δεδομένων. Για να το αποκρυπτογραφήσετε, χρειάζεστε ένα κλειδί που έχει μόνο ο διακομιστής Kubernetes API. Σε ένα σωστά διαμορφωμένο σύμπλεγμα, η παθητική κρυπτογράφηση θα πρέπει να είναι ενεργοποιημένη.

Μπορείτε να ελέγξετε εάν η παθητική κρυπτογράφηση λειτουργεί στο σύμπλεγμα σας με αυτόν τον τρόπο:

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

Εάν δεν βλέπετε τη σημαία experimental-encryption-provider-config, η παθητική κρυπτογράφηση δεν είναι ενεργοποιημένη. Όταν χρησιμοποιείτε το Google Kubernetes Engine ή άλλες υπηρεσίες διαχείρισης Kubernetes, τα δεδομένα σας κρυπτογραφούνται χρησιμοποιώντας διαφορετικό μηχανισμό, επομένως η σημαία δεν θα υπάρχει. Επικοινωνήστε με τον προμηθευτή σας Kubernetes για να δείτε εάν το περιεχόμενο etcd είναι κρυπτογραφημένο.

Αποθήκευση εμπιστευτικών δεδομένων

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

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

Μυστικές στρατηγικές διαχείρισης αντικειμένων

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

Δεν πρέπει ποτέ να τοποθετείτε εμπιστευτικές πληροφορίες σε αρχεία που βρίσκονται σε έλεγχο έκδοσης. Πώς μπορείτε να διαχειριστείτε και να αποθηκεύσετε με ασφάλεια αυτές τις πληροφορίες πριν τις εφαρμόσετε στο σύμπλεγμα Kubernetes;

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

  • Πού πρέπει να αποθηκεύονται τα ευαίσθητα δεδομένα ώστε να είναι ιδιαίτερα προσβάσιμα;
  • Πώς να κάνετε τα ευαίσθητα δεδομένα προσβάσιμα στις ενεργές εφαρμογές σας;
  • Τι πρέπει να συμβεί με τις εφαρμογές σας όταν αντικαθιστάτε ή επεξεργάζεστε ευαίσθητα δεδομένα;

Σχετικά με τους συγγραφείς

Τζον Άρουντελ είναι σύμβουλος με 30ετή εμπειρία στον κλάδο των υπολογιστών. Έχει γράψει πολλά βιβλία και συνεργάζεται με πολλές εταιρείες από διαφορετικές χώρες, συμβουλεύοντάς τους για υποδομές cloud και Kubernetes. Στον ελεύθερο χρόνο του, του αρέσει το σερφ, είναι καλός σκοπευτής πιστολιού και παίζει πιάνο ερασιτεχνικά. Ζει σε ένα παραμυθένιο εξοχικό σπίτι στην Κορνουάλη της Αγγλίας.

Τζάστιν Ντομίνγκους — μηχανικός διαχείρισης συστημάτων που εργάζεται σε περιβάλλον DevOps με τεχνολογίες Kubernetes και cloud. Του αρέσει να περνά χρόνο σε εξωτερικούς χώρους, να πίνει καφέ, να κάνει καβούρια και να κάθεται στον υπολογιστή. Ζει στο Σιάτλ της Ουάσιγκτον, με μια υπέροχη γάτα και μια ακόμα πιο υπέροχη σύζυγο και καλύτερη φίλη, την Αντριέν.

» Περισσότερες λεπτομέρειες για το βιβλίο μπορείτε να βρείτε στη διεύθυνση ιστοσελίδα του εκδότη
» πίνακας περιεχομένων
» Απόσπασμα

Για Khabrozhiteley 25% έκπτωση με χρήση κουπονιού - Kubernetes

Με την πληρωμή της έντυπης έκδοσης του βιβλίου, θα αποσταλεί ηλεκτρονικό βιβλίο με e-mail.

Πηγή: www.habr.com

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