Google Cloud NetApp Volumes konfigurieren
Sie können Google Cloud NetApp Volumes als Backend für Trident konfigurieren, um Speicher für Kubernetes-Workloads bereitzustellen.
Überblick
Trident unterstützt Google Cloud NetApp Volumes sowohl für NAS- (NFS und SMB) als auch für Block-Workloads (iSCSI).
-
NAS-Workloads nutzen das
google-cloud-netapp-volumesBackend -
Block-Workloads (iSCSI) nutzen das
google-cloud-netapp-volumes-sanBackend
NAS-Volumes bieten dateibasierten Speicher und werden über NFS- oder SMB-Protokolle angesprochen. Diese Volumes unterstützen den gemeinsamen Zugriff durch mehrere Pods oder Knoten.
Block-Volumes bieten rohen Blockspeicher und werden als iSCSI-Geräte angesprochen, die an Kubernetes-Knoten angeschlossen sind. Diese Volumes werden verwendet, wenn Anwendungen Zugriff auf Blockebene benötigen.
Dies gilt für die folgenden Umgebungen:
-
Trident 26.02 und später
-
Google Kubernetes Engine (GKE), oder Red Hat OpenShift Cluster, die auf GCP ausgeführt werden
-
OpenShift Workload Identity Federation (WIF) erfordert Trident 26.10 oder höher
-
Google Cloud NetApp Volumes-Speicherpools
Informationen zur Konfiguration von Block-Speicher (iSCSI) finden Sie unter "Blockspeicher konfigurieren (iSCSI)".
Konfiguration vorbereiten
Cloud Identity ermöglicht es Kubernetes-Workloads, auf Google Cloud-Ressourcen zuzugreifen, indem sie sich als Workload-Identität authentifizieren, anstatt statische Anmeldeinformationen zu verwenden.
Vor der Konfiguration der Workload-Identität ist ein Konto zu verwenden, das zur Erstellung der erforderlichen Identitätsressourcen berechtigt ist. Für GKE sind dazu Google Cloud Berechtigungen zum Erstellen und Konfigurieren eines Google Cloud Servicekontos erforderlich. Für OpenShift ist die Berechtigung zum Erstellen oder Auswählen der WIF-Konfiguration des Clusters sowie zum Konfigurieren des Google Cloud Workload Identity Pool und des Anbieters erforderlich.
Verwendung der GKE Workload Identity
Für die Verwendung der GKE-Workload-Identität mit Google Cloud NetApp Volumes ist Folgendes erforderlich:
-
Ein mit Google Kubernetes Engine (GKE) bereitgestellter Kubernetes-Cluster
-
Workload-Identität im GKE-Cluster aktiviert und Metadatenserver auf den Knotenpools aktiviert
-
Ein Google Cloud-Dienstkonto mit der Google Cloud NetApp Volumes Admin-Rolle (
roles/netapp.adminoder einer entsprechenden benutzerdefinierten Rolle -
Trident wurde mit dem Cloud-Anbieter auf
GCPgesetzt und der Cloud-Identitätsannotation konfiguriert installiert
Um Trident mithilfe des Trident Operators zu installieren, bearbeiten Sie tridentorchestrator_cr.yaml:
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
name: trident
spec:
namespace: trident
cloudProvider: "GCP"
cloudIdentity: "iam.gke.io/gcp-service-account: cloudvolumes-admin-sa@mygcpproject.iam.gserviceaccount.com"
Legen Sie beim Installieren von Trident mit Helm den Cloud-Anbieter und die Cloud-Identität fest:
helm install trident trident-operator-100.6.0.tgz \ --set cloudProvider=GCP \ --set cloudIdentity="iam.gke.io/gcp-service-account: cloudvolumes-admin-sa@mygcpproject.iam.gserviceaccount.com"
Installieren Sie Trident, indem Sie den Cloud-Anbieter und die Cloud-Identität angeben:
tridentctl install \ --cloud-provider=GCP \ --cloud-identity="iam.gke.io/gcp-service-account: cloudvolumes-admin-sa@mygcpproject.iam.gserviceaccount.com" \ -n trident
Verwendung der Workload Identity Federation auf OpenShift
Ab Trident 26.10 ist es möglich, Google Cloud Workload Identity Federation (WIF) zur Authentifizierung der Google Cloud NetApp Volumes Treiber auf OpenShift Clustern zu verwenden, die auf GCP ausgeführt werden. Dies gilt für selbstverwaltete OpenShift Container Platform (OCP, einschließlich IPI-Bereitstellungen) und OpenShift Dedicated (OSD) und unterstützt sowohl die NAS (google-cloud-netapp-volumes) als auch die SAN (google-cloud-netapp-volumes-san) Treiber.
WIF tauscht ein projiziertes Kubernetes-Dienstkontotoken gegen kurzlebige Google Cloud-Anmeldeinformationen aus. Trident verwendet diese Anmeldeinformationen, um sich als Google Cloud-Dienstkonto auszugeben; die IAM-Rollen dieses Dienstkontos autorisieren dessen API-Aufrufe an Google Cloud NetApp Volumes. Dadurch entfällt die Speicherung eines langlebigen Dienstkontoschlüssels in der Backend-Konfiguration.
|
|
Auf OpenShift Dedicated kann der OIDC-Provider mit anderen OpenShift Komponenten gemeinsam genutzt werden. Wenn die Provider |
Vorbereitung des OpenShift Clusters
Bei OSD gehört zum Erstellen des Clusters auch das Erstellen oder Auswählen einer GCP WIF Konfiguration. Ein Beispiel: Die OpenShift Cluster Manager CLI kann eine solche Konfiguration erstellen:
ocm gcp create wif-config --name <wif-name> --project <gcp-project-id>
Als Cluster-Authentifizierungstyp wird Workload Identity Federation ausgewählt und die WIF-Konfiguration dem Cluster zugeordnet. Für selbstverwaltetes OCP wird ein Google Cloud OIDC-Anbieter konfiguriert, der dem Service-Account-Token-Issuer des Clusters vertraut. Die Schritte für die Cluster-Provisionierung und die Token-Projektion unterscheiden sich zwischen OSD und selbstverwaltetem OCP; dabei ist die zutreffende Red Hat-Anleitung zu verwenden und das projizierte Token dem Trident controller unter /var/run/secrets/wif-token/token verfügbar zu machen.
Die WIF-Authentifizierung von OSD wird beim Erstellen des Clusters konfiguriert. Die WIF-Audience von Trident ist eine separate Installationseinstellung; zum Aktivieren von WIF für Trident ist keine Neuerstellung des Clusters erforderlich.
Vor der Installation oder Konfiguration von Trident muss die für die Installation verwendete OpenShift Identität über die für die gewählte Installationsmethode erforderlichen Clusterberechtigungen verfügen. Nach der Installation ist sicherzustellen, dass die Controller- und Node-Pods fehlerfrei funktionieren:
oc whoami
oc auth can-i create namespaces
oc auth can-i create csidrivers.storage.k8s.io
oc auth can-i create customresourcedefinitions.apiextensions.k8s.io
oc auth can-i create securitycontextconstraints.security.openshift.io
oc -n trident get pods
oc -n trident rollout status deploy/trident-controller --timeout=300s
oc -n trident rollout status ds/trident-node-linux --timeout=300s
Installation von Trident mit der WIF Zielgruppe
Trident stellt das Token für WIF nur dann bereit, wenn Sie die Zielgruppe während der Installation konfigurieren. Im Google Cloud-Provider und im Backend wipCredentialConfig.audience wird dieselbe Zielgruppe verwendet:
//iam.googleapis.com/projects/<wif-pool-project-number>/locations/global/workloadIdentityPools/<pool-id>/providers/<provider-id>
Das Festlegen cloudProvider auf GCP und das Konfigurieren gcpWIFAudience erfolgt mit der von Ihnen gewählten Installationsmethode:
tridentctl install \
--cloud-provider GCP \
--gcp-wif-audience "<audience>" \
--namespace trident
Folgende Felder sind in der `TridentOrchestrator`Spezifikation festzulegen:
spec:
cloudProvider: GCP
gcpWIFAudience: "<audience>"
Diese Werte werden bei der Installation des Charts festgelegt:
helm install trident netapp-trident/trident-operator \
--set cloudProvider=GCP \
--set-string gcpWIFAudience="<audience>"
Für OpenShift WIF darf die GKE cloudIdentity / --cloud-identity Option ebenfalls nicht gesetzt werden. Das Trident controller Deployment sollte nach der Installation nicht gepatcht werden; der Operator setzt manuelle Änderungen zurück. Das projizierte Token ist für das Backend unter /var/run/secrets/wif-token/token verfügbar. Der trident-main container enthält keine Shell, daher empfiehlt sich die Prüfung der Volume-Konfiguration des controller Deployment anstelle von oc exec zum Prüfen der Datei:
oc -n trident get deploy trident-controller -o yaml
Konfiguration von Google Cloud Vertrauen und Berechtigungen
Für den Cluster werden ein Google Cloud Workload Identity Pool und ein OIDC-Provider konfiguriert. Der Aussteller des Providers muss mit dem Claim iss des Tokens übereinstimmen, und seine Attributzuordnung muss assertion.sub auf google.subject erfassen. Die zulässige Zielgruppe des Providers muss mit dem Claim aud des projizierten Tokens übereinstimmen.
Öffentliche .well-known/openid-configuration und JWKS-Endpunkte sind nur bei Verwendung der OIDC-Erkennung erforderlich. Google unterstützt auch das direkte Hochladen der JWKS-Datei über jwksJson oder --jwk-json-path.
Dem WIF-Prinzipal wird die roles/iam.workloadIdentityUser`Rolle für das Google Cloud-Dienstkonto zugewiesen, dessen Identität Trident annimmt. Für ein Token-Subjekt vom Typ `system:serviceaccount:trident:trident-controller hat der Prinzipal die folgende Form:
principal://iam.googleapis.com/projects/<wif-pool-project-number>/locations/global/workloadIdentityPools/<pool-id>/subject/system:serviceaccount:trident:trident-controller
Dem Dienstkonto, dessen Identität angenommen wird roles/netapp.admin, sind für das Projekt, das die Google Cloud NetApp Volumes Ressourcen enthält, oder für eine entsprechende benutzerdefinierte Rolle die erforderlichen Berechtigungen zu erteilen. Dabei handelt es sich um separate Berechtigungsvergaben: Die erste erlaubt die Impersonation, und die zweite autorisiert Vorgänge über die Storage API.
Wenn die Token-Zielgruppe und die Anbieterkonfiguration nicht übereinstimmen, kann der Google Security Token Service den Austausch mit einem `invalid_grant`Zielgruppenfehler ablehnen. Die Anbieterkonfiguration kann wie folgt überprüft werden:
gcloud iam workload-identity-pools providers describe <provider-id> \
--project=<wif-pool-project-id> \
--location=global \
--workload-identity-pool=<pool-id> \
--format="yaml(oidc.allowedAudiences,oidc.issuerUri,attributeMapping)"
Beim Diagnostizieren der Token-Konfiguration empfiehlt sich ein Vergleich der Claims des Tokens iss, aud und sub mit der Provider- und IAM-Konfiguration. Eine Weitergabe oder Protokollierung des vollständigen projizierten Tokens ist zu vermeiden.
Google Cloud NetApp Volumes Storage vorbereiten
In der vom Backend verwendeten Region ist ein Storage Pool zu erstellen oder zu identifizieren. NAS Backends benötigen einen FILE Pool; SAN Backends verwenden die in "Blockspeicher konfigurieren (iSCSI)" beschriebenen Flex Unified Pools. Es ist sicherzustellen, dass die VPC- und Private Service Access (PSA)-Konfiguration des Pools für das Cluster-Netzwerk geeignet ist.
Beispielsweise ist es sinnvoll, die vorhandenen globalen VPC-Peering-Bereiche für ein Netzwerk aufzulisten, bevor der PSA-Bereich für einen Pool ausgewählt wird:
gcloud compute addresses list \
--project <gcnv-project-id> \
--global \
--filter="purpose=VPC_PEERING AND network:<network-name>" \
--format="table(name,address,prefixLength,status,network,purpose)"
Für location wird die Region des Pools verwendet, und bei Bedarf erfolgt die explizite Auswahl des Pools in storagePools über seinen vollständigen Ressourcenpfad. Abweichungen zwischen Region und Poolstandort, ein falsches Netzwerk oder ein nicht verfügbarer Pool können die Erkennung oder Provisionierung verhindern, auch wenn die Authentifizierung erfolgreich ist.
Konfiguration des Trident Backend
Die Zielgruppe für das projizierte Token wird sowohl in der Anbieterkonfiguration als auch in der Konfigurationsdatei wipCredentialConfig.audience verwendet. Das projectNumber Feld identifiziert das Google Cloud NetApp Volumes Projekt; die Zielgruppe verwendet die Projektnummer, die den Workload Identity Pool enthält. In diesem Beispiel werden die Platzhalter durch die Werte für Ihre Umgebung ersetzt:
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: gcnv-nas-wif
namespace: trident
spec:
version: 1
storageDriverName: google-cloud-netapp-volumes
projectNumber: "<project-number>"
location: "<region>"
sdkTimeout: "600"
storage:
- labels:
cloud: gcp
network: "<vpc-network>"
serviceLevel: Premium
wipCredentialConfig:
type: external_account
audience: "//iam.googleapis.com/projects/<wif-pool-project-number>/locations/global/workloadIdentityPools/<pool-id>/providers/<provider-id>"
subject_token_type: urn:ietf:params:oauth:token-type:jwt
token_url: https://sts.googleapis.com/v1/token
credential_source:
file: /var/run/secrets/wif-token/token
service_account_impersonation_url: https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<service-account-email>:generateAccessToken
Für ein SAN-Backend werden google-cloud-netapp-volumes-san als storageDriverName sowie die entsprechenden Flex Unified Pool-Einstellungen verwendet. Die WIF Anmeldeinformationskonfiguration ist ansonsten für beide Treiber identisch.
Anwenden des Backends und Überprüfen seines beobachteten Status:
oc apply -f <backend-file>.yaml
oc -n trident get tridentbackendconfig <backend-name> -o yaml
Vor dem Testen der Provisionierung sollte bestätigt werden, dass das Backend Bound ist und der letzte Vorgang erfolgreich war. Die Live spec und status sollten überprüft werden; eine zuvor angewendete Konfigurationsanmerkung spiegelt spätere Änderungen möglicherweise nicht wider. Bei der Verwendung von WIF sollten keine statischen apiKey Anmeldeinformationen angegeben werden.
Überprüfung der End-to-End Provisionierung
Es sind eine StorageClass, die auf das Backend abzielt, und anschließend eine kleine Test-PVC zu erstellen. Beispielsweise kann eine NAS StorageClass ein Backend-Label auswählen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcnv-wif-smoke
provisioner: csi.trident.netapp.io
parameters:
backendType: "google-cloud-netapp-volumes"
selector: "auth=wif"
allowVolumeExpansion: true
Zum Storage-Eintrag des NAS-Backends ist der passende auth: wif Bezeichner hinzuzufügen, anschließend eine PVC mithilfe von gcnv-wif-smoke zu erstellen und zu überprüfen, dass sie Bound erreicht. Für einen SAN Smoke Test dienen google-cloud-netapp-volumes-san, die SAN-Treibereinstellungen und ein geeigneter Flex Unified Pool. Nach Abschluss sind die Test-PVC und die StorageClass zu löschen.
Behebung häufiger Fehler
| Symptom | Was überprüft werden sollte |
|---|---|
|
Ein Vergleich des projizierten Tokens |
|
Zu prüfen ist, ob der exakte WIF-Prinzipal des Trident Controller |
|
Es ist zu prüfen, ob das Dienstkonto, dessen Identität übernommen wird, im richtigen Projekt über Berechtigungen für Google Cloud NetApp Volumes verfügt, z. B. |
Keine Pools gefunden oder Pool nicht gefunden |
Zu überprüfen sind das Backend |
Das Backend bleibt ungebunden |
Die Trident Controller-Protokolle und der Status von TridentBackendConfig geben Aufschluss über zugrunde liegende Fehler bei der Authentifizierung, bei Berechtigungen oder bei der Pool-Erkennung. |
Zur Überprüfung der Controller-Protokolle auf Backend-Abgleichsfehler:
oc -n trident logs deploy/trident-controller -c trident-main --tail=400
NAS-Speicher konfigurieren
|
|
Für Google Cloud NetApp Volumes UNIFIED-Speicherpools wendet Trident während der Volume-Operationen UNIFIED-spezifische Namens- und Validierungsregeln an. |
Beim Auffinden eines Volumes kann Trident mehrere kompatible Varianten des Volumennamens (z. B. Bindestrich- und Unterstrichformate) auswerten, um die Zuverlässigkeit von Import und Erkennung zu verbessern.
Treiberdetails
Trident stellt den google-cloud-netapp-volumes Treiber zur Verfügung, um NAS-Speicher von Google Cloud NetApp Volumes bereitzustellen.
Der Treiber unterstützt die folgenden Zugriffsmodi:
-
ReadWriteOnce (RWO)
-
ReadOnlyMany (ROX)
-
ReadWriteMany (RWX)
-
ReadWriteOncePod (RWOP)
| Treiber | Protokoll | VolumeModus | Unterstützte Zugriffsmodi | Unterstützte Filesysteme |
|---|---|---|---|---|
|
NFS SMB |
Dateisystem |
RWO, ROX, RWX, RWOP |
|
Konfigurieren Sie ein Trident NAS-Backend
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: gcnv-nas
namespace: trident
spec:
version: 1
storageDriverName: google-cloud-netapp-volumes
projectNumber: "<project-number>"
location: "<region>"
sdkTimeout: "600"
storage:
- labels:
cloud: gcp
network: "<vpc-network>"
NAS-Volumen bereitstellen
NAS-Volumes werden mit dem google-cloud-netapp-volumes Backend bereitgestellt und unterstützen die Protokolle NFS und SMB.
StorageClass for NFS-Volumes
Um NFS-Volumes bereitzustellen, setzen Sie nasType auf nfs.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcnv-nfs
provisioner: csi.trident.netapp.io
parameters:
backendType: "google-cloud-netapp-volumes"
trident.netapp.io/nasType: "nfs"
allowVolumeExpansion: true
StorageClass für SMB-Volumes
Um SMB-Volumes bereitzustellen, setzen Sie nasType auf smb und geben Sie die Anmeldeinformationen an.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcnv-smb
provisioner: csi.trident.netapp.io
parameters:
backendType: "google-cloud-netapp-volumes"
trident.netapp.io/nasType: "smb"
csi.storage.k8s.io/node-stage-secret-name: "smbcreds"
csi.storage.k8s.io/node-stage-secret-namespace: "default"
allowVolumeExpansion: true
PersistentVolumeClaim-Beispiel (RWX)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-nas-rwx
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
storageClassName: gcnv-nfs
PersistentVolumeClaim-Beispiel (RWO)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-nas-rwo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: gcnv-nfs
|
|
NAS-Volumes verwenden volumeMode: Filesystem.
|