Wie behebe ich Probleme mit Load Balancern, die vom Kubernetes-Servicecontroller in Amazon EKS erstellt wurden?
Ich kann keinen Kubernetes-Service erstellen, der von einem Load Balancer in Amazon Elastic Kubernetes Service (Amazon EKS) unterstützt wird.
Kurzbeschreibung
Amazon EKS verwendet einen von zwei Controllern zur Verwaltung eines Load Balancers: AWS Load Balancer Controller oder den Kubernetes-Servicecontroller. Die folgenden Schritte zur Fehlerbehebung gelten nur für Load Balancer, die vom Kubernetes-Servicecontroller verwaltet werden. Weitere Informationen finden Sie unter The Service Controller (Der Servicecontroller) auf der Website von Kubenetes AWS Cloud Provider und unter Type LoadBalancer (Typ „LoadBalancer“) auf der Kubernetes-Website.
Stellen Sie bei der Fehlerbehebung für Ihren Service-Load-Balancer sicher, dass Sie die über die folgenden Konfigurationen verfügen:
- Die richtigen Tags für Ihre Amazon Virtual Private Cloud (Amazon VPC)-Subnetze
- Die erforderlichen AWS Identity and Access Management (IAM)-Berechtigungen für die IAM-Rolle Ihres Clusters
- Eine gültige Kubernetes-Servicedefinition
- Load Balancer, die innerhalb Ihres Kontolimits bleiben
- Genügend freie IP-Adressen in Ihren Subnetzen
- Einen richtig konfigurierten Load Balancer zur Vermeidung von Problemen durch Verbindungtimeouts
- Fehlerfreie Load-Balancer-Ziele
Wenn das Problem nach der Überprüfung aller vorangegangenen Punkte weiterhin besteht, befolgen Sie die Schritte im Abschnitt Weitere Schritte zur Fehlerbehebung versuchen.
Lösung
Die folgenden Schritte gelten für den Classic Load Balancer und den Network Load Balancer. Informationen zum Application Load Balancer finden Sie unter Application Load Balancing auf Amazon EKS.
Hinweis: Wenn beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, stellen Sie sicher, dass Sie die aktuelle Version der AWS CLI verwenden.
Verwenden die richtigen Tags für Ihre Amazon-VPC-Subnetze
1. Öffnen Sie die Amazon-VPC-Konsole.
2. Wählen Sie im Navigationsbereich die Option Subnetze aus.
3. Wählen Sie die Registerkarte Tags für jedes Subnetz aus, und überprüfen Sie dann, ob ein Tag vorhanden ist. Beispiel:
Key: kubernetes.io/cluster/yourEKSClusterName Value: shared
Hinweis: In diesem Fall kann der Wert entweder freigegeben oder im Besitz sein.
Standardmäßig erkennt der Controller die Subnetze automatisch. Wenn es mehrere Subnetze pro Availability Zone gibt, dann priorisiert der Controller die Subnetze in der folgenden Reihenfolge:
- Subnetze mit dem richtigen Rollen-Tag: kubernetes.io/role/elb für öffentliche Subnetze und kubernetes.io/role/internal-elb für private Subnetze
- Subnetze mit dem Cluster-Tag: kubernetes.io/cluster/CLUSTER_NAME
- Das Subnetz, das in lexikografischer Reihenfolge an erster Stelle steht
4. Vergewissern Sie sich, dass für Ihre öffentlichen Subnetze das folgendes Tag vorhanden ist:
Key: kubernetes.io/role/elb Value: 1
Hinweis: Um festzustellen, ob ein Subnetz öffentlich ist, überprüfen Sie die Routing-Tabelle, die dem Subnetz zugeordnet ist. Ein öffentliches Subnetz hat eine Route zu einem Internet-Gateway (igw-xxxxxxxxxxx). Ein privates Subnetz hat eine Route zum Internet über ein NAT-Gateway oder eine NAT-Instance oder überhaupt keine Route zum Internet.
Wichtig: Sie benötigen das Tag in Schritt 4, um einen mit dem Internet verbundenen Load-Balancer-Service zu erstellen. Ein mit dem Internet verbundener Load Balancer leitet Anforderungen von Clients über das Internet an Ziele weiter.
5. Vergewissern Sie sich, dass für Ihre privaten Subnetze das folgendes Tag vorhanden ist:
Key: kubernetes.io/role/internal-elb Value: 1
Wichtig: Sie benötigen das Tag in Schritt 5, um einen internen Load-Balancer-Service zu erstellen. Ein interner Load Balancer verwendet private IP-Adressen, um Anforderungen an Ziele weiterzuleiten.
Festlegen der erforderlichen AWS Identity and Access Management (IAM)-Berechtigungen für die IAM-Rolle Ihres Clusters
1. Öffnen Sie die Amazon-EKS-Konsole.
2. Wählen Sie im Navigationsbereich die Option Cluster aus.
3. Wählen Sie Ihren Cluster aus und notieren Sie sich dann den IAM-Rollen-ARN des Clusters.
- Öffnen Sie die IAM-Konsole.
5. Wählen Sie im Navigationsbereich die Option Rollen aus.
6. Wählen Sie die Rolle aus, die dem in Schritt 3 identifizierten IAM-Rollen-ARN des Clusters entspricht.
7. Vergewissern Sie sich, dass die von AWS verwaltete Richtlinie AmazonEKSClusterPolicy mit Ihrer Rolle verknüpft ist.
Hinweis: Die Amazon-EKS-Steuerebene übernimmt die vorherige IAM-Rolle, um einen Load Balancer für Ihren Service zu erstellen.
Verwenden einer gültigen Kubernetes-Servicedefinition
Stellen Sie in der YAML-Datei für Ihren Kubernetes-Service sicher, dass spec.type auf LoadBalancer festgelegt ist.
Sehen Sie sich das folgende Beispiel für einen Kubernetes-Service an, der von einem Load Balancer unterstützt wird:
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
Hinweis: Informationen zum Anpassen Ihres Service mit einer anderen Anmerkung finden Sie auf der Kubernetes-Website unter Internal load balancer (Interner Load Balancer) und TLS support on AWS (TLS-Unterstützung in AWS).
Der in Kubernetes integrierte Servicecontroller erstellt standardmäßig einen Classic Load Balancer. Für die Bereitstellung von Network Load Balancer muss der Service die Anmerkung service.beta.kubernetes.io/aws-load-balancer-type: "nlb" aufweisen. Weitere Einzelheiten finden Sie auf der Kubernetes-Website unter Network Load Balancer support on AWS (Unterstützung von Network Load Balancer in AWS).
Sicherstellen, dass Ihre Load Balancer innerhalb Ihres Kontolimits liegen
Ein AWS-Konto verfügt standardmäßig über maximal 20 Load Balancer pro AWS-Region.
Um die Anzahl Ihrer Load Balancer zu überprüfen, öffnen Sie die Amazon Elastic Compute Cloud (Amazon EC2)-Konsole. Wählen Sie dann im Navigationsbereich die Option Load Balancer aus.
Wenn Sie die maximale Anzahl an Load Balancern erreicht haben, können Sie bei Service Quotas eine Erhöhung beantragen.
Sicherstellen, dass in Ihren Subnetzen genügend freie IP-Adressen vorhanden sind
Zum Erstellen eines Load Balancers muss jedes Subnetz dieses Load Balancers über mindestens acht freie IP-Adressen verfügen. Dies gilt sowohl für den Classic Load Balancer als auch für den Network Load Balancer.
Probleme durch Verbindungtimeouts
Wenn bei Ihrem Load Balancer zeitweise oder dauerhaft Timeoutprobleme auftreten, liegt möglicherweise ein Problem mit der Konfiguration des Load Balancers vor. Dies kann passieren, wenn der Back-End-Service den eingehenden Datenverkehr nicht verarbeiten kann oder zu viele Anforderungen an den Load Balancer gesendet werden. Weitere Informationen finden Sie unter Wie behebe ich die Fehler „Connection timed out“ bei Elastic Load Balancing?
Überprüfen der Zustandsprüfungen des Load Balancers
Wenn Sie den Endpunkt nicht richtig konfigurieren oder der Back-End-Service nicht auf Zustandsprüfungsanforderungen reagiert, treten Probleme bei der Load-Balancer-Zustandsprüfung auf.
Führen Sie den AWS-CLI-Befehl describe-target-health aus, um zu überprüfen, ob der Load Balancer auf den richtigen Endpunkt verweist:
aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09
Führen Sie den AWS-CLI-Befehl describe-target-groups aus, um die Konfiguration der Zustandsprüfung der Zielgruppe zu überprüfen:
aws elbv2 describe-target-groups --target-group-arns arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09
Weitere Informationen finden Sie unter Zustandsprüfungen für Ihre Zielgruppen.
Weitere Schritte zur Fehlerbehebung versuchen
Führen Sie den folgenden describe-service-Befehl aus, um im Kubernetes-Service nach einer Fehlermeldung zu suchen, die Ihnen bei der Behebung des Problems helfen kann:
$ kubectl describe service my-elb-service
Wenn der Service erfolgreich erstellt wurde, erhalten Sie eine ähnliche Ausgabe wie im folgenden Beispiel:
... ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 47s service-controller Ensuring load balancer Normal EnsuredLoadBalancer 44s service-controller Ensured load balancer
Wenn der Service nicht erfolgreich erstellt wurde, erhalten Sie eine Fehlermeldung.
Weitere Informationen zu Fehlermeldungen finden Sie in den folgenden Ressourcen:
- Verwenden Sie die Amazon-EKS-Steuerebenen-Protokollierung.
- Erfahren Sie auf der Kubernetes-Website mehr über den Kubernetes-LoadBalancer-Service.
- Sehen Sie sich den AWS-Cloud-Anbieter auf der GitHub-Website von Kubernetes an.
Relevante Informationen
Troubleshoot your Application Load Balancers (Fehlerbehebung bei Ihren Application Load Balancern)
Troubleshoot your Classic Load Balancer (Fehlerbehebung bei Ihrem Classic Load Balancer)
Ähnliche Videos
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr