Come posso configurare un Application Load Balancer utilizzando AWS Load Balancer Controller su un gruppo di nodi Amazon EC2 in Amazon EKS?

6 minuti di lettura
0

Voglio configurare un Application Load Balancer utilizzando AWS Load Balancer Controller su un gruppo di nodi Amazon Elastic Compute Cloud (Amazon EC2) in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Connetti AWS Load Balancer Controller a uno dei seguenti endpoint del servizio AWS:

  • AWS Identity and Access Management (IAM)
  • Amazon EC2
  • Gestione certificati AWS (ACM)
  • Elastic Load Balancing (ELB)
  • Amazon Cognito
  • AWS WAF
  • AWS Shield

Perché AWS Load Balancer Controller funzioni, è necessario disporre di una connessione Internet in uscita. Per ulteriori informazioni, consulta Come posso configurare le mie sottoreti per un cluster Amazon EKS?

Per implementare AWS Load Balancer Controller su AWS Fargate, consulta Come posso configurare AWS Load Balancer Controller su un cluster Amazon EKS per Fargate e implementare il gioco 2048?

Risoluzione

Contrassegno delle sottoreti per consentire il rilevamento automatico

Contrassegna le sottoreti Amazon Virtual Private Cloud (Amazon VPC) nel tuo cluster Amazon EKS. Ciò consente ad AWS Load Balancer Controller di rilevare automaticamente le sottoreti quando crei la risorsa Application Load Balancer.

Per gli Application Load Balancer pubblici, è necessario disporre di almeno due sottoreti pubbliche nel VPC del cluster con i seguenti tag:

kubernetes.io/role/elb

Per gli Application Load Balancer interni, è necessario disporre di almeno due sottoreti private nel VPC del cluster con i seguenti tag:

kubernetes.io/role/internal-elb

Creazione di un provider di identità OIDC per il cluster

Usa eksctl o la console di gestione AWS per creare un provider di identità OpenID Connect (OIDC) da utilizzare con i ruoli IAM degli account di servizio.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

È possibile anche utilizzare l'interfaccia AWSL CLI per creare un provider di identità OIDC per il cluster. Ad esempio:

ISSUER_URL=$(aws eks describe-cluster --name cluster-name \  --query "cluster.identity.oidc.issuer" --region region-name --output text)
aws iam create-open-id-connect-provider \
  --url ${ISSUER_URL} \
  --thumbprint-list ca-thumbprint \
  --client-id-list sts.amazonaws.com \
  --region region-name

Nota: sostituisci cluster-name con il nome del cluster, region-name con la regione AWS e ca-thumbprint con l'identificazione personale del certificato CA root. Puoi ottenere l'identificazione personale del certificato di CA root utilizzata dal cluster con oidc.eks.region-name.amazonaws.com.

Creazione di una policy IAM per AWS Load Balancer Controller

La policy Amazon EKS creata consente a AWS Load Balancer Controller di effettuare chiamate alle API AWS. È consigliabile utilizzare i ruoli IAM AWS per gli account di servizio quando concedi l'accesso alle API AWS.

  1. Scarica una policy IAM per AWS Load Balancer Controller da GitHub. Esegui uno dei comandi seguenti, a seconda della configurazione.
    Tutte le regioni tranne le regioni della Cina:

    ISSUER_URL=$(aws eks describe-cluster --name cluster-name \  --query "cluster.identity.oidc.issuer" --region region-name --output text)
    aws iam create-open-id-connect-provider \
      --url ${ISSUER_URL} \
      --thumbprint-list ca-thumbprint \
      --client-id-list sts.amazonaws.com \
      --region region-name

    Regioni di Pechino e Ningxia in Cina:

    curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
  2. Per creare una policy IAM denominata AWSLoadBalancerControllerIAMPolicy per il profilo dell’istanza del nodo worker, esegui il seguente comando:

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \
        --policy-document file://iam-policy.json
  3. Annota l'ARN della policy che viene restituito nell'output.

  4. Usa il ruolo IAM esistente o crea un nuovo ruolo IAM per AWS Load Balancer Controller.
    Nota: per creare un ruolo IAM con eksctl, usa il parametro —attach-policy-arn con l'ARN della policy IAM AWSLoadBalancerControllerIAMPolicy.

  5. Per collegare AWSLoadBalancerControllerIAMPolicy ai ruoli IAM, esegui il comando seguente:

    aws iam attach-role-policy \--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
    --role-name role-name

    Nota: Sostituisci 111122223333 con l'ID dell’account AWS e role-name con il nome del ruolo IAM.

Implementazione di AWS Load Balancer Controller

  1. Verifica di disporre dei tag richiesti per il bilanciatore del carico associato alle sottoreti.

  2. Installa cert-manager in modo da poter inserire la configurazione del certificato nei webhook. Usa Kubernetes 1.16 o successivo per eseguire il seguente comando:

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
  3. Nel file manifesto scaricato da GitHub, esegui il seguente comando:

    curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_6_2_full.yaml

    Nota: sostituisci $VERSION con la versione di AWS Load Balancer Controller che desideri implementare e modifica il nome del file, ad esempio v2_6_2_full.yaml per v2.6.2. Per ulteriori informazioni, consulta The Kubernetes repository su GitHub.

  4. Modifica cluster-name per il cluster. Ad esempio:

    spec:    
        containers:
        - args:
            - --cluster-name=your-cluster-name # edit the cluster name
            - --ingress-class=alb
  5.  Aggiorna solo la sezione ServiceAccount del file. Ad esempio:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      labels:
        app.kubernetes.io/component: controller
        app.kubernetes.io/name: aws-load-balancer-controller
      annotations:                                                                        # Add the annotations line
        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/role-name              # Add the IAM role
      name: aws-load-balancer-controller
      namespace: kube-system

    Nota: sostituisci 111122223333 con l'ID dell’account e role-name con il nome del ruolo IAM.

  6. Per implementare AWS Load Balancer Controller, esegui il seguente comando:

    kubectl apply -f ingress-controller.yaml

Implementazione di un'applicazione di esempio per testare AWS Load Balancer Controller

Implementa un'applicazione di esempio per verificare che AWS Load Balancer Controller crei un Application Load Balancer pubblico legato all'oggetto Ingress.

  1. Per implementare un gioco chiamato 2048 come applicazione di esempio, esegui il seguente comando:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Nota: sostituisci $VERSION con la versione (dal sito Web GitHub Kubernetes SIGs) dell'AWS Load Balancer Controller che desideri implementare.
  2. Per verificare che la risorsa Ingress sia stata creata, attendi qualche minuto, quindi esegui il comando seguente:
    kubectl get ingress/ingress-2048 -n game-2048
    Riceverai un output simile al seguente:
    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
     
  3. Se dopo diversi minuti Ingress non risulta ancora creato, esegui il seguente comando per visualizzare i log di AWS Load Balancer Controller:
    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
    Nota: i log di AWS Load Balancer Controller possono mostrare messaggi di errore che consentono di risolvere i problemi relativi all’implementazione.
  4. Per visualizzare l'applicazione di esempio, apri un browser Web e vai all'indirizzo URL dell'output nel passaggio 2.
  5. Per pulire l'applicazione di esempio, esegui il seguente comando:
    kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Nota: sostituisci $VERSION con la versione (dal sito Web GitHub Kubernetes SIGs) dell'AWS Load Balancer Controller che desideri implementare.

Informazioni correlate

Come posso risolvere i problemi relativi ai sistemi di bilanciamento del carico creati dal controller di servizio Kubernetes in Amazon EKS?

In che modo è possibile risolvere i problemi durante la creazione di un sistema di bilanciamento del carico utilizzando AWS Load Balancer Controller?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa