Configura Pods per utilizzare un account di servizio Kubernetes - Amazon EKS

Aiutaci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura Pods per utilizzare un account di servizio Kubernetes

Se un Pod deve accedere ai AWS servizi, devi configurarlo per utilizzare un account di servizio Kubernetes. L'account di servizio deve essere associato a un ruolo AWS Identity and Access Management (IAM) con le autorizzazioni per accedere ai servizi AWS .

  • Un cluster esistente. Se non ne hai uno, puoi crearne uno utilizzando una delle guide inNozioni di base su Amazon EKS.

  • Creare un provider di identità OpenID Connect (OIDC) IAM per il cluster. Per sapere se disponi di un account o, per crearne uno, consulta Per creare un provider di identità IAM OIDC per il cluster.

  • Un account di servizio Kubernetes esistente associato a un ruolo IAM. L'account del servizio deve essere annotato con il nome della risorsa Amazon (ARN) del ruolo IAM. Al ruolo deve essere associata una policy IAM che contenga le autorizzazioni che desideri che i tuoi Pod abbiano per utilizzare i servizi. AWS Per ulteriori informazioni su come creare e configurare l'account e il ruolo del servizio, consulta Assegna ruoli IAM agli account di servizio Kubernetes.

  • Versione 2.12.3 o successiva o versione 1.27.160 o successiva dell'interfaccia a riga di AWS comando (AWS CLI) installata e configurata sul dispositivo o. AWS CloudShell Per verificare la versione attuale, usa aws --version | cut -d / -f2 | cut -d ' ' -f1. I gestori di pacchetti come yum Homebrew per macOS sono spesso diverse versioni dell'ultima versione della CLI AWS . apt-get Per installare la versione più recente, consulta Installazione e configurazione rapida con aws configure nella Guida per l'utente dell'interfaccia a riga di AWS comando. La versione AWS CLI installata in AWS CloudShell potrebbe anche contenere diverse versioni precedenti alla versione più recente. Per aggiornarlo, consulta Installazione della AWS CLI nella tua home directory nella Guida per l' AWS CloudShell utente.

  • Lo strumento a riga di comando kubectl è installato sul dispositivo o AWS CloudShell. La versione può essere la stessa o fino a una versione secondaria precedente o successiva alla versione Kubernetes del cluster. Ad esempio, se la versione del cluster è 1.29, puoi usare kubectl versione 1.28, 1.29 o 1.30. Per installare o aggiornare kubectl, consulta Configurazione kubectl e eksctl:

  • Un file kubectl config esistente che contiene la configurazione del cluster. Per creare un file kubectl config, consulta Connect kubectl a un cluster EKS creando un file kubeconfig.

    1. Usa il comando seguente per creare un manifesto di distribuzione con cui distribuire un Pod per confermare la configurazione. Sostituisci i example values con i valori in tuo possesso.

      cat >my-deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: serviceAccountName: my-service-account containers: - name: my-app image: public.ecr.aws/nginx/nginx:X.XX EOF
    2. Implementa il file manifesto al cluster.

      kubectl apply -f my-deployment.yaml
    3. Verifica che esistano le variabili di ambiente richieste per il tuo Pod.

      1. Visualizza i Pod che sono stati distribuiti con la distribuzione nel passaggio precedente.

        kubectl get pods | grep my-app

        Di seguito viene riportato un output di esempio:

        my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
      2. Visualizza l'ARN del ruolo IAM utilizzato dal Pod.

        kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_ROLE_ARN:

        Di seguito viene riportato un output di esempio:

        AWS_ROLE_ARN: arn:aws: iam::111122223333:role/my-role

        Il ruolo ARN deve corrispondere al ruolo ARN con cui hai annotato l'account del servizio esistente. Per ulteriori informazioni sull'annotazione dell'account del servizio, consulta Assegna ruoli IAM agli account di servizio Kubernetes.

      3. Verifica che il Pod disponga di un file con token di identità Web.

        kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_WEB_IDENTITY_TOKEN_FILE:

        Di seguito viene riportato un output di esempio:

        AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token

        kubeletRichiede e archivia il token per conto del Pod. Per impostazione predefinita, la kubelet aggiorna il token se è più vecchio dell'80% del suo tempo totale di vita o se il token è più vecchio di 24 ore. Puoi modificare la durata di scadenza per qualsiasi account diverso dall'account di servizio predefinito utilizzando le impostazioni nelle specifiche del tuo Pod. Per ulteriori informazioni, consultare Proiezione Volume Token Acount di Servizio nella documentazione di Kubernetes.

        Il webhook Amazon EKS Pod Identity sul cluster controlla i Pod che utilizzano un account di servizio con la seguente annotazione:

        eks.amazonaws.com/role-arn: arn:aws: iam::111122223333:role/my-role

        Il webhook applica le variabili di ambiente precedenti a quei Pod. Il cluster non ha bisogno di utilizzare il webhook per configurare le variabili di ambiente e il montaggio dei file token. Puoi configurare manualmente i Pod per avere queste variabili di ambiente. Le versioni supportate dell' AWS SDK cercano queste variabili di ambiente prima nel provider della catena di credenziali. Le credenziali del ruolo vengono utilizzate per i Pod che soddisfano questi criteri.

    4. Verifica che i tuoi Pod possano interagire con AWS i servizi utilizzando le autorizzazioni che hai assegnato nella policy IAM allegata al tuo ruolo.

      Nota

      Quando un Pod utilizza AWS le credenziali di un ruolo IAM associato a un account di servizio, la AWS CLI o SDKs altro nei contenitori per quel Pod utilizza le credenziali fornite da quel ruolo. Se non limiti l'accesso alle credenziali fornite al ruolo IAM del nodo Amazon EKS, il Pod ha comunque accesso a queste credenziali. Per ulteriori informazioni, consulta Limitazione dell'accesso al profilo dell'istanza assegnato al nodo worker.

      Se i tuoi Pod non riescono a interagire con i servizi come previsto, completa i seguenti passaggi per confermare che tutto sia configurato correttamente.

      1. Verifica che i tuoi Pod utilizzino una versione AWS SDK che supporti l'assunzione di un ruolo IAM tramite un file di token di identità web OpenID Connect. Per ulteriori informazioni, consulta Usa IRSA con l'SDK AWS.

      2. Conferma che l'implementazione stia utilizzando l'account del servizio.

        kubectl describe deployment my-app | grep "Service Account"

        Di seguito viene riportato un output di esempio:

        Service Account: my-service-account
      3. Se i tuoi Pod non riescono ancora ad accedere ai servizi, consulta i passaggi descritti in Assegnare i ruoli IAM agli account di servizio Kubernetes per confermare che il ruolo e l'account di servizio siano configurati correttamente.