Configurare il driver CSI di Cloud Storage FUSE per GKE

Questa pagina descrive come configurare e prepararsi a utilizzare il driver CSI FUSE di Cloud Storage per GKE.

Per utilizzare il driver CSI di Cloud Storage FUSE:

Crea il bucket Cloud Storage

Se non l'hai ancora fatto, crea i bucket Cloud Storage. Questi bucket verranno montati come volumi nel cluster GKE. Per migliorare le prestazioni, imposta Tipo di località su Regione e seleziona una regione che corrisponda al tuo cluster GKE.

Abilita il driver CSI di Cloud Storage FUSE

Segui questi passaggi, a seconda che tu stia utilizzando cluster GKE Autopilot o Standard. Ti consigliamo di utilizzare un cluster Autopilot per un'esperienza Kubernetes completamente gestita. Per scegliere la modalità più adatta ai tuoi workload, consulta Scegliere una modalità operativa GKE.

Autopilot

Il driver CSI di Cloud Storage FUSE è abilitato per impostazione predefinita per i cluster Autopilot. Puoi passare a Configurare l'accesso ai bucket Cloud Storage.

Standard

Se nel cluster Standard è abilitato il driver CSI di Cloud Storage FUSE, vai a Configurare l'accesso ai bucket Cloud Storage.

Il driver CSI di Cloud Storage FUSE non è abilitato per impostazione predefinita nei cluster Standard. Per creare un cluster Standard con il driver CSI di Cloud Storage FUSE abilitato, puoi utilizzare il comando gcloud container clusters create:

gcloud container clusters create CLUSTER_NAME \
    --addons GcsFuseCsiDriver \
    --cluster-version=VERSION \
    --location=LOCATION \
    --workload-pool=PROJECT_ID.svc.id.goog

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del tuo cluster.
  • VERSION: il numero di versione di GKE. Devi selezionare la versione 1.24 o successive.
  • LOCATION: la regione o zona di Compute Engine per il cluster.
  • PROJECT_ID: il tuo ID progetto.

Per abilitare il driver su un cluster Standard esistente, utilizza il comando gcloud container clusters update:

gcloud container clusters update CLUSTER_NAME \
    --update-addons GcsFuseCsiDriver=ENABLED \
    --location=LOCATION

Per verificare che il driver CSI di Cloud Storage FUSE sia abilitato sul cluster, esegui il seguente comando:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"

Configura l'accesso ai bucket Cloud Storage

Il driver CSI di Cloud Storage FUSE utilizza Workload Identity Federation for GKE per consentirti di impostare autorizzazioni granulari su come i pod GKE possono accedere ai dati archiviati in Cloud Storage.

Per rendere accessibili i tuoi bucket Cloud Storage dal tuo cluster GKE, esegui l'autenticazione utilizzando Workload Identity Federation for GKE con il bucket Cloud Storage che vuoi montare nella specifica del pod:

  1. Se non hai attivato la federazione delle identità per i carichi di lavoro per GKE, segui questi passaggi per attivarla. Se vuoi utilizzare un pool di nodi esistente, abilita manualmente Workload Identity Federation for GKE sul pool di nodi dopo aver abilitato Workload Identity Federation for GKE sul cluster.
  2. Recupera le credenziali per il tuo cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster con la federazione delle identità per i carichi di lavoro per GKE abilitata.
    • LOCATION: la regione o zona di Compute Engine per il cluster.
  3. Crea uno spazio dei nomi da utilizzare per Kubernetes ServiceAccount. Puoi anche utilizzare lo spazio dei nomi default o qualsiasi spazio dei nomi esistente.

    kubectl create namespace NAMESPACE
    

    Sostituisci NAMESPACE con il nome dello spazio dei nomi Kubernetes per il service account Kubernetes.

  4. Crea un service account Kubernetes da utilizzare per la tua applicazione. Puoi anche utilizzare qualsiasi ServiceAccount Kubernetes esistente in qualsiasi spazio dei nomi, incluso il ServiceAccount Kubernetes default.

    kubectl create serviceaccount KSA_NAME \
        --namespace NAMESPACE
    

    Sostituisci KSA_NAME con il nome del tuo ServiceAccount Kubernetes.

  5. Concedi uno dei ruoli IAM per Cloud Storage al service account Kubernetes. Segui questi passaggi, a seconda che tu stia concedendo l'accesso a Kubernetes ServiceAccount a un bucket Cloud Storage specifico o l'accesso globale a tutti i bucket del progetto.

    Accesso a bucket specifici

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket Cloud Storage.
    • PROJECT_NUMBER: il numero di progetto numerico del cluster GKE. Per trovare il numero di progetto, consulta Identificazione dei progetti.
    • PROJECT_ID: l'ID progetto del tuo cluster GKE.
    • NAMESPACE: il nome dello spazio dei nomi Kubernetes per il ServiceAccount Kubernetes.
    • KSA_NAME: il nome del nuovo service account Kubernetes.
    • ROLE_NAME: il ruolo IAM da assegnare al tuo service account Kubernetes.
      • Per i carichi di lavoro di sola lettura, utilizza il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer).
      • Per i carichi di lavoro di lettura/scrittura, utilizza il ruolo Utente oggetti Storage (roles/storage.objectUser).

    Accesso globale al bucket

    gcloud projects add-iam-policy-binding GCS_PROJECT \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

    Sostituisci quanto segue:

    • GCS_PROJECT: l'ID progetto dei tuoi bucket Cloud Storage.
    • PROJECT_NUMBER: il numero di progetto numerico del cluster GKE. Per trovare il numero di progetto, consulta Identificazione dei progetti.
    • PROJECT_ID: l'ID progetto del tuo cluster GKE.
    • NAMESPACE: il nome dello spazio dei nomi Kubernetes per il ServiceAccount Kubernetes.
    • KSA_NAME: il nome del nuovo service account Kubernetes.
    • ROLE_NAME: il ruolo IAM da assegnare al tuo service account Kubernetes.
      • Per i carichi di lavoro di sola lettura, utilizza il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer).
      • Per i carichi di lavoro di lettura/scrittura, utilizza il ruolo Utente oggetti Storage (roles/storage.objectUser).

Configurare l'accesso per i pod con la rete host

Per le versioni del cluster GKE precedenti a 1.33.3-gke.1226000, il driver CSI di Cloud Storage FUSE non supporta i pod in esecuzione sulla rete host (hostNetwork: true) a causa delle limitazioni di Workload Identity Federation for GKE. Tuttavia, per le versioni successive di GKE, puoi configurare l'autenticazione sicura per i pod con hostNetwork abilitato quando utilizzi il driver CSI di Cloud Storage FUSE per montare i bucket Cloud Storage. Il supporto della rete host è disponibile solo sui cluster GKE standard.

Assicurati che il tuo cluster GKE soddisfi i seguenti requisiti:

  • Sia il control plane che i node pool nel cluster GKE Standard devono avere la versione 1.33.3-gke.1226000 o successive.
  • Abilita Workload Identity sul cluster.
  • Concedi le autorizzazioni IAM necessarie al service account Kubernetes utilizzato dal pod abilitato per hostNetwork per accedere al bucket Cloud Storage. Per maggiori informazioni, consulta Autenticarsi in Cloud Storage FUSE.

Specifica l'attributo del volume hostNetworkPodKSA: "true" nella definizione del pod o di PersistentVolume per consentire ai pod HostNetwork di accedere ai volumi Cloud Storage. La configurazione esatta varia in base a come gestisci il container sidecar Cloud Storage FUSE.

Sidecar gestiti

Questa sezione si applica se GKE inserisce e gestisce automaticamente il container sidecar Cloud Storage FUSE nei tuoi pod. Questa opzione è la configurazione predefinita e consigliata per il driver CSI di Cloud Storage FUSE.

Volume temporaneo

Il seguente manifest del pod configura un volume effimero per un pod HostNetwork per accedere a un bucket Cloud Storage.

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: ns1
  annotations:
    gke-gcsfuse/volumes: "true"
spec:
  serviceAccountName: test-ksa-ns1
  hostNetwork: true
  containers:
  - image: busybox
    name: busybox
    command:
      - sleep
      - "3600"
    volumeMounts:
    - name: gcs-fuse-csi-ephemeral
      mountPath: /data
  volumes:
  - name: gcs-fuse-csi-ephemeral
    csi:
      driver: gcsfuse.csi.storage.gke.io
      volumeAttributes:
        bucketName: test-bucket
        hostNetworkPodKSA: "true"

Volume permanente

Il seguente manifest PV configura un PV per un pod HostNetwork per accedere a un bucket Cloud Storage.

apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
  storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
  - uid=1001
  - gid=3003
csi:
  driver: gcsfuse.csi.storage.gke.io
  volumeHandle: test-wi-host-network-2
  volumeAttributes:
    hostNetworkPodKSA: "true"

Sidecar privati

Questa sezione si applica se gestisci manualmente il container sidecar Cloud Storage FUSE all'interno dei tuoi pod o utilizzi un'immagine sidecar personalizzata.

Assicurati che l'immagine sidecar sia basata sulla versione v1.17.2 o successive del driver CSI di Cloud Storage FUSE.

Volume temporaneo

Il seguente manifest del pod configura un volume effimero per un pod HostNetwork per accedere a un bucket Cloud Storage.

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: ns1
  annotations:
    gke-gcsfuse/volumes: "true"
spec:
  serviceAccountName: test-ksa-ns1
  hostNetwork: true
  containers:
  - image: busybox
    name: busybox
    command:
      - sleep
      - "3600"
    volumeMounts:
    - name: gcs-fuse-csi-ephemeral
      mountPath: /data
  volumes:
  - name: gcs-fuse-csi-ephemeral
    csi:
      driver: gcsfuse.csi.storage.gke.io
      volumeAttributes:
        bucketName: test-bucket
        hostNetworkPodKSA: "true"
        identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"

Nel campo identityProvider, sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto Trusted Cloud by S3NS .
  • LOCATION: la posizione del cluster.
  • CLUSTER_NAME: il nome del tuo cluster GKE Standard.

Volume permanente

Il seguente manifest PV configura un PV per un pod HostNetwork per accedere a un bucket Cloud Storage.

apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
  storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
  - uid=1001
  - gid=3003
csi:
  driver: gcsfuse.csi.storage.gke.io
  volumeHandle: test-wi-host-network-2
  volumeAttributes:
    hostNetworkPodKSA: "true"
    identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"

Nel campo identityProvider, sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto Trusted Cloud by S3NS .
  • LOCATION: la posizione del cluster.
  • CLUSTER_NAME: il nome del tuo cluster GKE Standard.

Passaggi successivi