Wie kann ich Probleme beim Erstellen eines Load Balancers mithilfe des AWS Load Balancer Controllers beheben?

Zuletzt aktualisiert: 29.10.2021

Ich kann keinen Network Load Balancer (NLB) oder einen Application Load Balancer (ALB) mit dem AWS Load Balancer Controller (früher als ALB Ingress Controller bekannt) erstellen. Oder der Load Balancer wird nicht erstellt, nachdem ich die Service- oder Ingress-Objekte erstellt habe. Wie kann ich das Problem beheben?

Kurzbeschreibung

Gehen Sie wie folgt vor, um Probleme bei der Erstellung von Load Balancern zu beheben:

  • Stellen Sie sicher, dass alle Voraussetzungen erfüllt sind.
  • Überprüfen Sie die Anmerkungen des Objekts Ingress (ALB) oder Service (NLB).
  • Weitere Informationen finden Sie in den Protokollen des AWS Load Balancer Controller-Pods.
  • Wenn der Cluster auf AWS Fargate ausgeführt wird, stellen Sie sicher, dass ein Fargate-Profil für den Namespace erstellt wurde, in dem sich das Ingress- oder Service-Objekt befindet.
  • Überprüfen Sie, ob es nicht adressierte Abhängigkeiten gibt.

Lösung

Stellen Sie sicher, dass alle Voraussetzungen erfüllt sind

Eine Liste der ALB-Voraussetzungen finden Sie unter Application Load Balancing auf Amazon Elastic Kubernetes Service (Amazon EKS). Eine Liste der NLB-Voraussetzungen finden Sie unter Netzwerklastenausgleich bei Amazon EKS.

1.    Stellen Sie sicher, dass der AWS Load Balancer Controller erfolgreich bereitgestellt wurde.

2.    Prüfen Sie die Anzahl der Subnetze. ALB benötigt mindestens zwei Subnetze und NLB benötigt mindestens ein Subnetz. Weitere Informationen finden Sie unter Anzeigen Ihres Subnetzes.

3.    In bestimmten Szenarien müssen Sie das folgende Tag verwenden:

  • Schlüssel: „kubernetes.io/cluster/cluster-name“
  • Wert: shared (geteilt) oder owned (eigen)

Wenn Sie einen Application Load Balancer verwenden

In den folgenden Szenarien müssen Sie genau eine Sicherheitsgruppe markieren:

  • Sie verwenden mehrere Sicherheitsgruppen, die an den Worker-Knoten angeschlossen sind.
  • Sie verwenden die AWS Load Balancer-Controller-Version v2.1.1 oder früher.

Wenn Sie einen Netzwerklastenausgleichsdienst verwenden

Wenn Sie die AWS Load Balancer Controller-Version v2.1.1 oder früher verwenden, müssen Subnetze getaggt werden.

Informationen zum Hinzufügen von Tags über die Amazon EC2-Konsole finden Sie unter Arbeiten mit Tags mithilfe der Konsole. Informationen zum Hinzufügen von Tags über die AWS-Befehlszeilenschnittstelle finden Sie unter Arbeiten mit Tags über die Befehlszeile.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

4.    Wenn Subnetz-IDs nicht explizit als Anmerkungen im Service-Objekt oder im Ingress-Objekt angegeben sind, stellen Sie sicher, dass die Subnetze über die folgenden Tags verfügen. Ohne diese Tags funktioniert Subnet Auto Discovery nicht.

Private Subnetze markieren

  • Schlüssel: "kubernetes.io/role/internal-elb"
  • Wert: "1"

Öffentliche Subnetze markieren:

  • Schlüssel: "kubernetes.io/role/elb"
  • Wert: "1"

Überprüfen Sie die Anmerkungen des Objekts Ingress (ALB) oder Service (NLB)

Überprüfen Sie Anmerkungen zum Serviceobjekt oder Anmerkungen zum Ingress-Objekt. Die zur Konfiguration eines Load Balancers erforderlichen Anmerkungen lauten wie folgt:

Hinweis: Andere Anmerkungen verwenden Standardwerte.

Application Load Balancer

  • kubernetes.io/ingress.class: alb (stellt sicher, dass Ingress-Objekte den AWS Load Balancer Controller verwenden)

Network Load Balancer

  • Mit IP-Zielen: service.beta.kubernetes.io/aws-load-balancer-type: “external” service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: “ip”
  • Mit Instanzzielen: service.beta.kubernetes.io/aws-load-balancer-type: “external” service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: “instance”

Führen Sie einen der folgenden Befehle aus, um den Dienst oder das Ingress-Objekt anzuzeigen. Ersetzen Sie im folgenden Beispiel SERVICE-NAME/ INGRESS-NAME und NAMESPACE durch die richtigen Werte für Ihren Anwendungsfall.

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

Führen Sie einen der folgenden Befehle aus, um das Service- oder Ingress-Objekt zu bearbeiten. Ersetzen Sie in den folgenden Beispielen SERVICE-NAME/ INGRESS-NAME und NAMESPACE durch die richtigen Werte für Ihren Anwendungsfall:

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

Überprüfen Sie die Protokolle des AWS Load Balancer Controller-Pods auf zusätzliche Informationen

Führen Sie folgenden Befehl aus, um die AWS Load Balancer Controller-Protokolle zu überprüfen:

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

Wenn keiner der Controller-Pods Protokolle anzeigt, stellen Sie sicher, dass die Controller-Pods ausgeführt werden:

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

Wenn der Cluster auf Fargate ausgeführt wird, stellen Sie sicher, dass ein Fargate-Profil für den Namespace erstellt wurde, in dem sich das Ingress- oder Service-Objekt befindet.

Führen Sie die folgenden Befehle aus, um zu überprüfen, ob ein Fargate-Profil für den Namespace erstellt wurde, in dem sich das Ingress- oder Service-Objekt befindet. Ersetzen Sie im folgenden Beispiel CLUSTER-NAME durch den Namen Ihres Clusters.

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

Führen Sie den folgenden Befehl aus, um ein Fargate-Profil zu erstellen. Ersetzen Sie im folgenden Beispiel CLUSTER-NAME, REGION, FARGATE-PROFILE-NAME und NAMESPACE durch die richtigen Werte für Ihren Anwendungsfall.

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

Überprüfen Sie, ob es nicht adressierte Abhängigkeiten gibt

Lesen Sie die Dokumentation, um sicherzustellen, dass alle Abhängigkeiten erfüllt sind. Für ALB siehe Application Load Balancing auf EKS. Für NLB siehe Netzwerklastenausgleich auf Amazon EKS.

Wenn Sie beispielsweise ALB verwenden, muss das Dienstobjekt den NodePort oder LoadBalancer angeben, um den Instanzverkehrsmodus zu verwenden.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?