Αυτόματη δημιουργία μυστικών στο Helm

Αυτόματη δημιουργία μυστικών στο Helm

Ομάδα Kubernetes aaS από το Mail.ru μετέφρασε ένα σύντομο σημείωμα σχετικά με τον τρόπο αυτόματης δημιουργίας μυστικών Helm κατά την ενημέρωση. Ακολουθεί κείμενο από τον συγγραφέα του άρθρου - τεχνικό διευθυντή της Intoware, εταιρείας που αναπτύσσει λύσεις SaaS.

Τα δοχεία είναι δροσερά. Στην αρχή ήμουν anti-container (ντρέπομαι να το παραδεχτώ), αλλά τώρα υποστηρίζω πλήρως τη χρήση αυτής της τεχνολογίας. Εάν διαβάζετε αυτό, ελπίζουμε ότι έχετε πλοηγηθεί με επιτυχία στις θάλασσες του Docker, έχετε συνειδητοποιήσει τα οφέλη του Kubernetes και έχετε κάνει τη ζωή σας πολύ πιο εύκολη με το Helm.

Ωστόσο, ορισμένα πράγματα είναι σαφώς πιο δύσκολα από όσο πρέπει.

Πώς να δημιουργήσετε αυτόματα μυστικά κατά την ενημέρωση;

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

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

Κάνοντας μυστικά

Συνήθως, για να δημιουργήσετε ένα μυστικό στο Helm πρέπει να:

  • περιγράψτε το μυστικό στο αρχείο τιμών.
  • να το επαναπροσδιορίσετε κατά την ανάπτυξη.
  • Ανατρέξτε σε αυτό μέσα στην ανάπτυξη/ποτ.
  • ... κέρδος!

Συνήθως μοιάζει κάπως έτσι:

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ .Values.MyApiKeySecret | quote }}

Ένα απλό μυστικό Kubernetes που χρησιμοποιεί τιμές από values.yml

Αλλά ας πούμε ότι δεν θέλετε να προσδιορίσετε το μυστικό σας στο αρχείο τιμών.

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

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

Άγκιστρα

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

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

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

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

Λειτουργίες

Οι λειτουργίες Helm σάς επιτρέπουν να προσθέσετε διάφορα στοιχεία δέσμης ενεργειών στα σενάρια ανάπτυξης.

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it

Αυτό το παράδειγμα δείχνει ότι η τιμή του μυστικού apiKey θα είναι το νέο UUID που δημιουργείται κατά την εγκατάσταση.

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

Λειτουργία αναζήτησης

Προστέθηκε στο Helm 3.1 Λειτουργία αναζήτησης, το οποίο σας επιτρέπει να ζητήσετε μια υπάρχουσα ανάπτυξη και:

  • ελέγξτε την ύπαρξη πόρων·
  • επιστρέψτε την τιμή ενός υπάρχοντος πόρου για μελλοντική χρήση.

Χρησιμοποιώντας και τις δύο αυτές δυνατότητες, μπορούμε να δημιουργήσουμε ένα μοναδικό μυστικό που δημιουργείται δυναμικά!

# 1. Запросить существование секрета и вернуть в переменной $secret
{{- $secret := (lookup "v1" "Secret" .Release.Namespace "some-awesome-secret" -}}
apiVersion: v1
kind: Secret
metadata:
  name: some-awesome-secret
type: Opaque

# 2. Если секрет существует, взять его значение как apiKey (секрет использует кодирование Base64, так что используйте ключ "data")
{{ if $secret -}}
data:
  apiKey: {{ $secret.data.apiKey }}

# 3. Если секрет не существует — создать его (в этот раз используйте "stringData", так как будет обычное значение)!
{{ else -}}
stringData:
  apiKey: {{ uuidv4 | quote }}
{{ end }}

Κάθε φορά που εφαρμόζεται μια νέα ενημέρωση στον διακομιστή, το Helm είτε θα δημιουργήσει μια νέα μυστική τιμή (αν δεν υπάρχει ακόμα μυστικό) είτε θα επαναχρησιμοποιήσει την υπάρχουσα τιμή.

Καλή τύχη!

Τι άλλο να διαβάσετε για το θέμα:

  1. Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes και πώς να τα χρησιμοποιήσετε αποτελεσματικά.
  2. Kubernetes στο πνεύμα της πειρατείας με ένα πρότυπο για υλοποίηση.
  3. Το κανάλι μας Around Kubernetes στο Telegram.

Πηγή: www.habr.com

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