Configurare il plug-in CNI di Amazon VPC per l’utilizzo di IRSA - 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.

Configurare il plug-in CNI di Amazon VPC per l’utilizzo di IRSA

Il plug-in CNI di Amazon VPC per Kubernetes è il plug-in per reti Pod nei cluster Amazon EKS. Il plug-in è responsabile dell’allocazione degli indirizzi IP VPC sui pod Kubernetes e della configurazione delle reti necessarie per i Pod in ogni nodo.

Nota

Il plug-in CNI di Amazon VPC supporta anche Identità di Pod di Amazon EKS. Per ulteriori informazioni, consulta Assegnazione di un ruolo IAM a un account di servizio Kubernetes.

Il plug-in:

  • Richiede autorizzazioni di AWS Identity and Access Management (IAM). Se il cluster utilizza la famiglia IPv4, le autorizzazioni sono fornite dalla policy gestita da AmazonEKS_CNI_Policy AWS. Se il cluster utilizza la famiglia IPv6, le autorizzazioni devono essere aggiunte a una policy IAM creata dall’utente; per le istruzioni, consulta Creare una policy IAM per i cluster che utilizzano la famiglia IPv6. È possibile collegare questa policy al ruolo del nodo IAM Amazon EKS o a un ruolo IAM separato. Per istruzioni su come allegare la policy al ruolo IAM del nodo Amazon EKS, consulta Ruolo IAM del nodo Amazon EKS. 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 di nome aws-node, a cui vengono assegnate le autorizzazioni Kubernetes richieste.

Nota

I Pod per il plug-in CNI di Amazon VPC per 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 Limitazione dell’accesso al profilo dell’istanza assegnato al nodo worker.

Passaggio 1: Creazione di un ruolo IAM per il plug-in CNI di Amazon VPC per Kubernetes

  1. Determinare 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. Creare il ruolo IAM. Per creare il ruolo IAM puoi utilizzare eksctl o kubectl e AWS CLI.

    eksctl
    • Creare un ruolo IAM e collegare ad esso la policy IAM con il comando corrispondente alla famiglia IP del cluster. Il comando crea e implementa uno stack AWS CloudFormation che crea un ruolo IAM, allega a esso la policy specifica e annota l’account di servizio aws-node esistente di Kubernetes con l’ARN del ruolo IAM creato.

      • IPv4

        Sostituire my-cluster con il valore scelto.

        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 valore scelto. Sostituire 111122223333 con l’ID account, quindi sostituire 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 Informazioni sugli indirizzi IPv6 per cluster, pod e servizi.

        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 e AWS CLI
    1. Visualizzare 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. Copiare i contenuti seguenti in un file denominato vpc-cni-trust-policy.json. Sostituire 111122223333 con l’ID account e EXAMPLED539D4633E53DE1B71EXAMPLE con l’output restituito nella Passaggio precedente. Sostituire region-code con la Regione AWS in cui si trova il 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 qualsiasi nome scelto.

      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

        Sostituire 111122223333 con l’ID account, quindi sostituire 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 Informazioni sugli indirizzi IPv6 per cluster, pod e servizi.

        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. Sostituire i valori di esempio con i propri valori.

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

Passaggio 2: Nuova implementazione dei Pod del plug-in CNI di Amazon VPC per Kubernetes

  1. Eliminare e ricreare i Pod esistenti associati all’account di servizio per applicare le variabili di ambiente delle credenziali. L’annotazione non viene applicata ai Pod attualmente in esecuzione senza l’annotazione. Il comando seguente elimina i Pod 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. Confermare che tutti i Pod sono stati riavviati.

    kubectl get pods -n kube-system -l k8s-app=aws-node
  3. Descrivere uno dei Pod e verificare che le variabili di ambiente AWS_WEB_IDENTITY_TOKEN_FILE e AWS_ROLE_ARN esistano. Sostituire cpjw7 con il nome di uno dei Pod restituiti nell’output della 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 il Pod utilizza l’endpoint regionale AWS, nell’output precedente viene restituita anche la riga riportata di seguito.

    AWS_STS_REGIONAL_ENDPOINTS=regional

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

Se il ruolo IAM del nodo Amazon EKS ha attualmente la policy IAM AmazonEKS_CNI_Policy (IPv4) o una policy IPv6 a esso collegata ed è stato creato un ruolo IAM separato, al quale è stata allegata la policy e assegnata all’account di servizio aws-node di Kubernetes, ti consigliamo di rimuovere la policy dal ruolo del nodo con il comando AWS CLI corrispondente alla famiglia IP del cluster. Sostituire 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

    Sostituire 111122223333 con l’ID account, quindi sostituire 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 del plug-in CNI di Amazon VPC per Kubernetes, devi creare una policy IAM da assegnare a un ruolo IAM. Se disponi di un cluster che non è stato configurato con la famiglia IPv6 al momento della creazione, prima di utilizzare IPv6, devi creare un nuovo cluster. Per ulteriori informazioni sull’uso di IPv6 con il cluster, consulta Informazioni sugli indirizzi IPv6 per cluster, pod e servizi.

  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