Für die Air-Gap-Appliance von Google Distributed Cloud (GDC) wird ONTAP Select (OTS) als Anbieter für softwaredefinierten Speicher verwendet. OTS hat ein eigenes Authentifizierungssystem, in dem jeder Identität (Kernservice oder Client) ein Name und ein Schlüssel zugeordnet sind.
In diesem Dokument werden die Schritte zum Rotieren der Authentifizierungsschlüssel und ‑zertifikate beschrieben, die für Folgendes ausgeführt werden müssen:
- regelmäßige Schlüsselrotation, um dafür zu sorgen, dass das Gerät konform und sicher ist.
- Schlüsseloffenlegung. Sie sollten den offengelegten Schlüssel so schnell wie möglich rotieren.
Hinweise
Sie benötigen die folgenden Zugriffsrechte:
- Zugriff auf die Admin-Konsole für den ONTAP-Cluster
- Kubeconfig für den Management API-Server
IPsec-Anmeldedaten (PSK) rotieren
Ab Version 9.10.1 unterstützt ONTAP die zertifikatbasierte Authentifizierung für IPsec. Diese Version von GDC basiert auf 9.14.1 und verwendet vorinstallierte Schlüssel.
Für Appliance wird IPsec für zwei Arten von OTS-Traffic implementiert:
- Externer Traffic zwischen Bare-Metal-Hosts und SVMs.
- Interner Traffic zwischen Worker-Knoten.
Wir gehen sie einzeln durch.
Vorbereitung
- Zugriff auf die Admin-Konsole für den ONTAP-Cluster
- Ein neuer vorinstallierter Schlüssel
- Kubeconfig für den Management API-Server
- Zugriff auf Hosts zum Aktualisieren der StrongSwan-Konfiguration
Auswirkungen
Während IPsec-Richtlinien rotiert werden, verlieren Hosts die IP-Verbindung zum Speichersystem. Verbindungen werden je nach Anwendungsverhalten unterbrochen oder schlagen möglicherweise fehl. Sie können Nutzer-Workloads während der Rotation pausieren, wenn möglich, aber es ist nicht erforderlich. Die Verbindungen sollten kurz nach dem Zurücksetzen der Secrets wiederhergestellt werden.
Schlüsselrotation für externen OTS-Traffic
Verwenden Sie den folgenden Befehl, um die Rotation zu prüfen, und vergleichen Sie die Ausgabe:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get StorageEncryptionConnections -n gpc-system
Ausgabe:
NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE
bm-1ba9796c bm-1ba9796c root-admin 10.4.4.0/24 bm-1ba9796c-pre-shared-key True 6h16m
bm-96a5f32a bm-96a5f32a root-admin 10.4.4.0/24 bm-96a5f32a-pre-shared-key True 16h
bm-e07f4a4f bm-e07f4a4f root-admin 10.4.4.0/24 bm-e07f4a4f-pre-shared-key True 21h
Prüfen Sie, ob das Feld READY
für den Host, auf dem Sie das Script zuvor ausgeführt haben, „true“ ist.
Rotieren Sie den PSK manuell, wenn Sie bei der Validierung Fehler finden.
Führen Sie folgenden Befehl aus:
export KUBECONFIG= #path to root-admin kubeconfig
mgmt_ip="$(kubectl get storagecluster -A -o jsonpath='{.items[0].spec.network.clusterManagement.ip}')" username="$(kubectl get secret storage-root-level1 -n gpc-system -o jsonpath='{.data.username}' | base64 -d)" password="$(kubectl get secret storage-root-level1 -n gpc-system -o jsonpath='{.data.password}' | base64 -d)"
Passwort ansehen und in die Zwischenablage kopieren:
echo $password
Melden Sie sich in der ONTAP-Konsole an:
ssh $username@$mgmt_ip
Wenn Sie zur Eingabe eines Passworts aufgefordert werden, fügen Sie das kopierte Passwort aus dem vorherigen Schritt ein.
Verwenden Sie das folgende Script für die Rotation von Anmeldedaten:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get StorageEncryptionConnections -n gpc-system
Ausgabe:
NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE bm-1ba9796c bm-1ba9796c root-admin 10.4.4.0/24 bm-1ba9796c-pre-shared-key True 6h16m bm-96a5f32a bm-96a5f32a root-admin 10.4.4.0/24 bm-96a5f32a-pre-shared-key True 16h bm-e07f4a4f bm-e07f4a4f root-admin 10.4.4.0/24 bm-e07f4a4f-pre-shared-key True 21h
Für jeden Host, den Sie rotieren möchten, können Sie Folgendes ausführen:
export bm_host= //name of bm-host from above export secret="${bm_host}-pre-shared-key" export job_name="os-policy-config-host-ipsec-${bm_host}" export ns="gpc-system" export svm="$(kubectl get storageencryptionconnections "${bm_host}" -n "${ns}" -o jsonpath='{.spec.storageVirtualMachineRef.name}')"
Prüfen Sie nun, ob alle Komponenten der Speicherverschlüsselungsverbindung angezeigt werden. Für Administratorclusterverbindungen, entweder Root-Administrator oder Organisationsadministrator, müssen Sie den Root-Administratorcluster verwenden.
kubectl get secrets -n "${ns}" "${secret}" kubectl get jobs -n "${ns}" "${job_name}"
Wenn beide Elemente vorhanden sind, können Sie mit dem nächsten Schritt fortfahren. Ist dies nicht der Fall, halten Sie an und fahren Sie nicht mit der Änderung von IPsec fort. Wenden Sie sich an den technischen Support.
kubectl delete secrets -n "${ns}" "${secret}" kubectl delete jobs "${job_name}" -n "${ns}"
Löschen Sie jetzt mit dem Management API-Server die storageencryptionconnection.
export KUBECONFIG= #path to root-admin kubeconfig
kubectl delete storageencryptionconnections "${bm_host}" annotation_key="reconcile_annotation_key" annotation_value="reconcile_annotation_value" kubectl patch storagevirtualmachines "${svm}" -n "${ns}" --type=merge -p "{\"metadata\":{\"annotations\":{\"$annotation_key\":\"$annotation_value\"}}}" kubectl patch storagevirtualmachines "${svm}" -n "${ns}" --type=json -p="[{\"op\": \"remove\", \"path\": \"/metadata/annotations/$annotation_key\"}]"
Schlüsselrotation für internen OTS-Traffic
Verwenden Sie den folgenden Befehl, um die Rotation zu validieren, und vergleichen Sie die Ausgabe:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get secret ots-internal-pre-shared-key -n gpc-system
Ausgabe:
NAME TYPE DATA AGE
ots-internal-pre-shared-key Opaque 1 18m
kubectl get jobs -n gpc-system | grep os-policy-config-host-ipsec
Ausgabe:
os-policy-config-host-ipsec-bm-3d33bb857t5bh Complete 1/1 17s 10m
os-policy-config-host-ipsec-bm-774fa8e6frgr7 Complete 1/1 30s 11m
os-policy-config-host-ipsec-bm-8e452fb29q5wd Complete 1/1 23s 11m
Prüfen Sie, ob alle Jobs den Status Complete
haben.
kubectl get StorageEncryptionConnections -n gpc-system
Ausgabe:
NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE
bm-3d33bb85 bm-3d33bb85 root-admin 10.4.4.0/24 bm-3d33bb85-pre-shared-key True 6h16m
bm-774fa8e6 bm-774fa8e6 root-admin 10.4.4.0/24 bm-774fa8e6-pre-shared-key True 16h
bm-8e452fb2 bm-8e452fb2 root-admin 10.4.4.0/24 bm-8e452fb2-pre-shared-key True 21h
Prüfen Sie, ob das Feld READY
für alle Hosts „true“ ist.
Löschen Sie alle CRs in Schritt 2 in der aufgeführten Reihenfolge.
Löschen Sie das Secret für den internen Traffic:
sh kubectl delete secret ots-internal-pre-shared-key -n gpc-system
.Löschen Sie alle drei Betriebssystemrichtlinien-Jobs.
sh kubectl delete jobs os-policy-config-host-ipsec-bm-3d33bb857t5bh -n gpc-system kubectl delete jobs os-policy-config-host-ipsec-bm-774fa8e6frgr7 -n gpc-system kubectl delete jobs os-policy-config-host-ipsec-bm-8e452fb29q5wd -n gpc-system
Löschen Sie alle drei storageencryptionconnection
sh kubectl delete StorageEncryptionConnections bm-3d33bb85-root-admin -n gpc-system kubectl delete StorageEncryptionConnections bm-774fa8e6-root-admin -n gpc-system kubectl delete StorageEncryptionConnections bm-8e452fb2-root-admin -n gpc-system
Warten Sie einige Minuten (ca. 3–5 Minuten). Wiederholen Sie Schritt 2, bis alle Creative-Anforderungen den Status „BEREIT“ oder „Abgeschlossen“ haben.
Lautstärketasten rotieren
In diesem Abschnitt werden die manuellen Schritte zum Rotieren von OTS-Volume-Anmeldedaten beschrieben.
Hinweise
Gehen Sie folgendermaßen vor:
- Prüfen Sie, ob Sie die Voraussetzungen für Laptops erfüllen.
- Achten Sie darauf, dass Sie sich über BM01 oder BM02 in der Konsole des OTS-Clusters anmelden können.
Rotation des Volume-Schlüssels einleiten
Lösen Sie in der OTS Console die einmalige Schlüsselrotation aus:
volume encryption rekey start -vserver SVM_name -volume volume_name
Mit dem folgenden Befehl wird der Verschlüsselungsschlüssel für vol1
auf SVMvs1
geändert:
cluster1::> volume encryption rekey start -vserver vs1 -volume vol1
Mit dem Befehl show
können Sie die Namen der V‑Server und Volumes aufrufen:
vserver show
volume show
Rotation des Volume-Schlüssels überprüfen
Nachdem die Schlüsselrotation initiiert wurde, prüfen Sie den Status der Neuverschlüsselung:
volume encryption rekey show
Rufen Sie den Status des Vorgangs zum erneuten Verschlüsseln auf:
cluster1::> volume encryption rekey show
Vserver Volume Start Time Status
------- ------ ------------------ ---------------------------
vs1 vol1 9/18/2017 17:51:41 Phase 2 of 2 is in progress.
Wenn der Vorgang zum erneuten Verschlüsseln abgeschlossen ist, prüfen Sie, ob das Volume für die Verschlüsselung aktiviert ist:
volume show -is-encrypted true
Verschlüsselte Volumes auf cluster1
anzeigen:
cluster1::> volume show -is-encrypted true
Vserver Volume Aggregate State Type Size Available Used
------- ------ --------- ----- ---- ----- --------- ----
vs1 vol1 aggr2 online RW 200GB 160.0GB 20%
Externe HSM-Zertifikate rotieren
In diesem Abschnitt wird beschrieben, wie Sie die externen HSM-Zertifikate für ONTAP rotieren und aktualisieren.
Vorbereitung
- Administratorzugriff auf den ONTAP-Cluster oder die relevanten SVMs
- Aktuelles Passwort
- kubectl-Zugriff auf die entsprechenden Cluster
Anleitung
Sichern Sie die alten HSM-Zertifikate:
kubectl get secret aa-aa-external-hsm-creds -n gpc-system -o yaml > external-hsm-creds-old.yaml
Aktualisieren Sie das HSM-Zertifikate-Secret in Kubernetes:
Kopieren Sie die alte YAML-Datei mit dem Secret:
sh cp external-hsm-creds-old.yaml external-hsm-creds-new.yaml
Aktualisieren Sie die neue Datei
external-hsm-creds-new.yaml
mit den neuen HSM-Anmeldedaten, einschließlich des Server-CA-Zertifikats, des öffentlichen Clientzertifikats und des privaten Schlüssels für den Client.Wenden Sie die Änderung an und aktualisieren Sie das HSM-Secret-Objekt.
kubectl apply -f external-hsm-creds-new.yaml
Aktualisieren Sie die HSM-Zertifikate in ONTAP:
Melden Sie sich in der ONTAP-CLI an.
Installieren Sie das neue Server-CA-Zertifikat:
cluster::> security certificate install -type server-ca -vserver <>
Installieren Sie das neue Clientzertifikat:
cluster::> security certificate install -type client -vserver <>
Aktualisieren Sie die Konfiguration des Schlüsselmanagers, damit die neu installierten Zertifikate verwendet werden:
cluster::> security key-manager external modify -vserver <> -client-cert <> -server-ca-certs <>
Validierung
Prüfen Sie die Änderung mit dem Schlüsselmanagerstatus:
cluster::> security key-manager external show-status
Prüfen Sie, ob sich die Schlüsselserver noch im Status
Available
befinden.
Anmeldedaten des Speichers rotieren
In diesem Abschnitt wird beschrieben, wie Sie den Speicheradministratornutzer und das zugehörige Passwort rotieren und festlegen.
Vorbereitung
- Administratorzugriff auf den ONTAP-Cluster oder die relevanten SVMs
- Aktuelles Passwort
- kubectl-Zugriff auf die entsprechenden Cluster
Anleitung
Beginnen Sie mit dem folgenden Befehl und folgen Sie dann den Eingabeaufforderungen:
cluster::> security login password
Aktualisieren Sie das Secret, damit es übereinstimmt:
Option 1 (interaktiv):
kubectl edit secret -n <netapp_namespace> netapp_credential
Ändern Sie das Passwort im Editor in den neuen base64-codierten Wert.
Option 2 (Patch mit jq-Abhängigkeit):
k get secret -n <netapp_namespace> netapp_credential -o json | jq '.data["password"]="<new-base64-encoded-password>"' | kubectl apply -f -
ONTAP-Anmeldedaten für den Notfallzugriff rotieren
Bei der Einrichtung von Datei- und Blockspeicher werden vier Nutzerkonten mit Notfallzugriff erstellt, mit denen direkt auf ONTAP zugegriffen werden kann. Diese Anmeldedaten können als Secrets auf dem Management API-Server abgerufen werden. Sobald diese Anmeldedaten verwendet wurden, müssen sie rotiert werden.
Während der Einrichtung werden zwei Arten von Secrets erstellt: Ebene 1 und Ebene 2. Level 1 ist storage-root-level1 and storage-root-level1-backup
. Level 2 ist storage-root-level2 and storage-root-level2-backup
. Geheimnisse der Stufe 2 müssen im Safe gespeichert werden. Jede Stufe hat zwei Geheimnisse: ein normales und ein Backup. Die Software löscht sowohl normale als auch Backup-Secrets gleichzeitig. Wir empfehlen jedoch, aus Sicherheitsgründen immer nur eines dieser Partner-Secrets zu rotieren.
Während Secrets der Stufe 1 nach 90 Tagen automatisch rotiert werden, ist das bei Secrets der Stufe 2 nicht der Fall. Beide Arten von Secrets müssen manuell rotiert werden, wenn sie verwendet werden. Gehen Sie dazu so vor:
Vorbereitung
- Erforderlicher Zugriff: Management API-Server
Validierung
- Die Secret-Rotation kann überprüft werden, indem Sie prüfen, ob das Secret weiterhin als zu löschend markiert ist. Wenn nicht, wurde das Secret rotiert. Folgen Sie Schritt 1 der folgenden Anleitung, um dies zu überprüfen.
Wenn es sich um ein Geheimnis der Stufe 2 handelt, kopieren Sie es auf physische Medien und bewahren Sie es im Safe auf. Das Secret sollte dann mit der Annotation
"disk.gdc.goog/persisted"
als persistent gekennzeichnet werden.kubectl annotate secrets <secret_name> -n gpc-system disk.gdc.goog/persisted=''
Folgen Sie der Anleitung unten, um das Secret manuell zu rotieren, wenn Sie bei der Validierung einen Fehler feststellen.
Anleitung
Prüfen, ob ein Secret zum Löschen markiert ist:
Führen Sie dazu diesen Befehl aus:
kubectl get secret <secret_name> -n gpc-system -o yaml
Wenn das Feld
deletionTimestamp
wie in diesem Beispiel in der Antwort vorhanden ist, wird das Secret zum Löschen markiert. Andernfalls nicht.apiVersion: v1 data: password: KFZbQTJdYjIwSUtVVV1aNytJJVM= username: cm9vdC1sdmwy immutable: true kind: Secret metadata: annotations: cluster-name: aa-aa-stge01 creationTimestamp: "2022-12-21T05:03:02Z" deletionGracePeriodSeconds: 0 deletionTimestamp: "2022-12-21T14:42:13Z" finalizers: - ontap.storage.private.gdc.goog/breakglass-finalizer labels: breakglass-secret: "true" name: storage-root-level2 namespace: gpc-system resourceVersion: "591897" uid: 6f331f8a-bf48-4d59-9725-6c99c5e766f7 type: Opaque
Rotieren Sie das Secret, nachdem Sie damit auf ONTAP zugegriffen haben:
- Prüfen Sie, ob die Partneranmeldedaten vorhanden und nicht zum Löschen markiert sind. Fahren Sie nicht fort und kehren Sie zu diesen Schritten zurück, wenn die Datei zur Löschung markiert ist.
Wenn das Secret der Ebene 2 rotiert wird, muss das Partner-Secret als persistent gekennzeichnet werden, indem die Anmerkung
disk.gdc.goog/persisted
hinzugefügt wird:kubectl annotate secrets <secret_name> -n gpc-system disk.gdc.goog/persisted=''
Löschen Sie das Secret aus dem Cluster mit dem folgenden Befehl:
kubectl delete secret <secret_name> -n gpc-system
Der Löschvorgang wird gestartet. Sie können prüfen, ob das Secret zum Löschen markiert ist. Es kann fast eine Stunde dauern, bis das Secret gelöscht und neu generiert wird.
Speicheradministrator- und SVM-Zertifikate rotieren
Diese Zertifikate sind die Serverzertifikate, die von GDC im ONTAP-System installiert werden.
Es gibt ein Zertifikat für den Speicheradministrator, auch bekannt als das Konto des Clusteradministrators. Der Name hat das Präfix des Hostnamens des ONTAP-Systems und einen nachgestellten eindeutigen Hash. Sie wird auf dem VServer des Clusteradministrators installiert. GDC verwendet dieses Zertifikat intern für administrative Aufgaben.
Es gibt auch mehrere serverseitige Zertifikate, die für ONTAP-SVMs definiert sind. Damit wird die Authentizität für Clients hergestellt, die mit den SVMs kommunizieren.
Alle Zertifikate können mit demselben Verfahren rotiert werden. Aufgrund einer Diskrepanz zwischen den Stammzertifizierungsstellen im Root-Administratorcluster ist für die in den folgenden Tabellen aufgeführten Cluster- und SVM-Zertifikate eine Rotation aller Zertifikate in der jeweiligen Liste erforderlich. Das bedeutet, dass bei Bedarf alle anderen Clusterzertifikate ebenfalls rotiert werden müssen. Dasselbe gilt für SVM-Zertifikate. Diese Einschränkung wird aufgehoben, sobald die automatische Zertifikatsverwaltung implementiert ist.
Vorbereitung
- Administratorzugriff auf den ONTAP-Cluster oder die relevanten SVMs
- kubectl-Zugriff auf die entsprechenden Kubernetes-Cluster
- Installieren Sie die Client-CA-Zertifikate neu, wie in der Installationsanleitung für Client-CA-Zertifikate beschrieben.
Zuordnung zwischen Zertifikaten und Kubernetes-Secrets
Für jedes in ONTAP installierte Zertifikat gibt es ein entsprechendes Kubernetes-Secret auf dem Management API-Server, das die Zertifikatsdetails enthält. GDC generiert die Zertifikate. Das Ersetzen eines Zertifikats ist ganz einfach: Löschen Sie das Secret, das dem jeweiligen Zertifikat entspricht, und das Zertifikat wird sofort neu generiert. Das neue Zertifikat kann dann manuell in ONTAP installiert werden und ersetzt das alte.
Verwenden Sie kubectl get secrets -n <namespace> -s <secret> -o yaml
, um das Zertifikat in Kubernetes zu prüfen und zu bestätigen, dass es mit den Details in ONTAP übereinstimmt, die über security certificate show -vserver <svm_name>
angezeigt werden. Der Namespace ist immer „gpc-system“. Den Namen des Secrets finden Sie in der folgenden Tabelle.
Sie können die Zuordnung von Zertifikat zu Secret auch so prüfen:
kubectl get certificates -n <namespace>
Relevante Clusterzertifikate
ONTAP-Common-Name | Vserver | K8S-Zertifikatsname | Name des Kubernetes-Secrets | Beschreibung |
– | <hostname> | <hostname>-admin-cert | <hostname>-admin-cert-secret | Clusteradministratorzertifikat |
– | <hostname> | <hostname>-server-cert | <hostname>-server-cert-secret | Das Serverzertifikat ist vom GDC-Aussteller signiert und wird als ONTAP-Serverzertifikat verwendet. |
– | <hostname> | <hostname>-read-only-cert | <hostname>-read-only-cert-secret | Lesezugriff für Monitoring |
Relevante SVM-Zertifikate
Vserver | K8S-Zertifikatsname | Name des Kubernetes-Secrets | Beschreibung |
root-admin | root-admin-server-cert | root-admin-server-cert-secret | Das Serverzertifikat ist vom GDC-Aussteller signiert, der als SVM-Serverzertifikat verwendet wird. |
root-admin | root-admin-s3-server-cert | root-admin-s3-server-cert-secret | Vom GDC-Aussteller signiertes Serverzertifikat, das als ONTAP-S3-Serverzertifikat verwendet wird |
root-admin | root-admin-client-cert | root-admin-client-cert-secret | Zugriff durch SVM-Administrator |
root-admin | root-admin-s3-identity-client-cert | root-admin-s3-identity-client-cert-secret | S3-Identitätszugriff |
Validierung
Vserver-Zertifikat
Nachdem alle Zertifikate rotiert wurden, prüfen Sie, ob das Trident-Backend für jeden Cluster, der dem rotierten Serverzertifikat zugeordnet ist, weiterhin erfolgreich verbunden ist.
Führen Sie Folgendes aus:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get tridentbackendconfigs -n netapp-trident
Die Ausgabe sollte so aussehen:
NAME BACKEND NAME BACKEND UUID PHASE STATUS netapp-trident-backend-tbc-ontap-san iscsi-san a46ce1c7-26da-42c9-b475-e5e37a0911f8 Bound Success
Prüfen Sie, ob
PHASE
den Wert Bound undStatus
den Wert Success hat.
Root-Administratorzertifikat
Um das Administratorzertifikat zu testen, können wir eine neue StorageVirtualMachine erstellen und prüfen, ob GDC sie richtig abgleichen kann. Dazu sind die folgenden Schritte auszuführen:
- Listen Sie die vorhandenen StorageVirtualMachines auf und wählen Sie eine zum Klonen als Test aus.
- Extrahieren Sie die Kubernetes-Spezifikation dafür.
- Bearbeiten Sie die Definition, um den Namen zu ändern und unnötige Felder zu löschen.
- Wenden Sie die Testdefinition an.
- Warten Sie, bis der Status der StorageVirtualMachine
Ready
lautet. - Löschen Sie die StorageVirtualMachine für den Test.
- Löschen Sie die tatsächliche SVM aus ONTAP.
Beispiel
In diesem Beispiel wird der GDC NetApp-Namespace gpc-system
verwendet und organization-root-user
wird vorübergehend in eine neue SVM namens test-svm
geklont.
SVMs auflisten:
kubectl get storagevirtualmachines -n ngpc-system
Ausgabe:
NAME AGE organization-root-admin 13d
Extrahieren Sie die Spezifikation:
kubectl get storagevirtualmachines -n gpc-system -o yaml > svm.yaml
Bearbeiten Sie die Spezifikation so, dass sie in etwa so aussieht:
apiVersion: system.gpc.gke.io/v1alpha1 kind: StorageVirtualMachine metadata: labels: ontap.storage.gpc.gke.io/role: user name: test-svm namespace: netapp-alatl12-gpcstge02 spec: aggregates: - alatl12-gpcstge02-c1-aggr1 - alatl12-gpcstge02-c2-aggr1 clusterName: alatl12-gpcstge02 iscsiTarget: port: a0a-4 subnetName: root-svm-data nasServer: port: a0a-4 subnetName: root-svm-data svmNetwork: port: e0M subnetName: Default
Wenden Sie es auf den Cluster an:
kubectl create -f svm.yaml
Warten Sie, bis die neue SVM bereit ist. Beobachten Sie regelmäßig die Ausgabe von:
kubectl get storagevirtualmachines -n gpc-system test-svm
Eine erfolgreiche Ausführung ist daran zu erkennen, dass
Conditions: Last Transition Time: 2022-03-30T21:30:27Z Message: Observed Generation: 1 Reason: SVMCreated Status: True Type: Ready
oder
AnsibleJobSucceed
.Löschen Sie die SVM-Ressource:
kubectl delete storagevirtualmachines -n gpc-system test-svm
Löschen Sie sie vollständig aus ONTAP. Wenn Sie die Ressource löschen, wird sie nicht aus ONTAP entfernt.
Melden Sie sich in der NetApp-Konsole an und löschen Sie die SVM:
alatl12-gpcstge02::> vserver delete test-svm
Ausgabe:
Warning: When Vserver "test-svm" is deleted, the following objects are automatically removed as well: LIFs: 7 Routes: 2 Admin-created login accounts: 2 Do you want to continue? {y|n}: y [Job 3633] Success
Folgen Sie der Anleitung unten, um das ONTAP-Zertifikat manuell zu rotieren, wenn bei der Validierung ein Fehler auftritt.
Anleitung
Wenn der vorherige ONTAP-Zertifikatsname nicht zutrifft, muss in ONTAP nichts rotiert werden. Prüfen Sie das Zertifikat und das Secret in Kubernetes und löschen Sie das Secret.
Generieren Sie ein neues Zertifikat und verweisen Sie dabei auf die vorherige Tabelle für den Secret-Namen:
kubectl get certificates -n <namespace>
$ kubectl patch Certificates <cert_name> -n gpc-system \ --type=merge -p "{\"spec\":{\"privateKey\": {\"rotationPolicy\": \"Always\"}}}" $ kubectl delete secret -n <namespace> <secret_name>
So rufen Sie die installierten Zertifikate für einen bestimmten Vserver ab, für Zertifikate, die in ONTAP installiert sind (nicht als „nicht zutreffend“ gekennzeichnet):
cluster::> security certificate show -vserver <svm_name> -type server
Sehen Sie sich das entsprechende Secret in Kubernetes an (siehe Tabelle oben):
kubectl get certificates -n <namespace>
Wenn Sie mit dem Ergebnis zufrieden sind, löschen Sie das Secret, um ein neues Zertifikat zu generieren:
kubectl delete secret -n <namespace> <secret_name>
Prüfen Sie das Secret noch einmal, um zu sehen, ob ein neues Zertifikat neu generiert wurde. Erstellen Sie nach der Bestätigung ein neues Serverzertifikat in ONTAP. Führen Sie die folgenden Schritte nur für die oben genannten Zertifikate mit dem Suffix „server-cert“ aus.
Extrahieren Sie den neuen TLS-Zertifikatskörper direkt mit
kubectl
und anderen Tools und installieren Sie ihn in ONTAP:$ gdch_cert_details -n <namespace> -s <secret_name> cluster::> security certificate install -vserver <svm_name> -type server
Der erste Prompt lautet:
Please enter Certificate: Press <Enter> when done
Geben Sie dort
tls.crt
ein. Wenn es intls.crt
mehrere Zertifikatsblöcke gibt, geben Sie den ersten Block ein und behalten Sie die verbleibenden Zertifikatsblöcke als Zwischenzertifikate für den nächsten Schritt bei.Das System fordert Sie auf:
Please enter Private Key: Press <Enter> when done
. Fügen Sie den Inhalt Ihrertls.key
-Datei ein und drücken Sie die Eingabetaste.Als Nächstes werden Sie aufgefordert:
Do you want to continue entering root and/or intermediate certificates {y|n}:
Wenn Ihretls.crt
-Datei nur ein einzelnes Zertifikat enthält, geben SieN
ein und drücken Sie die Eingabetaste. Geben Sie andernfallsY
ein und drücken Sie die Eingabetaste.Wenn Sie
Y
eingegeben haben:Sie werden aufgefordert, Zwischenzertifikate einzugeben. Fügen Sie sie einzeln aus Ihrertls.crt
-Datei ein und drücken Sie nach jeder Eingabe die Eingabetaste. Fügen Sie das Root-Zertifikat aus Ihrerca.crt
-Datei ein und drücken Sie die Eingabetaste.Wenn Sie
N
eingegeben haben: (Für diese Aufforderung sind keine weiteren Maßnahmen in Bezug auf Zertifikate erforderlich.)ONTAP gibt dann eine Seriennummer zurück. Notieren Sie sich diese Nummer, da sie die Seriennummer des neuen Zertifikats und der neuen Zertifizierungsstelle darstellt. Diese Seriennummer wird in den folgenden Schritten als
<new\_server\_serial>
und<new\_ca>
bezeichnet. Führen Sie diese Schritte für Zertifikate nicht aus, wenn Sie ein S3-Serverzertifikat konfigurieren.Den aktuellen Status der SSL-Konfigurationen für den VServer und den Cluster ansehen. Halten Sie die CA für die Ausstellung von Serverzertifikaten, den allgemeinen Namen des Serverzertifikats und die Seriennummer des Serverzertifikats bereit, da sie als
<old\_server\_common\_name>
,<old\_ca>
bzw.<old\_server\_serial>
bezeichnet werden:cluster::> security ssl show -vserver <vserver>
Dadurch werden die SSL-Informationen mit den alten Serverzertifikatsinformationen zurückgegeben. Sie können später darauf verweisen, um sicherzustellen, dass sie aktualisiert wurden, nachdem Sie die SSL-Konfiguration geändert haben.
SSL-Konfiguration ändern:
cluster::> security ssl modify -server-enabled -client-enabled true -vserver <svm_name> -serial <new_server_serial> -ca <new_ca>
Sehen Sie sich den neuen Status der SSL-Konfigurationen für den VServer und den Cluster an. Hier sollte die aktualisierte Seriennummer für das jetzt installierte Serverzertifikat angezeigt werden:
cluster::> security ssl show -vserver <vserver>
Löschen Sie das alte Serverzertifikat, nachdem Sie den vorherigen Schritt ausgeführt haben:
cluster::> security certificate delete -vserver <svm_name> -common-name <old_server_common_name> -ca <old_ca> -type server -serial <old_server_serial>
Client-CA-Zertifikate
Rufen Sie alle Zertifizierungsstellenzertifikate aus der
trust-store-internal-only
-ConfigMap im Namespacegpc-system
mit dem folgenden Befehl ab:kubectl get cm -n gpc-system trust-store-internal-only -o jsonpath='{.data.ca\.crt}'
Führen Sie für jedes im vorherigen Schritt abgerufene CA-Zertifikat den folgenden Befehl in Ihrem ONTAP-Cluster aus:
cluster::> security certificate install -vserver <svm_name> -type client-ca
Sie werden aufgefordert:
Please enter Certificate: Press <Enter> when done.
Fügen Sie jeden in Schritt 1 abgerufenen Zertifikatsblock ein und drücken Sie die Eingabetaste. Wiederholen Sie diesen Installationsbefehl für jedes CA-Zertifikat.
Harvest-Zertifikate rotieren
Die Erstellung von Erntezertifikaten hängt von <hostname>-read-only-cert-secret
ab.
Achten Sie darauf, dass <hostname>-read-only-cert-secret
gedreht wird, bevor Sie fortfahren.
So rufen Sie die installierten Zertifikate für den Harvest-Pod auf:
export KUBECONFIG= #path to root-admin kubeconfig
cluster_name="$(kubectl get storagecluster -A -o jsonpath='{.items[0].metadata.name}')" secret_name="$cluster_name"-read-only-cert-secret
export TLS_CRT="$(kubectl get secret -n gpc-system $secret_name -o jsonpath='{.data.tls\.crt}')"
export TLS_KEY="$(kubectl get secret -n gpc-system $secret_name -o jsonpath='{.data.tls\.key}')"
export CA_CRT="$(kubectl get secret -n gpc-system $secret_name -o jsonpath='{.data.ca\.crt}')"
Patchen Sie das Secret für die Harvest-Anmeldedaten, um die aktualisierten Zertifikate bereitzustellen:
$ kubectl patch secret \ -n gpc-system netapp-harvest-configuration-credential \ -p "{\"data\":{\"tls.crt\":\"${TLS_CRT:?}\",\"tls.key\":\"${TLS_KEY:?}\",\"ca.crt\":\"${CA_CRT:?}\"}}"
Starten Sie den Harvest-Dienst neu, um die aktualisierte Konfiguration zu laden:
kubectl delete pod -n gpc-system -l 'app=harvest.netapp.io'
Dateisystemzertifikate rotieren
Führen Sie den folgenden Befehl aus, um das file-storage-webhooks-serving-cert
- und das file-observability-backend-target-cert
-Zertifikat neu zu generieren.
kubectl delete secret file-storage-webhooks-serving-cert -n file-system
kubectl delete secret file-observability-backend-target-cert -n file-system
Starten Sie die Pods neu, um die aktualisierte Konfiguration zu laden:
kubectl delete pod -n file-system -l 'app=file-observability-backend-controller'
kubectl delete pod file-storage-backend-controller -n file-system
Trident- und ONTAP-Zertifikate rotieren
Trident muss mit ONTAP kommunizieren. Dies wird mit dem Trident-Backend konfiguriert, das das zuvor definierte Clientzertifikat <svm\_name>-client-cert-secret>
verwendet. Die Rotation von Clientzertifikaten ist nicht Teil von Trident, aber Trident verwendet Teile dieses Zertifikats, die aktualisiert werden müssen.
Anleitung
Für die Aktualisierung des CA-Zertifikats:
Exportieren Sie
KUBECONFIG
, damit es auf die kubeconfig-Datei für den Cluster verweist, der für die betreffenden Trident-Komponenten spezifisch ist. Auf jedem Cluster ist Trident konfiguriert.Rufen Sie das Base64-codierte CA-Zertifikat aus dem Secret „client-cert“ ab und speichern Sie es als Variable:
ca_cert=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.ca\.crt}')
Patchen Sie das tridentBackendConfig-Objekt:
kubectl patch tridentBackendConfigs netapp-trident-backend-tbc-ontap-san -n netapp-trident --type=merge -p "{\"spec\":{\"trustedCACertificate\":\"$ca_cert\"}}"
Für das eigentliche Clientzertifikat und den Schlüssel:
Rufen Sie das TLS-Zertifikat, Base64-codiert aus dem Secret „client-cert“, ab und speichern Sie es als Variable:
tls_cert=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.tls\.crt}')
Rufen Sie den TLS-Schlüssel ab, der aus dem Secret für das Clientzertifikat base64-doppelt codiert wurde, und speichern Sie ihn als Variable:
tls_key=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.tls\.key}' | base64 -w 0)
Aktualisieren Sie das Backend-Secret mit dem privaten Schlüssel:
kubectl patch secrets netapp-trident-backend-tbc-ontap -n netapp-trident --type=merge -p "{\"data\":{\"clientPrivateKey\": \"$tls_key\"}}"
Patchen Sie die Backend-Konfiguration mit dem TLS-Zertifikat:
kubectl patch tridentBackendConfigs netapp-trident-backend-tbc-ontap-san -n netapp-trident --type=merge -p "{\"spec\":{\"clientCertificate\":\"$tls_cert\"}}"
Trident-Controller-Zertifikate rotieren
Die Trident-Container müssen mit dem Trident-Operator kommunizieren. Die Kommunikation erfolgt über HTTPS und Server- und Clientzertifikate müssen als Teil davon verwaltet werden.
Validierung
Prüfen Sie, ob sowohl das DaemonSet als auch das Deployment (falls zutreffend) in einem fehlerfreien Zustand sind.
Folgen Sie der Anleitung unten, um Server- und Clientzertifikate manuell zu rotieren, wenn Sie bei der Validierung Fehler feststellen.
Anleitung
Sowohl das Server- als auch das Clientzertifikat haben kein entsprechendes Zertifikat auf der ONTAP-Seite. Diese sind ausschließlich in den Clustern enthalten.
Löschen Sie das Secret, das dem Zertifikat entspricht, das abläuft.
kubectl delete secret -n netapp-trident <secret_name>
Starten Sie das DaemonSet „netapp-trident-csi“ neu:
kubectl rollout restart daemonset netapp-trident-csi -n netapp-trident
Bei der Rotation von Serverzertifikaten müssen Sie auch die netapp-trident-csi-Bereitstellung neu starten:
kubectl rollout restart deployments netapp-trident-csi -n netapp-trident
Trident-CA-Zertifikat
Das CA-Zertifikat wird verwendet, um die Zertifizierungsstelle zum Signieren der Trident-Server- und Clientzertifikate bereitzustellen.
Name des Zertifikats | Namespace | Secret | Beschreibung |
netapp-trident-csi-cert | netapp-trident | netapp-trident-csi-cert | Trident CA Cert |
Validierung
Sie sehen, dass das Secret neu generiert wurde. Damit die Client- und Serverzertifikate wirksam werden, können Sie auch die Trident-Controller-Zertifikate gemäß der vorherigen Anleitung rotieren, nachdem Sie dieses Zertifikat rotiert haben.
Folgen Sie der Anleitung unten, um das CA-Zertifikat manuell zu rotieren, wenn bei der Validierung ein Fehler auftritt.
Anleitung
Um diesen Schlüssel zu rotieren, müssen Sie das Secret nur aus Kubernetes löschen:
kubectl delete secret -n netapp-trident <secret_name>
Trident-CSI-Knoten und SVMs (Daten)
Dies ist ein SVM-weiter Satz von iSCSI-CHAP-Anmeldedaten, um den Zugriff auf die Datenebene für den Blockzugriff zu ermöglichen. Dies gilt nicht für Dateiprotokolle.
Management API-Server
Namespace | Secret | Beschreibung |
gpc-system | <organization>-<type>-svm-credential | Für die Einrichtung von Trident erforderliche SVM-Konfiguration |
Organisationsadministrator und Management API-Server
Namespace | Secret | Beschreibung |
gpc-system | <organization>-<type>-svm-credential | Für die Einrichtung von Trident erforderliche SVM-Konfiguration |
netapp-trident | netapp-trident-backend-tbc-ontap | Secret für die Verwaltung des Trident-Back-Ends erforderlich |
Validierung
Prüfen Sie, ob das Backend weiterhin erfolgreich konfiguriert ist:
#export kubeconfig of org cluster export KUBECONFIG= #path to root-admin kubeconfig kubectl get tridentBackendConfigs -n netapp-trident
Prüfen Sie, ob der Backend-Status
Success
lautet.
Folgen Sie der Anleitung unten, um die Secrets manuell zu rotieren, wenn bei der Validierung Fehler auftreten.
Anleitung
Generieren Sie für das Initiator-Secret und das Ziel-Initiator-Secret jeweils einen neuen zufälligen String mit 16 Zeichen ohne Sonderzeichen:
#export kubeconfig of Management API server
export KUBECONFIG= #path to root-admin kubeconfig
initiator_secret=$(head /dev/random | tr -dc A-Za-z0-9 | head -c16 | base64)
target_secret=$(head /dev/random | tr -dc A-Za-z0-9 | head -c16 | base64)
kubectl patch secrets -n gpc-system "$org-$type-svm-credential" --type=merge -p "{\"data\":{\"initiatorSecret\": \"$initiator_secret\", \"targetSecret\": \"$target_secret\"}}"
#export kubeconfig of org cluster
export KUBECONFIG= #path to root-admin kubeconfig
kubectl patch secrets -n netapp-trident netapp-trident-backend-tbc-ontap --type=merge -p "{\"data\":{\"chapInitiatorSecret\": \"$initiator_secret\", \"chapTargetInitiatorSecret\": \"$target_secret\"}}"
Trident-AES-Schlüssel
Der AES-Schlüssel wird intern von Trident verwendet, um iSCSI CHAP-Anmeldedaten für die interne Verwendung von Trident zu verschlüsseln. Es handelt sich um eine zufällige Zeichenfolge mit einer Länge von 32 Byte.
Cluster mit Trident (können Root-, Organisationsadministrator-, Nutzer- oder Systemcluster sein)
Namespace | Secret | Beschreibung |
netapp-trident | netapp-trident-aes-key | AES-Schlüssel, der von Trident zum Verschlüsseln von iSCSI-CHAP-Anmeldedaten benötigt wird |
Validierung
Prüfen Sie, ob das Backend weiterhin richtig konfiguriert ist:
#export kubeconfig of org cluster export KUBECONFIG= #path to root-admin kubeconfig kubectl get tridentBackendConfigs -n netapp-trident
Prüfen Sie, ob der Backend-Status
Success
lautet.Versuch, ein Test-Volume zu erstellen:
Erstellen Sie eine YAML-Datei mit den PVC-Informationen:
echo " kind: PersistentVolumeClaim apiVersion: v1 metadata: name: block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo" > pvc.yaml
Wenden Sie es auf den Kubernetes-Cluster an:
kubectl apply -f pvc.yaml
Prüfen Sie, ob in den CSI-Logs Fehler aufgrund der iSCSI-Verschlüsselung vorhanden sind:
kubectl logs deploy/netapp-trident-csi -n netapp-trident -c trident-main | grep "Error encrypting"
Wenn keine Fehler aufgetreten sind, werden keine Logs zurückgegeben.
Datei und PVC bereinigen:
kubectl delete -f pvc.yaml rm -f pvc.yaml
Folgen Sie der Anleitung unten, um den Schlüssel manuell zu rotieren, wenn Sie bei der Validierung einen Fehler finden.
Anleitung
Prüfen Sie vor der Rotation dieses Schlüssels, ob im Cluster ausstehende Pods mit persistenten Volumes vorhanden sind. Wenn ja, warten Sie, bis sie vollständig bereitgestellt sind, bevor Sie den Schlüssel rotieren.
Generieren Sie einen neuen zufälligen String mit einer Länge von 32 Zeichen ohne Sonderzeichen für den aesKey:
#export kubeconfig of org cluster
export KUBECONFIG= #path to root-admin kubeconfig
aes_key=$(head /dev/random | tr -dc A-Za-z0-9 | head -c32 | base64)
#save old key just in case of errors
old_key=$(kubectl get secrets -n netapp-trident "netapp-trident-aes-key" -o jsonpath='{.data.aesKey}')
kubectl patch secrets -n netapp-trident "netapp-trident-aes-key" --type=merge -p "{\"data\":{\"aesKey\": \"$aes_key\"}}"
kubectl rollout restart deployment netapp-trident-csi -n netapp-trident
Rollback
Bei Fehlern ein Rollback auf die zuletzt verwendeten Anmeldedaten durchführen:
kubectl patch secrets -n netapp-trident "netapp-trident-aes-key" --type=merge -p "{\"data\":{\"aesKey\": \"$old_key\"}}" kubectl rollout restart deployment netapp-trident-csi -n netapp-trident
Wiederholen Sie die Bestätigungsschritte.