Come posso risolvere i problemi relativi ai sistemi di bilanciamento del carico creati dal controller di servizio Kubernetes in Amazon EKS?

7 minuti di lettura
0

Non riesco a creare un servizio Kubernetes supportato da un sistema di bilanciamento del carico su Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Amazon EKS utilizza uno dei due controller per gestire un sistema di bilanciamento del carico: AWS Load Balancer Controller o controller di servizio Kubernetes. I seguenti passaggi per la risoluzione dei problemi si applicano solo ai sistemi di bilanciamento del carico gestiti dal controller del servizio Kubernetes. Per ulteriori informazioni, consulta The Service Controller sul sito Web di Kubenetes AWS Cloud Provider e Type LoadBalancer sul sito Web di Kubernetes.

Per risolvere i problemi relativi al servizio di bilanciamento del carico, verifica di disporre delle seguenti configurazioni:

  • I tag corretti per le tue sottoreti Amazon Virtual Private Cloud (Amazon VPC)
  • Le autorizzazioni AWS Identity and Access Management (IAM) necessarie per il ruolo IAM del cluster
  • Una definizione di servizio Kubernetes valida
  • Bilanciatori di carico che restano entro il limite del tuo account
  • Numero sufficiente di indirizzi IP gratuiti nelle tue sottoreti
  • Un sistema di bilanciamento del carico configurato correttamente per evitare problemi di timeout della connessione
  • Obiettivi di integrità per il bilanciamento del carico

Se il problema persiste dopo aver verificato tutti gli elementi precedenti, segui i passaggi nella sezione** Prova ulteriori passaggi per la risoluzione dei problemi**.

Risoluzione

I seguenti passaggi si applicano al Classic Load Balancer (bilanciatore classico) e al Network Load Balancer (bilanciatore di rete). Per l'Application Load Balancer, vedi Bilanciamento del carico delle applicazioni su Amazon EKS.

**Nota:**Se ricevi errori durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione AWS CLI più recente.

Usa i tag corretti per le tue sottoreti Amazon VPC

1.Apri la consolle Amazon VPC .

  1. Nel pannello di navigazione, scegli Sottoreti.

3.Scegli la scheda Tags per ogni sottorete, quindi conferma l'esistenza di un tag. Ad esempio:

Key: kubernetes.io/cluster/yourEKSClusterName  
Value: shared

Nota:In questo caso, il Valore può essere** condiviso** o** posseduto**.

Per impostazione predefinita, il controller rileva automaticamente le sottoreti. Se sono presenti più sottoreti per zona di disponibilità, il controller assegna la priorità alle sottoreti nel seguente ordine:

  • Sottoreti con il tag di ruolo corretto:** kubernetes.io/role/elb** per le sottoreti pubbliche e** kubernetes.io/role/internal-elb** per le sottoreti private
  • Sottoreti con il tag cluster:** kubernetes.io/cluster/cluster\ _NAME**
  • La sottorete che è la prima in ordine lessicografico

4.Per le tue sottoreti pubbliche, verifica che esista il seguente tag:

Key: kubernetes.io/role/elb  
Value: 1

**Nota:**Per vedere se una sottorete è pubblica, controlla la tabella di routing associata alla sottorete. Una sottorete pubblica ha un percorso verso un gateway Internet (igw-xxxxxxxxxxx). Una sottorete privata ha un percorso verso Internet tramite un gateway NAT o un'istanza NAT, oppure non ha alcun percorso verso Internet.

Importante:È necessario disporre del tag nel passaggio 4 per creare un servizio di bilanciamento del carico rivolto a Internet. Un sistema di bilanciamento del carico rivolto a Internet indirizza le richieste dai client alle destinazioni tramite Internet.

5.Per le tue sottoreti private, conferma che esista il seguente tag:

Key: kubernetes.io/role/internal-elb  
Value: 1

Importante:È necessario disporre del tag nel passaggio 5 per creare un servizio di bilanciamento del carico interno. Un sistema di bilanciamento del carico interno utilizza indirizzi IP privati per indirizzare le richieste alle destinazioni.

Imposta le autorizzazioni AWS Identity and Access Management (IAM) necessarie per il ruolo IAM del tuo cluster

1.Apri la consolle Amazon EKS.

2.Nel pannello di navigazione, scegli** Cluster**.

3.Seleziona il tuo cluster, quindi annota l'ARN del ruolo IAM del cluster.

4. Apri la consolle IAM.

5.Nel pannello di navigazione, scegli Ruoli.

6.Seleziona il ruolo che corrisponde all'ARN del ruolo IAM del cluster che hai identificato nel passaggio 3.

7.Verifica che la policy gestita da AWS AmazoneksClusterPolicy sia associata al tuo ruolo.

**Nota:**Il piano di controllo Amazon EKS assume il ruolo IAM precedente per creare un sistema di bilanciamento del carico per il tuo servizio.

Usa una definizione di servizio Kubernetes valida

Nel file YAML per il tuo servizio Kubernetes, verifica che** spec.type** sia impostato su** LoadBalancer**.

Guarda il seguente esempio di servizio Kubernetes supportato da un sistema di bilanciamento del carico:

apiVersion: v1  
kind: Service  
metadata:  
  annotations:  
    # This annotation is only required if you are creating an internal facing ELB. Remove this annotation to create public facing ELB.  
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"  
  name: nginx-elb  
  labels:  
    app: nginx  
spec:  
  type: LoadBalancer  
  ports:  
  - name: "http"  
    port: 80  
    targetPort: 80  
  selector:  
    app: nginx

**Nota:**Per personalizzare il servizio con un'annotazione diversa, consulta Bilanciamento del carico interno e Supporto TLS su AWS sul sito Web di Kubernetes.

Per impostazione predefinita, il controller di servizio integrato in Kubernetes crea un Classic Load Balancer. Per fornire Network Load Balancer, il servizio deve avere l'annotazione** service.beta.kubernetes.io/aws-load-balancer-type: «nlb»**. Per maggiori dettagli, consulta il Supporto di Network Load Balancer su AWS sul sito web di Kubernetes.

Verifica che i sistemi di bilanciamento del carico rientrino nei limiti del tuo account

Per impostazione predefinita, un account AWS dispone di un massimo di 20 sistemi di bilanciamento del carico per Regione AWS.

Per verificare di quanti sistemi di bilanciamento del carico disponi, apri la consolle Amazon Elastic Compute Cloud (Amazon EC2). Quindi, scegli** Load Balancers** dal pannello di navigazione.

Se raggiungi il numero massimo di sistemi di bilanciamento del carico, puoi richiedere un aumento tramite Service Quotas.

Verifica che ci siano abbastanza indirizzi IP gratuiti nelle tue sottoreti

Per creare un sistema di bilanciamento del carico, ogni sottorete di quel sistema di bilanciamento del carico deve avere un minimo di otto indirizzi IP liberi. Ciò è necessario sia per Classic Load Balancer che per Network Load Balancer.

Problemi di timeout della connessione

Se il sistema di bilanciamento del carico presenta problemi di timeout intermittenti o costanti, potrebbe esserci un problema con la configurazione del sistema di bilanciamento del carico. Questo può accadere quando il servizio di backend non è in grado di gestire il traffico in entrata o vengono inviate troppe richieste al sistema di bilanciamento del carico. Per ulteriori informazioni, vedi Come posso risolvere gli errori «Connection timeout» di Elastic Load Balancing?

Verifica lo stato dei controlli di integrità del sistema di bilanciamento del carico

Se non configuri correttamente l'endpoint o il servizio di backend non risponde alle richieste di controllo dello stato, si verificano problemi di controllo dello stato del sistema di bilanciamento del carico.

Per verificare che il sistema di bilanciamento del carico punti all'endpoint corretto, esegui il comando della CLI di AWS describe-target-health:

aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Per verificare la configurazione del controllo dello stato del gruppo target, esegui il comando dell'interfaccia a riga di comando di AWS describe-target-groups:

aws elbv2 describe-target-groups --target-group-arns arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Per ulteriori informazioni, consulta Controlli dell’integrità per i tuoi gruppi target.

Prova ulteriori passaggi per la risoluzione dei problemi

Per verificare la presenza di un messaggio di errore nel servizio Kubernetes che possa aiutarti a risolvere il problema, esegui il seguente](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apprunner/describe-service.html) comando[ describe-service:

$ kubectl describe service my-elb-service

Se il servizio viene creato correttamente, riceverai un output simile al seguente esempio:

...  
...  
Events:  
  Type    Reason                Age   From                Message  
  ----    ------                ----  ----                -------  
  Normal  EnsuringLoadBalancer  47s   service-controller  Ensuring load balancer  
  Normal  EnsuredLoadBalancer   44s   service-controller  Ensured load balancer

Se il servizio non viene creato correttamente, viene visualizzato un messaggio di errore.

Per ulteriori informazioni sui messaggi di errore, consulta le seguenti risorse:

Informazioni correlate

Perché una sottorete utilizzata dai sistemi di bilanciamento del carico nel mio VPC ha indirizzi IP insufficienti?

Risoluzione dei problemi di Amazon EK

Risolvi i problemi relativi ai sistemi di bilanciamento del carico delle applicazioni

Risolvi i problemi relativi al tuo Classic Load Balancer

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa