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

6 minuti di lettura
0

Non riesco a creare un Network Load Balancer o un Application Load Balancer utilizzando AWS Load Balancer Controller. Oppure, il sistema di bilanciamento del carico non viene creato dopo aver creato gli oggetti Service o Ingress.

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 sull'oggetto Ingress (Application Load Balancer) o Service (Network Load Balancer).
  • 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 la presenza di dipendenze non risolte.

AWS Load Balancer Controller gestisce Elastic Load Balancing per un cluster EKS. Il controller fornisce le seguenti risorse:

  • Un Application Load Balancer quando si crea un ingresso Kubernetes.
  • Un Network Load Balancer quando si crea un servizio Kubernetes di tipo LoadBalancer. In precedenza, Kubernetes Network Load Balancer veniva utilizzato per le destinazioni di istanza e AWS Load Balancer Controller veniva utilizzato per le destinazioni IP. Con AWS Load Balancer Controller versione 2.3.0 o successiva, puoi creare un Network Load Balancer utilizzando entrambi i tipi di destinazione. Per ulteriori informazioni, consulta la pagina Tipo di destinazione.

Risoluzione

Assicurati che tutti i prerequisiti siano soddisfatti

Per un elenco dei prerequisiti di Application Load Balancer, consulta la pagina Bilanciamento del carico di applicazione su Amazon EKS. Per un elenco dei prerequisiti di Network Load Balancer, consulta la pagina Bilanciamento del carico di rete su Amazon EKS.

1.    Verifica che AWS Load Balancer Controller sia stato eseguito correttamente. È consigliabile utilizzare la versione 2.4.4 o successiva.

2.    Controlla il numero di sottoreti. Application Load Balancer necessita di almeno due sottoreti in zone di disponibilità diverse. Network Load Balancer necessita di almeno una sottorete. Le sottoreti devono avere almeno otto indirizzi IP disponibili. Per ulteriori informazioni, consulta la pagina Visualizzazione dei VPC.

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 Network Load Balancer

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 la pagina Utilizzo di tag tramite la console. Per informazioni sull'aggiunta di tag tramite l'Interfaccia della linea di comando AWS (AWS CLI), consulta la pagina Utilizzo dei tag tramite la riga di comando.

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

4.FSPA meno che gli ID delle sottoreti non siano specificati esplicitamente come annotazioni nell'oggetto Service o Ingress, assicurati che le sottoreti abbiano i seguenti tag. Senza questi tag, Subnet Auto Discovery (il rilevamento automatico delle 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"

Controlla le annotazioni sull'oggetto Ingress o Service

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. Per un elenco di tutte le annotazioni disponibili supportate da AWS Load Balancer Controller per il bilanciamento del carico dell'applicazione, consulta Ingress annotations (Annotazioni sull'oggetto Ingress) su GitHub. Per un elenco di tutte le annotazioni disponibili supportate da AWS Load Balancer Controller per il bilanciamento del carico di rete, consulta Service annotations (Annotazioni sull'oggetto Service) su GitHub.

Application Load Balancer

Network Load Balancer

  • 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"

Esegui 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>

Esegui uno dei seguenti comandi per modificare l'oggetto Service 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>

Consulta i 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 pod del controller mostra i log, assicurati che i pod del controller 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

Il tipo di destinazione IP è obbligatorio quando i pod di destinazione sono in esecuzione su Fargate. Esegui i seguenti comandi 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, esegui 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 la presenza di dipendenze non risolte

Amazon EKS aggiunge le seguenti regole al gruppo di sicurezza del nodo:

  • Una regola in entrata per il traffico client
  • Una regola in entrata per ogni sottorete del sistema di bilanciamento del carico nel VPC per ogni Network Load Balancer creato (per i controlli dell'integrità).

La distribuzione di un servizio di tipo LoadBalancer potrebbe non riuscire se Amazon EKS tenta di creare regole che superano la quota per il numero massimo di regole consentito per un gruppo di sicurezza.

Consulta la documentazione per assicurarti che tutte le dipendenze siano soddisfatte. Per Application Load Balancer, consulta la pagina Bilanciamento del carico di applicazione su Amazon EKS. Per Network Load Balancer, consulta la pagina Bilanciamento del carico di rete su Amazon EKS. Ad esempio, se utilizzi un Application Load Balancer, l'oggetto Service deve specificare NodePort o LoadBalancer per utilizzare la modalità di traffico dell'istanza.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa