Come posso configurare l'AWS Load Balancer Controller su un cluster Amazon EKS per Fargate?

7 minuti di lettura
0

Desidero configurare l'AWS Load Balancer Controller su un cluster Amazon Elastic Kubernetes Service (Amazon EKS) per AWS Fargate.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori relativi ad AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Puoi configurare un AWS Load Balancer Controller senza alcuna distribuzione esistente del controller di ingresso dell'Application Load Balancer.

Prerequisiti:

  • Disinstalla l'AWS ALB Ingress Controller per Kubernetes esistente. L'AWS Load Balancer Controller ne sostituisce le funzionalità.
  • Utilizza eksctl versione 0.109.0 o successiva. Per ulteriori informazioni, consulta Installation (Installazione) sul sito web di eksctl.
  • Installa Helm sulla workstation.

Crea un cluster Amazon EKS, una policy per l'account AWS di servizio e policy di controllo degli accessi basate sui ruoli

Completa i seguenti passaggi:

  1. Per creare un cluster Amazon EKS utilizzando eksctl, esegui questo comando:

    eksctl create cluster \
      --name YOUR_CLUSTER_NAME \
      --version 1.28 \
      --fargate

    Nota: sostituisci YOUR_CLUSTER_NAME con il nome del tuo cluster. Non è necessario creare un ruolo di esecuzione del pod Fargate per i cluster che utilizzano solo pod Fargate (--fargate).

  2. Per consentire al cluster di utilizzare AWS Identity and Access Management (AWS IAM) per gli account di servizio, esegui questo comando:

    eksctl utils associate-iam-oidc-provider \
      --cluster YOUR_CLUSTER_NAME \
      --approve

    Nota: sostituisci YOUR_CLUSTER_NAME con il nome del tuo cluster. kubelet e kube-proxy utilizzano FargateExecutionRole per eseguire il pod Fargate. Tuttavia, FargateExecutionRole non è il ruolo IAM del pod Fargate. Per i pod Fargate, devi utilizzare il ruolo IAM per l'account di servizio.

  3. Per scaricare una policy IAM che consenta all'AWS Load Balancer Controller di effettuare chiamate alle API AWS per tuo conto, esegui questo comando:

  4.  curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.json
  5. Per creare una policy IAM con la policy scaricata, esegui questo comando AWS CLI create-policy:

    aws iam create-policy \
      --policy-name AWSLoadBalancerControllerIAMPolicy \
      --policy-document file://iam_policy.json
  6. Per creare un account di servizio per l'AWS Load Balancer Controller, esegui questo comando:

    eksctl create iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --namespace=kube-system \
      --name=aws-load-balancer-controller \
      --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
      --override-existing-serviceaccounts \
      --approve

    Nota: sostituisci YOUR_CLUSTER_NAME con il nome del tuo cluster e AWS_ACCOUNT_ID con l'ID del tuo account. Il comando precedente crea un account di servizio denominato aws-load-balancer-controller nel namespace kube-system.

  7. Per verificare che il nuovo ruolo di servizio sia stato creato, esegui uno di questi comandi:

    eksctl get iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --name=aws-load-balancer-controller \
      --namespace=kube-system

    Nota: sostituisci YOUR_CLUSTER_NAME con il nome del tuo cluster.
    -oppure-

    kubectl get serviceaccount aws-load-balancer-controller \
      --namespace kube-system \
      -o yaml

Installa l'AWS Load Balancer Controller con Helm

Completa i seguenti passaggi:

  1. Per aggiungere il grafico Amazon EKS a Helm, esegui questo comando:

    helm repo add eks https://aws.github.io/eks-charts
  2. Per aggiornare il repository ed estrarre il grafico più recente, esegui questo comando:

    helm repo update eks
  3. Per installare il grafico Helm, esegui questo comando:

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
      --set clusterName=YOUR_CLUSTER_NAME \
      --set serviceAccount.create=false \
      --set region=YOUR_REGION_CODE \
      --set vpcId=EKS_CLUSTER_VPC_ID \
      --set serviceAccount.name=aws-load-balancer-controller \
      --version 1.11.0 \
      -n kube-system

    Nota: sostituisci YOUR_CLUSTER_NAME con il nome del tuo cluster e YOUR_REGION_CODE con la Regione AWS del tuo cluster. Inoltre, sostituisci EKS_CLUSTER_VPC_ID con l'ID del cloud privato virtuale (VPC) del cluster.

  4. Per verificare che il controller sia stato installato correttamente, esegui questo comando:

    kubectl get deployment -n kube-system aws-load-balancer-controller

    Esempio di output:

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    aws-load-balancer-controller   2/2     2            2           84s

Testa l'AWS Load Balancer Controller

Per testare l'implementazione, utilizza l'AWS Load Balancer Controller per creare una delle seguenti risorse:

  • Un Application Load Balancer per l'ingresso
  • Un Network Load Balancer in cui, per Servizio, il Tipo è LoadBalancer

Una risorsa in ingresso indirizza il traffico verso diversi servizi in base a concetti web come URI, nomi host e percorsi. È consigliabile utilizzare una risorsa di ingresso per condividere un bilanciatore del carico con più servizi o per controllare il routing del servizio. Utilizza un Servizio LoadBalancer per assegnare un bilanciatore del carico dedicato al servizio.

Nota: i seguenti passaggi di test distribuiscono un esempio di applicazione di gioco denominata 2048.

Crea un Application Load Balancer

Per creare un Application Load Balancer per l'ingresso, completa i seguenti passaggi:

  1. Per creare il profilo Fargate necessario per la distribuzione del gioco, esegui questo comando:

    eksctl create fargateprofile \
      --cluster YOUR_CLUSTER_NAME \
      --region YOUR_REGION_CODE \
      --name your-alb-sample-app \
      --namespace game-2048

    Nota: sostituisci YOUR_CLUSTER_NAME con il nome del tuo cluster e YOUR_REGION_CODE con la tua Regione.

  2. Per distribuire l'applicazione, esegui questo comando:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. Attendi qualche minuto. Quindi esegui questo comando per verificare che l'AWS Load Balancer Controller abbia creato una risorsa di ingresso:

    kubectl get ingress/ingress-2048 -n game-2048

    Esempio di output:

    NAME         CLASS HOSTS ADDRESS                                                                PORTS AGE
    ingress-2048 alb   *     k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.region.elb.amazonaws.com   80    3d4h

    Se non vedi una risorsa in ingresso dopo alcuni minuti, esegui questo comando per visualizzare i log dell'AWS Load Balancer Controller:

    kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

    Controlla nei log la presenza di messaggi di errore che ti aiutino a diagnosticare i problemi di distribuzione.

  4. Per visualizzare l'applicazione, apri un browser, quindi accede all'URL nell'output del comando della risorsa in ingresso.
    Nota: se non vedi l'applicazione, attendi qualche minuto e aggiorna il browser.

Crea un Network Load Balancer

Per distribuire un esempio di applicazione utilizzando il servizio di modalità indirizzo IP del Network Load Balancer, procedi come segue:

  1. Per creare un profilo Fargate, esegui questo comando:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048

    Nota: sostituisci your-cluster con il nome del tuo cluster e your-region-code con la Regione del tuo cluster.

  2. Per ottenere il manifesto per distribuire il gioco 2048, esegui questo comando:

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. Nel manifesto, elimina la seguente sezione Ingress (Ingresso):

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      namespace: game-2048
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: service-2048           
                    port:
                      number: 80
  4. Modifica l'oggetto Service (Servizio) per utilizzare i seguenti valori:

    apiVersion: v1
    kind: Service
    metadata:
      namespace: game-2048
      name: service-2048
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: app-2048
  5. Per creare il manifesto del servizio e della distribuzione, esegui questo comando:

    kubectl apply -f 2048-game.yaml
  6. Per verificare la creazione del servizio e il nome DNS del Network Load Balancer, esegui questo comando:

    kubectl get svc -n game-2048

    Esempio di output:

    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE
    service-2048   LoadBalancer   10.100.114.197   k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com   80:xxxxx/TCP   23m
  7. Attendi qualche minuto fino all’attivazione del bilanciatore del carico. Per verificare di poter accedere alla distribuzione, apri un browser web. Quindi apri il nome di dominio completo (FQDN) nell'output del comando in EXTERNAL-IP.

Risolvi i problemi relativi all'AWS Load Balancer Controller

Se riscontri problemi durante la configurazione dell'AWS Load Balancer Controller, esegui questi comandi:

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
kubectl get endpoints -n game-2048
kubectl get ingress/ingress-2048 -n game-2048

Controlla la presenza di eventuali messaggi di errore nell'output del comando logs, ad esempio problemi con tag o sottoreti. Per le procedure di risoluzione degli errori più comuni, consulta Issues (Problemi) sul sito web di GitHub. Consulta anche In che modo è possibile risolvere i problemi durante la creazione di un bilanciatore del carico utilizzando l'AWS Load Balancer Controller?

Il comando get endpoints mostra se hai registrato correttamente i pod di distribuzione supportati. Il comando get ingress mostra se le risorse in ingresso sono distribuite.

Per ulteriori informazioni, consulta AWS Load Balancer Controller sul sito web di Kubernetes.