Wie kann ich Probleme beim Erstellen eines Load Balancers mithilfe des AWS Load Balancer Controllers beheben?
Ich kann mit dem AWS Load Balancer Controller keinen Network Load Balancer oder einen Application Load Balancer erstellen. Oder der Load Balancer wird nicht erstellt, nachdem ich die Service- oder Ingress-Objekte erstellt habe.
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“ (Application Load Balancer) oder „Service“ (Network Load Balancer).
- 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.
- Suchen Sie nach nicht adressierten Abhängigkeiten.
Der AWS Load Balancer Controller verwaltet Elastic Load Balancing für einen EKS-Cluster. Der für die Verarbeitung Verantwortliche stellt die folgenden Ressourcen bereit:
- Einen Application Load Balancer, wenn Sie einen Kubernetes-Ingress erstellen.
- Einen Network Load Balancer, wenn Sie einen Kubernetes-Service vom Typ LoadBalancer erstellen. Zuvor wurde der Kubernetes Network Load Balancer für Instance-Ziele verwendet, und der AWS Load Balancer Controller wurde für IP-Ziele verwendet. Mit dem AWS Load Balancer Controller Version 2.3.0 oder höher können Sie einen Network Load Balancer mit beiden Zieltypen erstellen. Weitere Informationen finden Sie unter Zieltyp.
Lösung
Stellen Sie sicher, dass alle Voraussetzungen erfüllt sind
Eine Liste der Voraussetzungen für Application Load Balancer finden Sie unter Application Load Balancing in Amazon EKS. Eine Liste der NLB-Voraussetzungen finden Sie unter Network Load Balancing in Amazon EKS.
1. Stellen Sie sicher, dass der AWS Load Balancer Controller erfolgreich bereitgestellt wurde. Es hat sich bewährt, Version 2.4.4 oder höher zu verwenden.
2. Prüfen Sie die Anzahl der Subnetze. Application Load Balancer benötigt mindestens zwei Subnetze in verschiedenen Availability Zones. Der Network Load Balancer benötigt mindestens ein Subnetz. Die Subnetze müssen über mindestens acht verfügbare IP-Adressen verfügen. Weitere Informationen finden Sie unter Anzeigen Ihrer VPCs.
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 Network Load Balancer 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 Command Line Interface (AWS CLI) finden Sie unter Arbeiten mit Tags über die Befehlszeile.
Hinweis: Wenn beim Ausführen von AWS-CLI-Befehlen Fehler gemeldet werden, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.
- FSP 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.
Privates Subnetz-Tag:
- Schlüssel: "kubernetes.io/role/internal-elb"
- Wert: "1"
Öffentliche Subnetze markieren:
- Schlüssel: "kubernetes.io/role/elb"
- Wert: „1“
Überprüfen der Anmerkungen des Objekts „Ingress“ oder „Service“
Überprüfen Sie die Anmerkungen zum Objekt „Service“ oder die Anmerkungen zum Pbjekt „Ingress“. Die zur Konfiguration eines Load Balancers erforderlichen Anmerkungen lauten wie folgt:
Hinweis: Andere Anmerkungen verwenden Standardwerte. Eine Liste aller verfügbaren Anmerkungen, die vom AWS Load Balancer Controller for Application Load Balancing unterstützt werden, finden Sie unter Ingress-Anmerkungen. in GitHub geöffnet. Eine Liste aller verfügbaren Anmerkungen, die vom AWS Load Balancer Controller for Network Load Balancing unterstützt werden, finden Sie unter Service-Anmerkungen in GitHub.
Application Load Balancer
- kubernetes.io/ingress.class: alb: IngressClassParams ist eine benutzerdefinierte Ressourcendefinition (CRD), die spezifisch für den AWS Load Balancer Controller ist. Diese CRD kann zusammen mit dem Parameterfeld IngressClass verwendet werden. Sie können IngressClassParams verwenden, um Einstellungen für eine Reihe von Aufnahmen zu erzwingen.
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 Instance-Zielen: 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.
Der IP-Zieltyp ist erforderlich, wenn Ziel-Pods auf Fargate ausgeführt werden. 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>
Suchen nach nicht adressierten Abhängigkeiten
Amazon EKS fügt der Sicherheitsgruppe des Knotens die folgenden Regeln hinzu:
- Eine Regel für den eingehenden Client-Datenverkehr
- Eine Regel für eingehenden Datenverkehr für jedes Load-Balancer-Subnetz in der VPC für jeden Network Load Balancer, den Sie erstellen (für Zustandsprüfungen).
Die Bereitstellung eines Services vom Typ LoadBalancer schlägt möglicherweise fehl, wenn Amazon EKS versucht, Regeln zu erstellen, die das Kontingent für die maximal zulässige Anzahl von Regeln für eine Sicherheitsgruppe überschreiten.
Lesen Sie die Dokumentation, um sicherzustellen, dass alle Abhängigkeiten erfüllt sind. Informationen zum Application Load Balancer finden Sie unter Application Load Balancing in Amazon EKS. Informationen zum Network Load Balancer finden Sie unter Network Load Balancing in Amazon EKS. Wenn Sie beispielsweise Application Load Balancer verwenden, muss das Objekt „Service“ den NodePort oder LoadBalancer angeben, um den Datenverkehrsmodus der Instance zu verwenden.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 10 Monaten
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor 9 Monaten
- AWS OFFICIALAktualisiert vor 2 Monaten