Configurazione di pod per utilizzare un account di servizio Kubernetes - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Configurazione di pod per utilizzare un account di servizio Kubernetes

Se un pod deve accedere ai servizi AWS, è necessario configurarlo per utilizzare un account di servizio Kubernetes. L’account del servizio deve essere associato a un ruolo di gestione di identità AWS e degli accessi (IAM) che dispone delle autorizzazioni per accedere ai servizi AWS.

  • Un cluster esistente. Se non se ne possiede già uno, crearlo utilizzando una delle guide in Nozioni 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. Il ruolo deve avere una policy IAM associata 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 Assegnare ruoli IAM agli account di servizio Kubernetes.

  • La versione 2.12.3 o successiva oppure la versione 1.27.160 o successiva dell’interfaccia a riga di comando AWS (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 programmi di gestione dei pacchetti, come yum, apt-get o Homebrew per macOS, spesso sono aggiornati a versioni precedenti dell’AWS CLI. Per installare la versione più recente, consulta Installazione e Configurazione rapida con aws configure nella Guida per l’utente dell’interfaccia a riga di comando AWS. La versione della AWS CLI installata in AWS CloudShell potrebbe anche essere precedente di diverse versioni rispetto alla più recente. Per aggiornarla, consulta Installing AWS CLI to your home directory nella Guida per l’utente di AWS CloudShell.

  • Lo strumento a riga di comando kubectl è installato sul dispositivo o su AWS CloudShell. La versione può essere la stessa o immediatamente 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 Impostazione di kubectl e eksctl:

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

    1. Utilizza il seguente comando per creare un manifesto di implementazione per implementare un pod con cui confermare la configurazione. Sostituire i valori di esempio con i propri valori.

      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 le variabili di ambiente richieste esistano per i pod.

      1. Visualizza i pod distribuiti con l’implementazione nella fase 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 che il pod sta utilizzando.

        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 Assegnare ruoli IAM agli account di servizio Kubernetes.

      3. Conferma che il pod abbia un file di token di identità web montato.

        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

        kubelet richiede e memorizza 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. È possibile modificare la durata di scadenza per qualsiasi account, ad eccezione dell’account di servizio predefinito, con le impostazioni nelle specifiche del pod. Per ulteriori informazioni, consultare Proiezione Volume Token Acount di Servizio nella documentazione di Kubernetes.

        Il Webhook di Pod Identity di Amazon EKS sugli orologi del cluster per 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 questi pod. Il cluster non deve utilizzare il webhook per configurare le variabili di ambiente e i montaggi del file di token. È possibile configurare manualmente i pod per ottenere queste variabili di ambiente. Le versioni supportate dell'SDK AWS cercano queste variabili di ambiente prima nel provider della catena di credenziali. Le credenziali del ruolo sono utilizzate per i pod che soddisfano questi criteri.

    4. Conferma che i tuoi pod possano interagire con i servizi AWS utilizzando le autorizzazioni assegnate nella policy IAM allegata al tuo ruolo.

      Nota

      Quando un pod utilizza le credenziali AWS da un ruolo IAM associato a un account di servizio, AWS CLI o altri SDK nei container per tale pod utilizzano le credenziali fornite da tale ruolo. Se non si limita l’accesso alle credenziali fornite al ruolo IAM del nodo di Amazon EKS, il pod ha comunque accesso a tali credenziali. Per ulteriori informazioni, consulta Limitazione dell'accesso al profilo dell'istanza assegnato al nodo worker.

      Se il tuo pod non riesce a interagire con i servizi come previsto, completa i seguenti passaggi per confermare che tutto sia configurato correttamente.

      1. Conferma che i pod utilizzano una versione di SDK AWS che supporta l’assunzione di un ruolo IAM tramite un file di token di identità Web OpenID Connect. Per ulteriori informazioni, consulta Usa IRSA con AWS SDK.

      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, controlla i passaggi descritti in Assign IAM roles to Kubernetes service accounts per confermare che il ruolo e l’account del servizio siano configurati correttamente.