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?