Come posso configurare AWS Load Balancer Controller su un cluster Amazon EKS per Fargate e implementare il gioco 2048?
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:
-
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).
-
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.
-
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
-
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
-
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
-
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:
-
Esegui il comando riportato di seguito per aggiungere il grafico Amazon EKS a Helm:
helm repo add eks https://aws.github.io/eks-charts
-
Aggiorna il repository per estrarre il grafico più recente:
helm repo update eks
-
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
-
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:
-
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
-
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
-
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.
-
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:
-
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
-
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
-
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
-
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
-
Esegui il comando riportato di seguito per creare il manifesto del servizio e dell’implementazione:
kubectl apply -f 2048-game.yaml
-
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
-
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.
Video correlati


Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa