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

6 minuti di lettura
0

Desidero configurare AWS Load Balancer Controller su un cluster Amazon Elastic Kubernetes Service (Amazon EKS) per AWS Fargate e successivamente implementare il gioco 2048.

Breve descrizione

È possibile configurare AWS Load Balancer Controller senza alcuna implementazione esistente di Application Load Balancer (ALB) Ingress Controller.

Prima di configurare AWS Load Balancer Controller su un nuovo cluster Fargate, completa le seguenti azioni:

  • Disinstalla AWS ALB Ingress Controller per Kubernetes. AWS Load Balancer Controller sostituisce la funzionalità di AWS ALB Ingress Controller.
  • Usa eksctl versione 0.109.0 o superiore. Per ulteriori informazioni, vedere Installation sul sito Web eksctl.
  • Installa Helm sulla workstation.
  • Sostituisci i valori segnaposto nei frammenti di codice con i tuoi valori.

Soluzione

Crea un cluster Amazon EKS, una policy per gli account di servizio e una policy di controllo degli accessi basato sui ruoli (RBAC)

Per creare un cluster e le policy, procedi come segue:

  1. Esegui il comando riportato di seguito per utilizzare eksctl e creare un cluster Amazon EKS:

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

    Nota: non è necessario creare un ruolo di esecuzione pod Fargate per i cluster che utilizzano solo pod Fargate (--fargate).

  2. Esegui il comando riportato di seguito per consentire al cluster di utilizzare AWS Identity and Access Management (AWS IAM) per gli account di servizio:

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

    Nota: FargateExecutionRole è il ruolo utilizzato per kubelet e kube-proxy per eseguire il pod Fargate. Tuttavia, non è il ruolo utilizzato per il pod Fargate (aws-load-balancer-controller). Per i pod Fargate, è necessario utilizzare il ruolo IAM per l'account di servizio. Per ulteriori informazioni, consulta IAM roles for service accounts.

  3. Esegui il comando riportato di seguito per scaricare una policy IAM che consenta ad AWS Load Balancer Controller di effettuare chiamate alle API AWS per tuo conto:

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
  4. Crea una policy IAM con la policy che hai scaricato. Usa il seguente comando:

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. Crea un account di servizio denominato aws-load-balancer-controller nello spazio dei nomi kube-system per AWS Load Balancer Controller. Usa il seguente 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
  6. Esegui uno dei comandi riportati di seguito per verificare che il nuovo ruolo di servizio sia stato creato:

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

    -oppure-

    kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system

Installa AWS Load Balancer Controller con Helm

Per installare AWS Load Balancer Controller, procedi come segue:

  1. Esegui il comando riportato di seguito per aggiungere il grafico Amazon EKS a Helm:

    helm repo add eks https://aws.github.io/eks-charts
  2. Aggiorna il repository per estrarre il grafico più recente:

      helm repo update eks
  3. Esegui il comando riportato di seguito per installare il grafico Helm. Nota: sostituisci clusterName, ** region** e vpcId con i tuoi valori:

    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=<VPC_ID> \  
    --set serviceAccount.name=aws-load-balancer-controller \  
    -n kube-system
  4. Verifica che il controller sia installato correttamente:

    $ 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

Prova AWS Load Balancer Controller

Utilizza AWS Load Balancer Controller per creare un Application Load Balancer per Ingress o un Network Load Balancer. Usa uno di questi per creare un servizio k8s. Completa i seguenti passaggi per implementare un'app di esempio denominata 2048 con Application Load Balancer Ingress:

  1. Crea un profilo Fargate necessario per l’implementazione del gioco. Usa il seguente comando:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Esegui il comando riportato di seguito per implementare il gioco di esempio e verificare che AWS Load Balancer Controller crei una risorsa ALB Ingress:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. Dopo qualche minuto, esegui comando riportato di seguito per verificare l’effettiva creazione della risorsa Ingress:

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

    Viene visualizzato il seguente output:

    NAME           CLASS    HOSTS   ADDRESS. PORTS   AGE
    ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-

    Nota: se dopo diversi minuti Ingress non risulta ancora creato, esegui il comando riportato di seguito per visualizzare i log di AWS Load Balancer Controller:

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

    I log possono contenere messaggi di errore che consentono di diagnosticare i problemi relativi all’implementazione.

  4. Per visualizzare l'applicazione di esempio, apri un browser. Quindi, vai all’INDIRIZZO URL indicato nell’output del comando precedente.
    Nota: se non visualizzi l'applicazione di esempio, aggiorna il browser dopo qualche minuto.

Implementa un'applicazione di esempio

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

  1. Esegui il comando riportato di seguito per creare un profilo Fargate:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Per ottenere il manifesto per implementare il gioco 2048, esegui comando riportato di seguito:

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. Nel manifesto alla fase 2, elimina questa sezione Ingress:

    apiVersion: networking.k8s.io/v1kind: 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 Servizio:

    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. Esegui il comando riportato di seguito per creare il manifesto del servizio e dell’implementazione:

    kubectl apply -f 2048-game.yaml
  6. Esegui il comando riportato di seguito per verificare la creazione del servizio e il nome DNS di Network Load Balancer:

    kubectl get svc -n game-2048

    Viene visualizzato il seguente 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:30159/TCP   23m
  7. Attendi qualche minuto fino all’attivazione del bilanciatore del carico. Quindi, verifica di poter raggiungere l’implementazione. Apri il nome di dominio completo (FQDN) dell'NLB a cui si fa riferimento nella sezione EXTERNAL-IP di un browser web.

Risolvi i problemi relativi ad AWS Load Balancer Controller

Se riscontri problemi con la configurazione del controller, esegui i comandi riportati di seguito:

$ 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

L'output del comando logs restituisce messaggi di errore (ad esempio, con tag o sottoreti). Questi messaggi di errore sono utili per risolvere gli errori più comuni dal sito Web di Kubernetes GitHub. Il comando get endpoints mostra se i pod di implementazione supportati sono registrati correttamente. I comandi get ingress mostrano se le risorse Ingress sono implementate. Per ulteriori informazioni, consulta la sezione AWS Load Balancer Controller sul sito Web di Kubernetes.

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa