Risoluzione dei problemi — Bucket S3
AccessDenied durante l'accesso al bucket
Causa: le credenziali utilizzate sono errate, oppure il nome del bucket utilizzato non corrisponde al nome reale nel backend S3.
Soluzione:
-
Recuperate le credenziali dal Secret Kubernetes:
kubectl get tenantsecret bucket-<name> -o jsonpath='{.data.BucketInfo}' | base64 -d | jq -
Utilizzate il campo
spec.bucketNamecome nome del bucket (e nonmetadata.name):aws --endpoint-url https://prod.s3.hikube.cloud s3 ls s3://<spec.bucketName>/ -
Verificate che
accessKeyIDeaccessSecretKeysiano correttamente configurati nel vostro strumento S3.
ListBucket fallisce sulla root
Causa: ogni bucket possiede le proprie credenziali isolate. Non è possibile elencare tutti i bucket con un unico set di credenziali.
Soluzione:
-
Utilizzate le credenziali specifiche del bucket che desiderate elencare:
aws --endpoint-url https://prod.s3.hikube.cloud s3 ls s3://<spec.bucketName>/ -
Per elencare tutti i vostri bucket, utilizzate
kubectl:kubectl get buckets -
Per ogni bucket, recuperate le credenziali individuali dal Secret corrispondente.
Credenziali introvabili
Causa: il nome del Secret segue il pattern bucket-<name> dove <name> è il metadata.name della risorsa Bucket.
Soluzione:
-
Elencate i Secret disponibili:
kubectl get tenantsecrets | grep bucket- -
Estraete le informazioni di accesso:
kubectl get tenantsecret bucket-<name> -o jsonpath='{.data.BucketInfo}' | base64 -d | jq -
Per estrarre solo le chiavi:
kubectl get tenantsecret bucket-<name> -o jsonpath='{.data.BucketInfo}' \
| base64 -d \
| jq -r '.spec.secretS3 | "\(.accessKeyID) \(.accessSecretKey)"'
Upload lento o timeout
Causa: problema di rete, dimensione del file importante senza multipart upload, o endpoint distante.
Soluzione:
-
Verificate la vostra connettività verso l'endpoint:
curl -s -o /dev/null -w "%{time_total}" https://prod.s3.hikube.cloud -
Utilizzate l'endpoint regionale
https://prod.s3.hikube.cloud(senza CDN intermedio). -
Per file voluminosi, attivate il multipart upload:
aws --endpoint-url https://prod.s3.hikube.cloud s3 cp large-file.tar.gz s3://<bucket-name>/ \
--expected-size $(stat -c%s large-file.tar.gz) -
Con
mc, il multipart è automatico per i file superiori a 64 MB.
Bucket non trovato dopo la creazione
Causa: il nome reale del bucket nel backend S3 (spec.bucketName) differisce dal metadata.name della risorsa Kubernetes.
Soluzione:
-
Verificate lo stato della risorsa Bucket:
kubectl get bucket <name>
kubectl describe bucket <name> -
Recuperate il nome reale del bucket dal Secret:
kubectl get tenantsecret bucket-<name> -o jsonpath='{.data.BucketInfo}' \
| base64 -d \
| jq -r '.spec.bucketName' -
Utilizzate questo nome reale per accedere al bucket:
aws --endpoint-url https://prod.s3.hikube.cloud s3 ls s3://<real-bucket-name>/
Non confondete metadata.name (nome Kubernetes) e spec.bucketName (nome reale in S3). Solo il secondo funziona per l'accesso S3.