Warum kann mein AWS Load Balancer Controller mein Subnetz in Amazon EKS nicht finden?
Letzte Aktualisierung: 06.10.2021
Mein AWS Load Balancer Controller kann mein Subnetz nicht im Amazon Elastic Kubernetes Service (Amazon EKS) finden.
Kurzbeschreibung
Sie erhalten eine Fehlermeldung, wenn Ihr AWS Load Balancer Controller Ihr Subnetz in Amazon EKS nicht finden kann.
Wenn Sie die folgende Fehlermeldung erhalten, verfügt die AWS-Identity-and-Access-Management (IAM)-Rolle Ihres Servicekontos für den AWS Load Balancer Controller nicht über die erforderlichen Berechtigungen:
{"level":"error","ts":1621443417.9175518,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":" ingress-2048","namespace":" game-2048","error":"couldn't auto-discover subnets: UnauthorizedOperation: You are not authorized to perform this operation.\n\tstatus code: 403, request id: 72ee57ae-f804-4f81-b069-8b04114b67b0"}
Um den vorhergehenden Fehler zu beheben, führen Sie die Schritte im Abschnitt Beheben des Fehlers Berechtigung verweigert aus:
-oder-
Wenn Sie die folgende Fehlermeldung erhalten, kann Ihr AWS Load Balancer Controller mindestens ein Subnetz nicht erkennen:
{"level":"error","ts":1608229710.3212903,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"ingress-2048","namespace":"game-2048","error":"couldn't auto-discover subnets: unable to discover at least one subnet"}
Um den vorhergehenden Fehler zu beheben, führen Sie die Schritte im Abschnitt Beheben des Fehlers bei der Erkennung einzelner Subnetze aus:
-oder-
Wenn Sie einen der folgenden Fehler erhalten, kann Ihr AWS Load Balancer Controller zwei oder mehr qualifizierte Subnetze nicht erkennen.
"msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to failed to resolve 2 qualified subnet with at least 8 free IP Addresses for ALB
{"level":"error","ts":1606329481.2930484,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"reciter-ing","namespace":"reciter","error":"InvalidSubnet: Not enough IP space available in subnet-xxxxxxxxxxxxxx. ELB requires at least 8 free IP addresses in each subnet.\n\tstatus code: 400, request id: 2a37780c-f411-xxxxx-xxxxx-xxxxxxxxx"}
Um die vorangegangenen Fehler zu beheben, führen Sie die Schritte im Abschnitt Beheben mehrerer Subnetz-Erkennungsfehler aus:
Auflösung
Beheben des Fehlers Berechtigung verweigert
1. Stellen Sie sicher, dass Ihr Servicekonto dem AWS Load Balancer Controller zugeordnet ist:
$ kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccount
Ausgabe:
serviceAccount: aws-load-balancer-controller
serviceAccountName: aws-load-balancer-controller
Hinweis: Wenn Ihre Bereitstellung in einem anderen Namespace bereitgestellt wird, ersetzen Sie -n kube-system durch den entsprechenden Namespace.
2. Sehen Sie, welche IAM-Rolle dem Servicekonto angefügt ist, das dem AWS Load Balancer Controller zugeordneten ist:
$ kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arn
Ausgabe:
annotations: eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxxxxxx:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-xxxxxxxxxxxxx
3. Erteilen Sie ec2:DescribeAvailabilityZones-Berechtigungen für die IAM-Rolle, die Sie in Schritt 2 identifizieren.
Beheben Sie den Erkennungsfehler eines einzelnen Subnetz
1. Fügen Sie die entsprechenden Tags in Ihren Subnetzen hinzu, damit der AWS Load Balancer Ingress Controller mithilfe der automatischen Erkennung einen Load Balancer erstellen kann.
Beispiel für private Subnetz-Tags:
kubernetes.io/role/internal-elb Set to 1 or empty tag value for internal load balancers
Beispiel für öffentliche Subnetz-Tags:
kubernetes.io/role/elb Set to 1 or empty tag value for internet-facing load balancers
Hinweis: Sie können Ihrem Load Balancer mithilfe der Anmerkung alb.ingress.kubernetes.io/subnets manuell Subnetze zuweisen. Weitere Informationen finden Sie unter Ingress-Anmerkungen auf der Webseite des AWS Load Balancer Controllers.
Beispiel für ein Subnetz mit den richtigen Tags für einen Cluster mit einem internen Load Balancer (privates Subnetz):
kubernetes.io/role/internal-elb 1
Beispiel für ein Subnetz mit den richtigen Tags für einen Cluster mit einem öffentlichen Load Balancer (öffentliches Subnetz):
kubernetes.io/role/elb
2. Markieren Sie Ihre Subnetze mit dem entsprechenden Format.
Schlüssel: kubernetes.io/cluster/your-cluster-name
Wert: shared (geteilt) oder owned (eigen)
Wichtig: Wenn Sie vom AWS Load Balancer Controller die Version v2.1.1 oder früher verwenden, müssen Sie Ihre Subnetze im vorherigen Format kennzeichnen. Markieren ist für Versionen 2.1.2 oder höher optional. Es ist eine bewährte Methode, ein Subnetz zu markieren, wenn eine der folgenden Bedingungen zutrifft:
- Sie haben mehrere Cluster, die in derselben VPC ausgeführt werden.
- Sie haben mehrere AWS-Services, die Subnetze in einer VPC gemeinsam nutzen.
- Sie möchten mehr Kontrolle darüber haben, wo Load Balancer für jeden Cluster bereitgestellt werden.
Beheben mehrerer Subnetz-Erkennungsfehler
1. Vergewissern Sie sich, dass Sie mindestens zwei Subnetze in zwei verschiedenen Availability Zones haben, was für die Erstellung eines Application Load Balancers erforderlich ist.
Hinweis: Sie können einen Network Load Balancer mit einem einzigen Subnetz erstellen.
2. Geben Sie für jedes Subnetz einen CIDR-Block mit mindestens einer /27-Bitmaske an (zum Beispiel: 10.0.0.0/27) und mindestens acht freie IP-Adressen.
3. Vergewissern Sie sich, dass die Tags in den Subnetzen korrekt formatiert sind. Beispielsweise dürfen die Tags keine führenden oder nachfolgenden Leerzeichen haben.
War dieser Artikel hilfreich?
Benötigen Sie Hilfe zur Fakturierung oder technischen Support?