Configurazione dell'Amazon VPC CNI plugin for Kubernetesutilizzo dei ruoli IAM per gli account di servizio (IRSA) - Amazon EKS

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à.

Configurazione dell'Amazon VPC CNI plugin for Kubernetesutilizzo dei ruoli IAM per gli account di servizio (IRSA)

Il Amazon VPC CNI plugin for Kubernetes è il plug-in per reti Pod nei cluster Amazon EKS. Il plug-in è responsabile dell'allocazione degli indirizzi IP VPC sui nodi Kubernetes e della configurazione delle reti necessarie per Pods in ogni nodo. Il plug-in:

  • Richiede autorizzazioni AWS Identity and Access Management (IAM). Se il cluster utilizza la famiglia IPv4, le autorizzazioni sono specificate nella politica gestita. AmazonEKS_CNI_Policy AWS Se il cluster utilizza la famiglia IPv6, le autorizzazioni devono essere aggiunte a una policy IAM creata dall'utente.È possibile collegare questa policy al ruolo del nodo IAM Amazon EKS o a un ruolo IAM separato. Si consiglia di assegnarlo a un ruolo separato, come descritto in questo argomento.

  • Crea ed è configurato per l'utilizzo di un account di servizio Kubernetes denominato aws-node quando viene implementato. L'account di servizio è associato a un clusterrole Kubernetes denominato aws-node, a cui vengono assegnate le autorizzazioni Kubernetes necessarie.

Nota

I Pods per il Amazon VPC CNI plugin for Kubernetes hanno accesso alle autorizzazioni assegnate al ruolo IAM del nodo Amazon EKS, a meno che non si blocchi l'accesso al servizio di metadati a IMDS. Per ulteriori informazioni, consulta Limita l'accesso al profilo dell'istanza assegnato al nodo (worker).

Prerequisiti

Fase 1: creazione di un ruolo IAM per Amazon VPC CNI plugin for Kubernetes

Per creare il ruolo IAM
  1. Determina la famiglia IP del cluster.

    aws eks describe-cluster --name my-cluster | grep ipFamily

    Di seguito viene riportato un output di esempio:

    "ipFamily": "ipv4"

    L'output potrebbe invece restituire ipv6.

  2. Crea il ruolo IAM. Puoi usare eksctl or kubectl e the AWS CLI per creare il tuo ruolo IAM.

    eksctl

    Crea un ruolo IAM e collega ad esso la policy IAM con il comando corrispondente alla famiglia IP del cluster. Il comando crea e distribuisce uno AWS CloudFormation stack che crea un ruolo IAM, allega la policy specificata e annota l'account di aws-node Kubernetes servizio esistente con l'ARN del ruolo IAM creato.

    • IPv4

      Sostituire my-cluster con il proprio valore.

      eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --override-existing-serviceaccounts \ --approve
    • IPv6

      Sostituire my-cluster con il proprio valore. Sostituisci 111122223333 con il tuo ID account e AmazonEKS_CNI_IPv6_Policy con il nome della policy IPv6. Se non disponi di una policy IPv6, consulta Creare una policy IAM per i cluster che utilizzano la famiglia IPv6 per crearne una. Per utilizzare IPv6 con il cluster, questo deve soddisfare diversi requisiti. Per ulteriori informazioni, consulta IPv6indirizzi per i cluster Pods e services.

      eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --override-existing-serviceaccounts \ --approve
    kubectl and the AWS CLI
    1. Visualizza l'URL del provider OIDC del cluster.

      aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

      Di seguito viene riportato un output di esempio:

      https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE

      Se non viene restituito alcun output, devi creare un provider OIDC IAM per il cluster.

    2. Copia i contenuti seguenti in un file denominato vpc-cni-trust-policy.json. Sostituisci 111122223333 con il tuo ID account e EXAMPLED539D4633E53DE1B71EXAMPLE con l'output restituito nel passaggio precedente. Sostituiscilo region-code con quello in cui si trova il Regione AWS cluster.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
    3. Crea il ruolo. Puoi sostituire AmazonEKSVPCCNIRole con un nome a tua scelta.

      aws iam create-role \ --role-name AmazonEKSVPCCNIRole \ --assume-role-policy-document file://"vpc-cni-trust-policy.json"
    4. Allega la policy IAM richiesta al ruolo. Esegui il comando corrispondente alla famiglia IP del cluster.

      • IPv4

        aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSVPCCNIRole
      • IPv6

        Sostituisci 111122223333 con il tuo ID account e AmazonEKS_CNI_IPv6_Policy con il nome della policy IPv6. Se non disponi di una policy IPv6, consulta Creare una policy IAM per i cluster che utilizzano la famiglia IPv6 per crearne una. Per utilizzare IPv6 con il cluster, questo deve soddisfare diversi requisiti. Per ulteriori informazioni, consulta IPv6indirizzi per i cluster Pods e services.

        aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSVPCCNIRole
    5. Esegui il comando seguente per annotare l'account di servizio aws-node con l'ARN del ruolo IAM creato in precedenza. Sostituisci i example values con i valori in tuo possesso.

      kubectl annotate serviceaccount \ -n kube-system aws-node \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
  3. (Facoltativo) Configura il tipo di AWS Security Token Service endpoint utilizzato dal tuo account Kubernetes di servizio. Per ulteriori informazioni, consulta Configurazione dell’endpoint AWS Security Token Service per un account del servizio.

Fase 2: re-implementazione dei Pods per il Amazon VPC CNI plugin for Kubernetes

  1. Elimina e ricrea i Pods esistenti associati all'account di servizio per applicare le variabili di ambiente delle credenziali. L'annotazione non viene applicata ai Pods attualmente in esecuzione senza l'annotazione. Il comando seguente elimina i Pods aws-node DaemonSet esistenti e li implementa con l'annotazione dell'account di servizio.

    kubectl delete Pods -n kube-system -l k8s-app=aws-node
  2. Conferma che tutti i Pods sono stati riavviati.

    kubectl get pods -n kube-system -l k8s-app=aws-node
  3. Descrivi uno dei Pods e verifica che le variabili di ambiente AWS_WEB_IDENTITY_TOKEN_FILE e AWS_ROLE_ARNesistano. Sostituisci cpjw7 con il nome di uno dei Pods restituiti nell'output del passaggio precedente.

    kubectl describe pod -n kube-system aws-node-cpjw7 | grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'

    Di seguito viene riportato un output di esempio:

    AWS_ROLE_ARN:                 arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
          AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token
          AWS_ROLE_ARN:                           arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
          AWS_WEB_IDENTITY_TOKEN_FILE:            /var/run/secrets/eks.amazonaws.com/serviceaccount/token

    Vengono restituiti due set di risultati duplicati perché il Pod contiene due container. I due container hanno gli stessi valori.

    Se Pod si utilizza l'endpoint Regione AWS al, nell'output precedente viene restituita anche la riga seguente.

    AWS_STS_REGIONAL_ENDPOINTS=regional

Fase 3: rimozione della policy CNI dal ruolo IAM del nodo

Se al tuo ruolo IAM del nodo Amazon EKS è attualmente associata la IPv6policy AmazonEKS_CNI_Policy IAM (IPv4) o una policy e hai creato un ruolo IAM separato, invece hai collegato la policy ad esso e l'hai assegnata all'account di aws-node Kubernetes servizio, ti consigliamo di rimuovere la policy dal ruolo del nodo con il AWS CLI comando che corrisponde alla famiglia IP del tuo cluster. Sostituisci AmazonEKSNodeRole con il nome del ruolo del nodo.

  • IPv4

    aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  • IPv6

    Sostituisci 111122223333 con il tuo ID account e AmazonEKS_CNI_IPv6_Policy con il nome della policy IPv6.

    aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy

Creare una policy IAM per i cluster che utilizzano la famiglia IPv6

Se hai creato un cluster che utilizza la famiglia IPv6 e sul cluster è configurata la versione 1.10.1 o successiva del componente aggiuntivo Amazon VPC CNI plugin for Kubernetes, puoi creare una policy IAM che puoi assegnare a un ruolo IAM. Se disponi di un cluster che non hai configurato con la famiglia IPv6 al momento della creazione, prima di utilizzare IPv6, sarà necessario creare un nuovo cluster. Per ulteriori informazioni sull'uso di IPv6 con il cluster, consulta IPv6indirizzi per i cluster Pods e services.

  1. Copia il testo seguente e salvalo in un file denominato vpc-cni-ipv6-policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] }
  2. Creare la policy IAM.

    aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json