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

Ultimo aggiornamento: 29-10-2021

Non è possibile creare un bilanciatore del carico di rete (NLB) o un Application Load Balancer (ALB) utilizzando AWS Load Balancer Controller (precedentemente noto come ALB Ingress Controller). In alternativa, il bilanciatore del carico non viene creato dopo aver creato gli oggetti Service o Ingress. In che modo posso risolvere il problema?

Breve descrizione

Per risolvere i problemi di creazione del bilanciatore del carico, completa le seguenti operazioni:

  • Assicurati che tutti i prerequisiti siano soddisfatti.
  • Controlla le annotazioni dell'oggetto Ingress (ALB) o Service (NLB).
  • Per ulteriori informazioni, consulta i log del pod di AWS Load Balancer Controller.
  • Se il cluster viene eseguito su AWS Fargate, verifica che sia stato creato un profilo Fargate per lo spazio dei nomi in cui risiede l'oggetto Ingress o Service.
  • Verifica se sono presenti dipendenze non indirizzate.

Risoluzione

Assicurati che tutti i prerequisiti siano soddisfatti

Per un elenco dei prerequisiti ALB, consulta Bilanciamento del carico delle applicazioni su Amazon Elastic Kubernetes Service (Amazon EKS). Per un elenco dei prerequisiti del bilanciamento del carico di rete, consulta Bilanciamento del carico di rete su Amazon EKS.

1.    Verifica che AWS Load Balancer Controller sia stato eseguito correttamente.

2.    Controlla il numero di sottoreti. ALB ha bisogno di almeno due sottoreti e NLB ha bisogno di almeno una sottorete. Per ulteriori informazioni, consulta Visualizzazione della sottorete.

3.    È necessario utilizzare il tag seguente in alcuni scenari:

  • Chiave: "kubernetes.io/cluster/cluster-name"
  • Valore: "shared" o "owned"

Se utilizzi un Application Load Balancer

È necessario contrassegnare esattamente un gruppo di sicurezza nei seguenti scenari:

  • Stai utilizzando più gruppi di sicurezza collegati al nodo worker.
  • Stai utilizzando AWS Load Balancer Controller versione 2.1.1 o precedente.

Se utilizzi un bilanciatore del carico di rete

Se utilizzi AWS Load Balancer Controller versione 2.1.1 o precedente, le sottoreti devono essere contrassegnate.

Per informazioni sull'aggiunta di tag dalla console Amazon EC2, consulta Utilizzo dei tag tramtie la console. Per informazioni sull'aggiunta di tag tramite l'interfaccia a riga di comando di AWS, consulta Utilizzo dei tag tramite la riga di comando.

Nota: se ricevi un messaggio di errore durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

4.    A meno che gli ID di sottorete non siano specificati esplicitamente come annotazioni nell'oggetto Service o nell'oggetto Ingress, assicurati che le sottoreti abbiano i tag seguenti. Senza questi tag, Rilevamento automatico sottoreti non funzionerà.

Tag di sottoreti private:

  • Chiave: "kubernetes.io/role/internal-elb"
  • Valore: "1"

Tag di sottoreti pubbliche:

  • Chiave: "kubernetes.io/role/elb"
  • Valore: "1"

Controllo delle annotazioni dell'oggetto Ingress (ALB) o Service (NLB)

Verifica le annotazioni sull'oggetto Service o le annotazioni sull'oggetto Ingress. Le annotazioni necessarie per configurare un bilanciatore del carico sono le seguenti:

Nota: le altre annotazioni utilizzano valori predefiniti.

Application Load Balancer

  • kubernetes.io/ingress.class: alb (assicura che gli oggetti Ingress utilizzino AWS Load Balancer Controller)

Bilanciatore del carico di rete

  • Con destinazioni IP: service.beta.kubernetes.io/aws-load-balancer-type: “external” service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: “ip”
  • Con destinazioni di istanza: service.beta.kubernetes.io/aws-load-balancer-type: “external” service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: “instance”

Emetti uno dei seguenti comandi per visualizzare l’oggetto Service o Ingress. Nell'esempio seguente, sostituisci SERVICE-NAME/INGRESS-NAME e NAMESPACE con i valori corretti per il tuo caso d'uso.

kubectl describe service <SERVICE-NAME> -n <NAMESPACE>
kubectl describe ingress <INGRESS-NAME> -n <NAMESPACE>

Emetti uno dei seguenti comandi per modificare l'oggetto Servizio o Ingress. Negli esempi seguenti, sostituisci SERVICE-NAME/INGRESS-NAME e NAMESPACE con i valori corretti per il tuo caso d'uso:

kubectl edit service <SERVICE-NAME> -n <NAMESPACE>
kubectl edit ingress <INGRESS-NAME> -n <NAMESPACE>

Verifica dei log del pod di AWS Load Balancer Controller per ulteriori informazioni

Eseguire il seguente comando per esaminare i log di AWS Load Balancer Controller:

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

Se nessuno dei controller pod mostra i log, assicurati che i controller pod siano in esecuzione:

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

Se il cluster viene eseguito su Fargate, verifica che sia stato creato un profilo Fargate per lo spazio dei nomi in cui risiede l'oggetto Ingress o Service.

Emetti i comandi seguenti per verificare che sia stato creato un profilo Fargate per lo spazio dei nomi in cui risiede l'oggetto Ingress o Service. Nell'esempio seguente, sostituisci CLUSTER-NAME con il nome del cluster.

eksctl get fargateprofile --cluster <CLUSTER-NAME> -o yaml

Per creare un profilo Fargate, emetti il seguente comando. Nell'esempio seguente, sostituisci CLUSTER-NAME, REGION, FARGATE-PROFILE-NAME e NAMESPACE con i valori corretti per il tuo caso d'uso.

eksctl create fargateprofile --cluster <CLUSTER-NAME> --region <REGION> --name <FARGATE-PROFILE-NAME> --namespace <NAMESPACE>

Verifica che non ci siano dipendenze non indirizzate

Consulta la documentazione per assicurarti che siano soddisfatte tutte le dipendenze. Per ALB, consulta Bilanciamento del carico delle applicazioni su EKS. Per NLB, consulta Bilanciamento del carico di rete su Amazon EKS.

Ad esempio, se si utilizza ALB, l'oggetto Service deve specificare NodePort o LoadBalancer per utilizzare la modalità traffico dell'istanza.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?