Επεξεργάζεστε τη ρύθμιση του WireGuard μέσα σε ένα container σε λειτουργία, δουλεύει, και η επόμενη ενημέρωση του image τη σβήνει. Τίποτα δεν ήταν λάθος ρυθμισμένο. Το αρχείο ζούσε στο εγγράψιμο στρώμα του container, που υπάρχει μόνο για αυτό το στιγμιότυπο container. Η σύγκριση που έχει σημασία δεν είναι ποιο εργαλείο να χρησιμοποιήσετε, αλλά ποιες εισόδους δηλώνει η ανάπτυξή σας. Ό,τι επεξεργαστήκατε με το χέρι είναι μια είσοδος που η ανάπτυξη δεν γνωρίζει.

Δύο είδη κατάστασης, το ένα είναι αναλώσιμο

Ένα container έχει ένα εγγράψιμο στρώμα για αλλαγές που γίνονται κατά τη λειτουργία, και αυτό το στρώμα απορρίπτεται όταν το container αντικαθίσταται. Δεν είναι αποθήκη ρύθμισης και δεν είναι αντίγραφο ασφαλείας. Το image μαζί με τις δηλωμένες εισόδους είναι ο πλήρης ορισμός του τι εκτελείται.

Ρωτήστε ποια από τα αρχεία VPN σας είναι δηλωμένες είσοδοι και ποια είναι ατυχήματα:

docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpn

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

Bind mount, επώνυμος volume ή secret: τι προστατεύει το καθένα

Και τα τρία μπορούν να κρατήσουν ένα προφίλ VPN, και διαφέρουν στο ποιος μπορεί να το διαβάσει και τι συμβαίνει στην αντικατάσταση.

MechanismSurvives recreationWho can read it
Writable layerNoAnyone with container access, until it is gone
Bind mountYes, while the host path existsWhatever the host permissions allow
Named volumeYes, until the volume is removedManaged by the runtime
SecretYes, as a declared inputThe container process, by design

Ένα bind mount αντιστοιχίζει μια διαδρομή του host, οπότε το αρχείο είναι τόσο προστατευμένο όσο είναι αυτή η διαδρομή και τόσο ορατό όσο επιτρέπουν τα δικαιώματα του host. Ένας επώνυμος volume διαχειρίζεται από το runtime και επιβιώνει από την αφαίρεση του container, κάτι που τον κάνει την ασφαλέστερη προεπιλογή για κατάσταση που ανήκει στην ανάπτυξη. Ένας μηχανισμός secret είναι για υλικό που δεν θέλετε σε ένα image ή σε μια μεταβλητή περιβάλλοντος.

Μην αντιμετωπίζετε κάθε μεταβλητή περιβάλλοντος και κάθε αρχείο host ως ισοδύναμη προστασία, γιατί δεν είναι.

Η επεξεργασία μέσα στο container είναι η παγίδα

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

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

Αυτή η διεύρυνση είναι το πώς μια ευκολία μέσα στο container γίνεται έκθεση του host.

Αναδημιουργήστε σκόπιμα και μετά επαληθεύστε τέσσερα πράγματα

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

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

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

Κρατήστε αντίγραφο ανάκτησης έξω από το container

Κρατήστε ένα αντίγραφο ανάκτησης που ζει ανεξάρτητα από το container, και δοκιμάστε την επαναφορά του μέσω της τεκμηριωμένης διαδικασίας. Ένα αδοκίμαστο αντίγραφο ασφαλείας προφίλ VPN είναι μια ελπίδα, ειδικά όταν η διαδρομή επαναφοράς περιλαμβάνει δικαιώματα που χρειάζεται η διεργασία του container.

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

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

Σχετικά άρθρα