Clustering¶
Σημείωση
Αυτή η λειτουργία είναι επί του παρόντος μια τεχνική προεπισκόπηση με τους ακόλουθους προσωρινούς περιορισμούς:
Εάν μια συστάδα χαθεί (η απαρτία έχει χαθεί), ο μόνος τρόπος ανάκτησης είναι η επαναφορά + επαναφορά από το εργοστάσιο. Φροντίστε να δημιουργείτε συχνά αντίγραφα ασφαλείας. Οι μελλοντικές εκδόσεις θα περιλαμβάνουν μέσα ανάκτησης από δεδομένα σε δίσκο.
Η ενεργή/παθητική ρύθμιση για την υποστήριξη συστάδων δύο κόμβων, είτε με τη χρήση του etcd Learner είτε με το Mirror, δεν είναι ακόμη διαθέσιμη.
Η ώρα του συστήματος μεταξύ των κόμβων πρέπει να συγχρονίζεται προς το παρόν χειροκίνητα. Μια μελλοντική έκδοση θα περιλαμβάνει αυτόματο συγχρονισμό του ρολογιού.
Το NetHSM 4.0 και μετά υποστηρίζει ομαδοποίηση για τον άμεσο συγχρονισμό δεδομένων μεταξύ πολλών NetHSM. Αυτό υποστηρίζει υψηλή συχνότητα παραγωγής κλειδιών, πραγματοποιεί υψηλή διαθεσιμότητα και εξισορρόπηση φορτίου. Μια συστάδα NetHSM βασίζεται στο etcd το οποίο χρησιμοποιεί τον αλγόριθμο συναίνεσης Raft για ισχυρή συνέπεια. Αυτό εξασφαλίζει ότι τα δεδομένα (π.χ. κλειδιά) είναι σωστά σε όλα τα NetHSM ανά πάσα στιγμή.
Πριν από τη δημιουργία ενός συμπλέγματος NetHSM εξοικειωθείτε με αυτή την τεχνολογία και τους περιορισμούς της για να αποφύγετε τυχαίες διακοπές και απώλεια δεδομένων. Εκτός από αυτό το έγγραφο, μπορείτε να ανατρέξετε και στην τεκμηρίωση του etcd.
Operational Redundancy¶
Θα ονομάζουμε «κόμβο» ένα NetHSM που αναμένεται να είναι μέρος μιας συστάδας. Μια συστάδα κόμβων N θα συνεχίσει να λειτουργεί εφόσον τουλάχιστον οι κόμβοι (N/2)+1 είναι υγιείς και προσβάσιμοι. Αυτή η ελάχιστη ποσότητα υγιών, προσβάσιμων κόμβων ονομάζεται απαρτία.
Αυτό συνεπάγεται τα ακόλουθα σενάρια.
Ένας κόμβος πέφτει και η απαρτία εξακολουθεί να επιτυγχάνεται¶
Σε μια συστάδα 3 κόμβων, εάν ένας κόμβος αποτύχει (καταρρεύσει ή γίνει μη προσβάσιμος λόγω συνθηκών δικτύου), οι άλλοι δύο κόμβοι θα συνεχίσουν να λειτουργούν και να εξυπηρετούν τις αιτήσεις.
Αν ο κόμβος που απέτυχε είναι ακόμα υγιής (π.χ. ήταν απλώς ένα πρόβλημα δικτύου), θα είναι μη λειτουργικός όσο είναι απομονωμένος (ούτε καν μόνο για ανάγνωση).
Ωστόσο, εάν ο κόμβος ανακάμψει, θα επανασυγχρονιστεί με τον καθαρό τρόπο με το υπόλοιπο σύμπλεγμα και θα γίνει ξανά λειτουργικός, χωρίς να χαθούν δεδομένα.
Εάν δεν ανακάμψει ποτέ, πρέπει να αφαιρεθεί από τη συστάδα (βλ. επόμενη ενότητα), να γίνει επαναφορά εργοστασιακών ρυθμίσεων και να ξαναρχίσει η διαδικασία σύνδεσης από την αρχή.
Συμβαίνει μια κατάτμηση δικτύου και η απαρτία εξακολουθεί να επιτυγχάνεται¶
Αυτό είναι απλώς μια γενίκευση του προηγούμενου σεναρίου. Σε μια συστάδα 5 κόμβων όπου π.χ. 3 κόμβοι βρίσκονται σε μια φυσική τοποθεσία Α και 2 κόμβοι σε μια άλλη τοποθεσία Β, ένα πρόβλημα δικτύου που απομονώνει τα Α και Β θα σήμαινε τα εξής:
Οι 3 κόμβοι στη θέση Α πληρούν την απαρτία (3 σε αυτή την περίπτωση), οπότε συνεχίζουν να λειτουργούν.
Οι 2 κόμβοι στη θέση Β είναι δεν πληρούν την απαρτία (εξακολουθούν να είναι 3), οπότε θα σταματήσουν να λειτουργούν (ακόμη και μόνο για ανάγνωση).
Εάν το πρόβλημα του δικτύου επιλυθεί, οι 2 κόμβοι θα επανενωθούν με καθαρότητα με τους άλλους 3.
Η απαρτία χάνεται οριστικά¶
Μια αποτυχία που προκαλεί απώλεια απαρτίας σε όλα τα υποσύνολα της συστάδας θα καταστήσει τη συστάδα και τα δεδομένα της εντελώς χαμένα, εκτός εάν επιλυθεί η αποτυχία. Σε αυτή την περίπτωση, οι κόμβοι πρέπει να επανέλθουν εργοστασιακά και να αποκατασταθεί ένα αντίγραφο ασφαλείας.
Αυτό μπορεί να συμβεί, για παράδειγμα, εάν ένας κόμβος αποτύχει σε μια συστάδα 2 κόμβων (όπου η απαρτία είναι 2). Σε αυτή την περίπτωση, ο αποτυχημένος κόμβος δεν μπορεί να αφαιρεθεί καθαρά από τη συστάδα εκ των υστέρων, επειδή ο εναπομείνας υγιής κόμβος είναι ήδη μη λειτουργικός, αφού έχει χάσει την απαρτία.
Ως εκ τούτου, συνιστάται να έχετε πάντα έναν περιττό αριθμό κόμβων σε μια συστάδα και να δημιουργείτε συχνά αντίγραφα ασφαλείας.
Για να γίνω σαφής, το προσωρινά απώλεια της απαρτίας (για παράδειγμα, αν επανεκκινείτε όλους τους κόμβους μιας συστάδας μαζί ή μια προσωρινή βλάβη του δικτύου απομονώνει τους κόμβους) δεν αποτελεί πρόβλημα: μόλις επανασυνδεθούν αρκετοί κόμβοι (χωρίς να χρειαστεί να επανασυνδεθούν χειροκίνητα) για να επιτευχθεί απαρτία, η συστάδα θα συνεχίσει την κανονική της λειτουργία. Μόνο μόνιμες αποτυχίες, όπως κατατμήσεις δικτύου, λανθασμένες ρυθμίσεις δικτύου, προβλήματα αυθεντικοποίησης ή βλάβες υλικού, θα απαιτήσουν χειροκίνητη ενέργεια.
Για περισσότερες πληροφορίες, ανατρέξτε στο ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ του etcd.
Συστάδα 2 κόμβων¶
Δεν υποστηρίζεται ακόμα η ενεργή/παθητική συστάδα δύο κόμβων και θα προστεθεί σε μελλοντική έκδοση. Συνιστούμε την εισαγωγή ενός 3ου κόμβου, είτε ενός 3ου NetHSM είτε ενός «μάρτυρα» etcd, ο οποίος θα μπορούσε να λειτουργεί σε οποιονδήποτε κεντρικό υπολογιστή. Δείτε την επόμενη ενότητα «Μάρτυρας».
Μάρτυρας¶
Η φύση της συσταδοποίησης με etcd την καθιστά πιο αξιόπιστη όσο περισσότεροι κόμβοι υπάρχουν στη συστάδα. Όπως εξηγείται στην ενότητα Λειτουργικός πλεονασμός, οι συστάδες θα πρέπει ιδανικά να έχουν τουλάχιστον 3 κόμβους για να έχουν περιθώριο αποτυχίας, καθώς μια συστάδα 2 κόμβων θα αποτύχει πλήρως αν αποτύχει μόνο ο ένας.
Ωστόσο, ο σχεδιασμός της λειτουργίας είναι τέτοιος ώστε να μην χρειάζεται να προσθέσετε μια πλήρη, πραγματική συσκευή NetHSM στη συστάδα σας για να επιτύχετε έναν σταθερό αριθμό κόμβων. Αντ” αυτού, μπορείτε να αναπτύξετε και να προσθέσετε έναν κόμβο «μάρτυρα» μόνοι σας. Ένας τέτοιος κόμβος είναι απλώς μια περίπτωση του etcd που εκτελείται στο μηχάνημα της επιλογής σας (ή σε ένα container) και είναι συνδεδεμένο με τη συστάδα. Θα αναγνωρίζεται ως κανονικός κόμβος από τις πραγματικές συσκευές της συστάδας και θα λαμβάνει όλα τα δεδομένα και τις ενημερώσεις από τις συσκευές (αλλά φυσικά δεν θα μπορείτε να εκτελέσετε καμία λειτουργία HSM με αυτόν - αποθηκεύει μόνο δεδομένα).
Security Considerations¶
Ο κόμβος μάρτυρας (ή οποιοσδήποτε έχει πρόσβαση σε αυτόν) έχει άμεση πρόσβαση στο storage backend όλων των κόμβων της συστάδας (π.χ. μπορείτε να αποθηκεύσετε όλες τις καταχωρήσεις και τις αντίστοιχες τιμές με το etcdctl get "/" "0").
Ωστόσο, με εξαίρεση την έκδοση παραμέτρων (/config/version, η οποία θα πρέπει πάντα να είναι «1»), όλες οι τιμές είναι κρυπτογραφημένες (είτε με ένα κλειδί συσκευής για τις τιμές που αφορούν συγκεκριμένους κόμβους είτε με τα κλειδιά τομέα για τις υπόλοιπες), εξασφαλίζοντας την εμπιστευτικότητα των ευαίσθητων δεδομένων.
Σημειώστε ωστόσο ότι ένας κακόβουλος κόμβος μπορεί:
να γράψετε σκουπίδια ως τιμή για οποιαδήποτε καταχώρηση στο χώρο αποθήκευσης, γεγονός που θα προκαλέσει την αποτυχία αποκρυπτογράφησης από τους κόμβους (γεγονός που μπορεί να οδηγήσει σε συντριβές για ορισμένες καταχωρήσεις του συστήματος).
ονόματα καταχωρήσεων λίστας, όπως χρήστες, χώροι ονομάτων και κλειδιά, τα οποία μπορεί να θεωρείτε ευαίσθητα.
Creating a Cluster¶
Κάθε συστάδα θα ξεκινάει αρχικά από έναν κόμβο. Οι νέοι κόμβοι θα εντάσσονται στη συστάδα ένας προς έναν.
Preparing Nodes¶
Η δικτυακή κυκλοφορία μεταξύ των κόμβων κρυπτογραφείται και πιστοποιείται με τη χρήση του πιστοποιητικού TLS.
Όλοι οι κόμβοι που αναμένεται να είναι μέρος της ίδιας συστάδας πρέπει πρώτα να εγκαταστήσουν μια κοινή Αρχή Πιστοποιητικών (CA) που θα τους επιτρέψει να επαληθεύουν ότι οι άλλοι κόμβοι είναι νόμιμοι.
Στη συνέχεια, υποθέτουμε ότι όλοι οι κόμβοι είναι πρόσφατα εφοδιασμένοι και λειτουργικοί.
Networking¶
Nodes must first be reconfigured with their expected final network configuration using the /config/network endpoint (refer to the API documentation).
Δημιουργία και εγκατάσταση μιας CA¶
Οι χρήστες θα πρέπει να δημιουργήσουν μια CA με τα δικά τους μέσα και σύμφωνα με τους δικούς τους λειτουργικούς περιορισμούς, διασφαλίζοντας ότι επιτρέπει τουλάχιστον τη χρήση του κλειδιού keyCertSign.
Για παράδειγμα, μια ελάχιστη CA μπορεί να δημιουργηθεί με το openssl:
$ openssl genrsa -out CA.key 2048 # create a key
$ openssl req -x509 -new -nodes -key CA.key -sha256 -days 1825 -out CA.pem -addext keyUsage=critical,keyCertSign
Αυτή η CA πρέπει τώρα να εγκατασταθεί σε κάθε κόμβο.
To do this, first generate a Certificate Signing Request (CSR) from the node with the /config/tls/csr.pem endpoint (refer to the API documentation).
Σημείωση
Για την ορθή αυθεντικοποίηση των κόμβων, το backend ομαδοποίησης (etcd) αναμένει ότι κάθε κόμβος διαθέτει πιστοποιητικό με σωστά συμπληρωμένο το πεδίο Subject Alt Names (SAN). Ειδικότερα, οι κόμβοι που αναμένεται να προσεγγίζονται μόνο μέσω της IP τους πρέπει να έχουν ένα σωστό IP SAN στο πιστοποιητικό τους. Τα IP SAN μπορούν να ζητηθούν για το CSR με το πρόθεμα «IP:» στα ονόματα, όπως στο openssl:
"subjectAltNames": [ "normalname.org", "IP:192.168.1.1" ]
Με δεδομένο το CSR που αποκτήθηκε (ας το ονομάσουμε nethsm.csr), μπορούμε στη συνέχεια να δημιουργήσουμε ένα πιστοποιητικό για αυτό, έτοιμο για εγκατάσταση. Για παράδειγμα με το openssl:
$ openssl x509 -req -days 1825 -in nethsm.csr -CA CA.pem -copy_extensions copy \
-CAkey CA.key -out new_cert.pem -set_serial 01 -sha256
Then install the obtained new_cert.pem with the /config/tls/cert.pem endpoint (refer to the API documentation).
Τέλος, η CA (CA.pem) μπορεί τώρα να εγκατασταθεί με το τελικό σημείο /config/tls/cluster-ca.pem (ανατρέξτε στην τεκμηρίωση API). Αυτό είναι εφικτό μόνο όταν το εγκατεστημένο πιστοποιητικό TLS υπογραφεί από αυτήν. Διαφορετικά, η λειτουργία θα απορριφθεί.
Σημείωση
Αυτή η διαδικασία πρέπει να επαναληφθεί για κάθε κόμβο.
Συγχρονισμός ρολογιού¶
Βεβαιωθείτε ότι σε κάθε κόμβο έχει προβλεφθεί ακριβής ώρα συστήματος. Εάν όχι, ρυθμίστε τα ρολόγια τους με το τελικό σημείο /config/time.
Adding a New Node¶
Η προσθήκη ενός κόμβου σε μια συστάδα γίνεται σε δύο βήματα:
να καταχωρήσετε την προσθήκη στη συστάδα (μέσω οποιουδήποτε μέλους της)
πείτε στον νέο κόμβο να ενταχθεί
Configure a Backup Passphrase¶
Πρώτα βεβαιωθείτε ότι έχει ρυθμιστεί μια εφεδρική συνθηματική φράση στον κόμβο που θα χρησιμοποιηθεί για την εγγραφή ενός νέου εντασσόμενου (ανατρέξτε στην τεκμηρίωση API του σημείου τερματισμού /config/backup-passphrase).
Εγγραφή νέου κόμβου¶
Προειδοποίηση
Η εγγραφή ενός κόμβου εισάγει αμέσως έναν νέο κόμβο στη συστάδα, τροποποιώντας το κατώφλι απαρτίας, ακόμη και αν ο κόμβος δεν έχει ενταχθεί ακόμη. Αυτό μπορεί να καταστήσει τους υπάρχοντες κόμβους μη λειτουργικούς μέχρι να ενταχθεί ο νέος κόμβος. Ανατρέξτε στην τεκμηρίωση API και στην ενότητα Operational Redundancy του παρόντος εγγράφου.
Να έχετε στη διάθεσή σας την IP του κόμβου που θα συνδεθεί. Η πλήρης διεύθυνση URL (που ονομάζεται επίσης peer URL στην ορολογία etcd) αυτού του κόμβου θα είναι https://<IP_of_node>:2380 (π.χ. https://192.168.1.1:2380). Η θύρα πρέπει να είναι 2380, οπότε βεβαιωθείτε ότι οποιοδήποτε τείχος προστασίας μεταξύ των κόμβων επιτρέπει την κυκλοφορία TCP σε αυτή τη θύρα.
Μπορείτε να επιβεβαιώσετε ότι η διεύθυνση URL είναι σωστή καλώντας το GET /cluster/members στον κόμβο που αναμένεται να ενταχθεί. Αυτό θα πρέπει να εμφανίζει μόνο ένα μέλος: τον εαυτό του.
Στη συνέχεια, καταχωρίστε την αναμενόμενη διεύθυνση URL σε οποιονδήποτε υπάρχοντα κόμβο της συστάδας (αν δεν έχετε ακόμη συστάδα, κάντε το στον NetHSM που θα χρησιμεύσει ως ο αρχικός κόμβος της συστάδας). Αυτό γίνεται χρησιμοποιώντας το τελικό σημείο POST /cluster/members (ανατρέξτε στην τεκμηρίωση API), περνώντας του ένα σώμα JSON που περιέχει τη διεύθυνση URL.
Εάν είναι επιτυχής, επιστρέφει ένα σώμα JSON της φόρμας:
{
"members": [
{
"name": "",
"urls": [
"https://172.22.1.3:2380"
]
},
{
"name": "9ZVNM2MNWP",
"urls": [
"https://172.22.1.2:2380"
]
}
],
"joinerKit": "eyJiYWNrdXBfc2FsdCI6IkVlUzNPOEhHSEc5NnlNRktrdG1NZmc9PSIsInVubG9ja19zYWx0IjoiU3phMkEvYW13NlhxVWsrdHZMMmFubm5SZFlWd2ZQUjdpZ3IxK1RSdTdVaU14dmh3d0x2NWIvYVNkY2c9IiwibG9ja2VkX2RvbWFpbl9rZXkiOiIyMnNGVlkyelhQUVZ6S1pQenI3MmkwTk1WM3lmQ2k5dGwzeDhUbGtuOXM0WjFOd3JoZkRQTFZIVHp1WVl0YkQxaVZCMlovV3JHUHJlMXlwN0t4U0w4WkxjY2ZUTmUzcFg0WXE4YXNlY0wwREhXNGlIaXlPMlZnPT0ifQ=="
}
το οποίο περιέχει πληροφορίες που είναι απαραίτητες για την ένταξη του νέου κόμβου στη συστάδα. Συγκεκριμένα, παραθέτει όλα τα μέλη της συστάδας (όπου το μέλος με κενό όνομα είναι ο νέος εντασσόμενος). Περιέχει επίσης το κλειδί του τομέα που κρυπτογραφείται τόσο από τη φράση ξεκλειδώματος όσο και από την εφεδρική φράση πρόσβασης - επομένως πρέπει να έχει ρυθμιστεί προηγουμένως μια εφεδρική φράση πρόσβασης.
Κρατήστε αυτή την απάντηση για το επόμενο βήμα.
Πραγματική συμμετοχή στο Cluster¶
Πάρτε την απόκριση από το τελευταίο βήμα και προσθέστε σε αυτήν ένα πεδίο backupPassphrase που περιέχει την εφεδρική συνθηματική φράση του κόμβου στον οποίο έχει εγγραφεί ο νέος εντασσόμενος και μεταβιβάστε αυτά τα δεδομένα σε μια κλήση προς POST /cluster/join (ανατρέξτε στην τεκμηρίωση του API ` <https://nethsmdemo.nitrokey.com/api_docs/index.html>` __) στον κόμβο που αναμένεται να ενταχθεί.
Υποθέτοντας ότι τόσο η συστάδα όσο και ο κόμβος μπορούν να προσεγγίσουν ο ένας τον άλλον, αυτό θα πραγματοποιήσει την πραγματική ένωση, διαγράφοντας τα δεδομένα του νέου συμμετέχοντα για να συγχρονίσει την κατάστασή του με εκείνη της συστάδας.
Ανάλογα με τις συνθήκες δικτύωσης και συστάδας, η λειτουργία αυτή μπορεί να διαρκέσει μερικές δεκάδες δευτερόλεπτα. Εάν αυτή η λειτουργία αποτύχει αμέσως (π.χ. η συστάδα δεν ήταν προσβάσιμη ή ο έλεγχος ταυτότητας απέτυχε), η κατάσταση αυτού του κόμβου δεν θα διαγραφεί και η σύνδεση θα επαναληφθεί. Ωστόσο, μόλις μια πρώτη σύνδεση είναι επιτυχής, η λειτουργία αυτή είναι οριστική και μπορεί να αναστραφεί μόνο με επαναφορά εργοστασιακών ρυθμίσεων.
Εάν αυτή η σύνδεση είναι επιτυχής, ο κόμβος θα βρεθεί σε κατάσταση Locked και θα πρέπει να ξεκλειδωθεί με τη φράση πρόσβασης ξεκλειδώματος του κόμβου που χρησιμοποιήθηκε για την εγγραφή. Στη συνέχεια, η συνθηματική φράση ξεκλειδώματος μπορεί να αλλάξει (οι συνθηματικές φράσεις ξεκλειδώματος παραμένουν ειδικές για κάθε κόμβο και δεν διαμοιράζονται μεταξύ των κόμβων).
Σημείωση
Ακόμα και μετά την επιτυχή σύνδεση, αν η βάση δεδομένων της συστάδας είναι μεγάλη ή αν η συστάδα είναι απασχολημένη, μπορεί να χρειαστεί κάποιος χρόνος για να συγχρονίσει πλήρως την κατάστασή του ο νέος εντασσόμενος. Κατά τη διάρκεια αυτού του χρόνου, όλοι οι κόμβοι (συμπεριλαμβανομένου ιδίως του νέου εντασσόμενου) ενδέχεται να μην ανταποκρίνονται ή να μην ανταποκρίνονται. Ειδικά ο νέος εντασσόμενος μπορεί αρχικά να επιστρέφει σφάλματα όταν προσπαθεί να τον ξεκλειδώσει, για παράδειγμα. Σε αυτή την περίπτωση, δώστε λίγο χρόνο και δοκιμάστε ξανά.
Adding a Witness Node¶
Prepare a Witness¶
Θα χρειαστείτε ένα περιβάλλον με διαθέσιμο το etcd v3.6, με διεύθυνση IPv4 (τουλάχιστον) προσβάσιμη από τα άλλα μέλη της συστάδας σας. Πρέπει να επιτρέπεται η κυκλοφορία TCP από και προς τη θύρα 2380.
Δημιουργήστε έναν άδειο κατάλογο όπου το etcd θα αποθηκεύει τα δεδομένα του, και γράψτε τη διαδρομή του (θα χρησιμοποιήσουμε το /var/etcd/data). Βεβαιωθείτε ότι ο χρήστης που θα εκκινήσει τη διαδικασία έχει δικαίωμα ανάγνωσης και εγγραφής στον κατάλογο.
Μεταφέρετε στο μηχάνημα το πιστοποιητικό CA που χρησιμοποιείται για τον έλεγχο ταυτότητας των κόμβων της συστάδας. Θα πρέπει να έχετε δημιουργήσει ένα στην ενότητα Δημιουργία και εγκατάσταση μιας CA. Θα το αποθηκεύσουμε στο /var/etcd/CA.pem.
Στη συνέχεια, θα πρέπει να δημιουργήσετε ένα πιστοποιητικό για τον μάρτυρα και να το υπογράψετε με την CA, ώστε να μπορεί να επικοινωνεί με τους ομότιμούς του. Αυτό μπορεί να γίνει για παράδειγμα μέσω του openssl:
# Create a key
$ openssl genrsa -out witness.key 2048
# Create a CSR with a SAN that corresponds to the witness's IP or hostname
$ openssl req -new -sha256 -key own.key -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=witness" \
-addext "subjectAltName=IP:172.22.1.3" --out witness.csr
# Sign it
$ openssl x509 -req -days 1825 -in witness.csr -CA CA.pem -copy_extensions copy \
-CAkey CA.key -out witness.pem -set_serial 01 -sha256
Αποθηκεύστε τα προκύπτοντα witness.key και witness.pem στο /var/etcd επίσης.
Register Witness to Cluster¶
Ακολουθήστε τις συνήθεις οδηγίες από την ενότητα Εγγραφή νέου κόμβου για να δηλώσετε στην υπάρχουσα συστάδα την προσθήκη ενός νέου μέλους με τη συγκεκριμένη διεύθυνση URL(s).
Καταγράψτε την απάντηση από το σύμπλεγμα: θα πρέπει να περιέχει τη λίστα των μελών του συμπλέγματος και ένα κιτ σύνδεσης (δεν θα χρειαστείτε αυτό το μέρος).
Configure etcd¶
Σε αντίθεση με τα NetHSM που επιλέγουν αυτόματα ένα όνομα κόμβου για τον εαυτό τους (χρησιμοποιώντας το αναγνωριστικό συσκευής), πρέπει να επιλέξετε ένα όνομα για κάθε μάρτυρα που προσθέτετε, φροντίζοντας τα ονόματα να είναι μοναδικά. Θα χρησιμοποιήσουμε το «witness1» στα ακόλουθα παραδείγματα.
Με την απάντηση του NetHSM για την εγγραφή του μάρτυρα, ετοιμάστε μεταβλητές του εντύπου:
export ETCD_NAME="witness1"
export ETCD_DATA_DIR="/var/etcd/data"
export ETCD_INITIAL_CLUSTER="peer1=url1,peer1=url2,peer2=url1,peer2=url2,..."
export ETCD_INITIAL_ADVERTISE_PEER_URLS="my_url1,my_url2,..."
Υποθέτοντας ότι η απόκριση NetHSM είναι αποθηκευμένη σε ένα αρχείο response.json, μπορείτε να δημιουργήσετε αυτές τις δύο τελευταίες μεταβλητές αυτόματα με τις ακόλουθες εκφράσεις jq:
export ETCD_INITIAL_CLUSTER=$(jq --raw-output '[.members[] | ["\(if .name == "" then "witness1" else .name end)=\(.urls[])"]] | flatten | join(",")' < response.json)
export ETCD_INITIAL_ADVERTISE_PEER_URLS=$(jq --raw-output '.members[] | select(.name=="") | .urls | join(",")' < response.json)
Για παράδειγμα, με το παράδειγμα απάντησης που παρέχεται στην ενότητα Registering a New Node, θα έχετε:
ETCD_NAME="witness1"
ETCD_DATA_DIR="/var/etcd/data"
ETCD_INITIAL_CLUSTER="witness1=https://172.22.1.3:2380,9ZVNM2MNWP=https://172.22.1.2:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.22.1.3:2380"
Τέλος, δημιουργήστε ένα αρχείο etcd.conf.yml χρησιμοποιώντας το πρότυπο αρχείο που παρέχεται στο docs/etcd_witness.conf.template:
$ envsubst < NETHSM_ROOT/docs/etcd_witness.conf.template > /var/etcd/witness.conf.yml
$ cat witness.conf.yml
Αυτό θα σας δώσει ένα αρχείο της φόρμας:
name: witness1
data-dir: /var/etcd/data
log-level: warn
log-format: console
listen-peer-urls: https://0.0.0.0:2380
listen-client-urls: http://localhost:2379
initial-advertise-peer-urls: https://172.22.1.3:2380
advertise-client-urls: http://localhost:2379
initial-cluster: witness1=https://172.22.1.3:2380,9ZVNM2MNWP=https://172.22.1.2:2380
initial-cluster-state: 'existing'
peer-transport-security:
cert-file: witness.pem
key-file: witness.key
client-cert-auth: true
trusted-ca-file: CA.pem
skip-client-san-verification: true
Start etcd¶
Εκκινήστε το etcd με τον τρόπο που προτιμάτε (χειροκίνητα, systemd υπηρεσία, δοχείο κ.λπ.), δείχνοντάς του το αρχείο ρυθμίσεων που δημιουργήθηκε στο προηγούμενο βήμα:
$ cd /var/etcd
$ etcd --config-file witness.conf.yml
Θα πρέπει να το δείτε να ξεκινάει, να συμμετέχει στη συστάδα και να φτάνει τα δεδομένα. Μετά από κάποιο χρονικό διάστημα, θα πρέπει να μπορείτε να ελέγξετε ότι είναι υγιής με τον πελάτη etcdctl:
etcdctl get /config/version
Αυτό το κλειδί πρέπει να υπάρχει και να περιέχει «1».
Βεβαιωθείτε ότι αυτή η διαδικασία συνεχίζει να εκτελείται, καθώς είναι πλέον ένα κανονικό μέλος της συστάδας σας. Αν χρειαστεί να την παροπλίσετε, πρώτα αφαιρέστε την κατάλληλα από τη συστάδα (δείτε την ενότητα dedicated). Εάν αλλάξει η προσβάσιμη IP του, ενημερώστε τη διεύθυνση URL του από τη συστάδα.
Operating a Cluster¶
Δημιουργία αντιγράφων ασφαλείας και επαναφορά¶
Η λειτουργία δημιουργίας αντιγράφων ασφαλείας λειτουργεί όπως και χωρίς συστάδα και μπορεί να ζητηθεί από οποιονδήποτε κόμβο της συστάδας. Θα δημιουργήσει αντίγραφα ασφαλείας των δεδομένων ολόκληρης της συστάδας, συμπεριλαμβανομένων των πεδίων που αφορούν συγκεκριμένους κόμβους (αν και αυτά θα αγνοηθούν, εκτός αν επαναφέρετε το αντίγραφο ασφαλείας σε έναν κόμβο χωρίς πρόβλεψη).
Ένα αντίγραφο ασφαλείας που έχει γίνει σε μια συστάδα μπορεί να αποκατασταθεί στην ίδια συστάδα, ακόμη και αν έχουν προστεθεί ή αφαιρεθεί κάποιοι κόμβοι από τότε. Τέτοιες επαναφορές που γίνονται σε λειτουργικές συστάδες δεν θα επηρεάσουν τις τιμές διαμόρφωσης (μόνο τα κλειδιά, τους χρήστες, τους χώρους ονομάτων), όπως κάθε άλλη μερική επαναφορά.
Η επαναφορά ενός αντιγράφου ασφαλείας σε έναν κόμβο που δεν έχει προγραμματιστεί, θα επαναφέρει τα πεδία που αφορούν τον κόμβο (όπως ρυθμίσεις δικτύου, πιστοποιητικά κ.λπ.) του κόμβου που χρησιμοποιήθηκε για τη δημιουργία του αντιγράφου ασφαλείας.
Η επαναφορά ενός μεγάλου αντιγράφου ασφαλείας μπορεί να επιβαρύνει τη συστάδα για κάποιο χρονικό διάστημα, ενώ ο κόμβος που εφαρμόζει την επαναφορά προωθεί τις αλλαγές στους υπόλοιπους.
Αυτή η λειτουργία παραμένει συμβατή με τα αντίγραφα ασφαλείας που έχουν γίνει σε προηγούμενες εκδόσεις του NetHSM.
Σημείωση
Η επαναφορά σε έναν κόμβο Α ενός αντιγράφου ασφαλείας που έχει δημιουργηθεί σε έναν άλλο κόμβο Ζ με διαφορετικό κλειδί τομέα θα επανεγγράψει σωστά το κλειδί τομέα του Α, όπως και πριν. Ωστόσο, εάν ο Α βρισκόταν σε συστάδα με τον κόμβο Β, ο Β θα καταστεί μη λειτουργικός, καθώς το κλειδί τομέα του Ζ δεν θα επαναφερθεί στον Β.
Με άλλα λόγια, εκτελείτε επαναφορά μόνο σε ένα σύμπλεγμα με αντίγραφα ασφαλείας που έχουν γίνει στο ίδιο σύμπλεγμα (αν και πάλι οι κόμβοι μπορεί να έχουν αφαιρεθεί ή προστεθεί από τότε). Αν θέλετε να επαναφέρετε ένα ξένο αντίγραφο ασφαλείας σε έναν κόμβο, πρώτα αφαιρέστε τον με ασφάλεια από τη συστάδα του, στη συνέχεια επαναφέρετε τον εργοστασιακά και επαναφέρετε το αντίγραφο ασφαλείας.
Καθαρή αφαίρεση ενός κόμβου¶
Εφόσον κάποιο τμήμα της συστάδας εξακολουθεί να πληροί την απαρτία, οποιοδήποτε από τα μέλη της μπορεί να χρησιμοποιηθεί για την απομάκρυνση ενός άλλου κόμβου από τη συστάδα, είτε αυτός ο κόμβος είναι ήδη μη προσβάσιμος είτε αναμένεται να γίνει.
Πρέπει πρώτα να γνωρίζετε το αναγνωριστικό του κόμβου που θέλετε να αφαιρέσετε, απαριθμώντας όλους τους κόμβους μέσω του GET /cluster/members και αναζητώντας τον σωστό.
Στη συνέχεια, μπορεί να αφαιρεθεί καλώντας DELETE /cluster/members/<id>. Εάν ο εν λόγω κόμβος ήταν ακόμα υγιής, αυτό θα τον απομονώσει από το υπόλοιπο σύμπλεγμα και θα τον καταστήσει μη λειτουργικό.
Software Updates in Clusters¶
Οι μελλοντικές ενημερώσεις θα επισημαίνονται ως «cluster-safe» (αυτή θα πρέπει να είναι η πλειοψηφία) ή «cluster-unsafe».
Οι ασφαλείς για τη συστάδα ενημερώσεις μπορούν να εφαρμοστούν σε κόμβους που αποτελούν μέρος μιας συστάδας χωρίς να τους αφαιρέσετε πρώτα από τη συστάδα. Ωστόσο, όπως συμβαίνει με όλες τις λειτουργίες, θα πρέπει να βεβαιωθείτε ότι το κάνετε αυτό σε έναν κόμβο κάθε φορά και σε ένα σύμπλεγμα όπου η αφαίρεση ενός κόμβου δεν μειώνει την απαρτία (π.χ. αν η ενημέρωση αποτύχει).
Οι ενημερώσεις που δεν είναι ασφαλείς για συστάδες πρέπει να εφαρμόζονται σε απομονωμένους κόμβους. Θα πρέπει να διαλύσετε τη συστάδα (αφαιρώντας έναν έναν τους κόμβους), να επαναφέρετε όλους τους κόμβους εκτός από έναν, να εφαρμόσετε την ενημέρωση σε κάθε κόμβο και, στη συνέχεια, να κάνετε όλους τους κόμβους που έχουν επαναφερθεί να ενωθούν με τον εναπομείναντα κόμβο.
Φροντίστε να δημιουργείτε αντίγραφα ασφαλείας πριν από τέτοιες λειτουργίες.
Επαναδιαμόρφωση υπάρχουσας συστάδας¶
Changing the Cluster CA¶
Μια υπάρχουσα συστάδα (με δύο ή περισσότερους κόμβους) δεν μπορεί να αλλάξει την CA της συστάδας ενώ βρίσκεται σε λειτουργία. Εάν πρέπει να αλλάξετε αυτό το πιστοποιητικό: επιλέξτε έναν κόμβο, αφαιρέστε όλους τους άλλους κόμβους, ενημερώστε την CA και, στη συνέχεια, βάλτε τα άλλα μέλη να επανενταχθούν.
Changing the Network Configuration of Nodes¶
Η τροποποίηση των ρυθμίσεων δικτύου ενός κόμβου (π.χ. αλλαγή της IP του) θα ενημερώσει αυτόματα τους άλλους κόμβους για την ενημέρωση. Ωστόσο, θα πρέπει να βεβαιωθείτε ότι εκτελείτε τέτοιες ενημερώσεις μόνο σε έναν κόμβο κάθε φορά και σε μια συστάδα όπου η απώλεια του κόμβου αυτού δεν θα χάσει την απαρτία.