Wie kann ich die Amazon VPC-Subnetze in meinem Amazon EKS-Cluster für die automatische Erkennung von Subnetzen durch Load Balancers oder Ingress-Controllers taggen?

Lesedauer: 3 Minute
0

Ich möchte Load Balancers oder Ingress-Controllers in den öffentlichen oder privaten Subnetzen meiner Amazon Virtual Private Cloud (Amazon VPC) einsetzen. Warum können meine Subnetze nicht von Kubernetes in meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster erkannt werden?

Kurzbeschreibung

Der Kubernetes Cloud Controller Manager (Cloud-Controller-Manager) und der AWS Load Balancer Controller (aws-load-Balancer-Controller) fragen die Subnetze eines Clusters ab, um sie zu identifizieren. Diese Abfrage verwendet den folgenden Tag als Filter:

kubernetes.io/cluster/cluster-name

**Hinweis:**Ersetzen Sie den Clusternamen durch den Namen Ihres Amazon EKS-Clusters.

Der Cloud Controller Manager und der AWS Load Balancer Controller erfordern beide, dass Subnetze eines der folgenden Tags haben:

kubernetes.io/role/elb

-oder-

kubernetes.io/role/internal-elb

**Hinweis:**Wenn Sie die obigen Tags nicht verwenden, ermittelt Cloud Controller Manager anhand der zugehörigen Routing-Tabelle, ob ein Subnetz öffentlich oder privat ist. Im Gegensatz zu privaten Subnetzen verwenden öffentliche Subnetze ein Internet-Gateway, um eine direkte Verbindung zum Internet zu erhalten.

Wenn Sie Ihre Subnetze keinem der beiden Tags zuordnen und den AWS Load Balancer Controller verwenden, erhalten Sie eine Fehlermeldung.

Wenn Sie beispielsweise Probleme mit dem Kubernetes-Dienst beheben und den Befehl kubectl describe service your-service-name ausführen, erhalten Sie die folgende Fehlermeldung:

Events:
  Type     Reason                      Age               From                Message
  ----     ------                      ----              ----                -------
  Normal   EnsuringLoadBalancer        9s (x2 over 14s)  service-controller  Ensuring load balancer
  Warning  CreatingLoadBalancerFailed  9s (x2 over 14s)  service-controller  Error creating load balancer (will retry): failed to ensure load balancer for service default/guestbook: could not find any suitable subnets for creating the ELB

Wenn Sie Probleme mit dem Application Load Balancer Ingress Controller beheben und den Befehl kubectl logs your-aws-load-balancer-controller-pod-name ausführen, erhalten Sie die folgende Fehlermeldung:

E0121 22:44:02.864753       1 controller.go:217] kubebuilder/controller "msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to
retrieval of subnets failed to resolve 2 qualified subnets. Subnets must contain the kubernetes.io/cluster/\u003ccluster name\u003e tag with a value of shared or owned and the kubernetes.io/role/elb tag signifying it should be used for ALBs Additionally, there must be at least 2 subnets with unique availability zones as required by ALBs. Either tag subnets to meet this requirement or use the subnets annotation on the ingress resource to explicitly call out what subnets to use for ALB creation. The subnets that did resolve were []"  "controller"="alb-ingress-controller" "request"={"Namespace":"default","Name":"2048-ingress"}

**Hinweis:**Wenn Sie die VPC mit Eksctl erstellen, haben alle Subnetze in dieser VPC die Tags kubernetes.io/role/elb und kubernetes.io/role/internal-elb.

Lösung

Wählen Sie die entsprechende Option für das Taggen Ihrer Subnetze:

Für öffentliche und private Subnetze, die von Load Balancer-Ressourcen verwendet werden

Taggen Sie alle öffentliche und private Subnetze, die Ihr Cluster als Load Balancer-Ressource verwendet, mit dem folgenden Schlüssel-Werte-Paar:

Key: kubernetes.io/cluster/cluster-name
Value: shared

**Hinweis:**Ersetzen Sie den Clusternamen durch den Namen Ihres Amazon EKS-Clusters. Der gemeinsame Wert ermöglicht es mehr als einem Cluster, das Subnetz zu verwenden.

Für private Subnetze, die von internen Load Balancers verwendet werden

Damit Kubernetes Ihre privaten Subnetze für interne Load Balancers verwenden kann, taggen Sie alle privaten Subnetze in Ihrer VPC mit dem folgenden Schlüssel-Werte-Paar:

Key: kubernetes.io/role/internal-elb
Value: 1

Für öffentliche Subnetze, die von externen Load Balancers verwendet werden

Damit Kubernetes nur markierte Subnetze für externe Load Balancers verwenden kann, markieren Sie alle öffentlichen Subnetze in Ihrer VPC mit dem folgenden Schlüssel-Werte-Paar:

Key: kubernetes.io/role/elb
Value: 1

**Hinweis:**Verwenden Sie das vorherige Tag, anstatt in jeder Availability Zone ein öffentliches Subnetz zu verwenden.


Verwandte Informationen

Amazon EKS VPC- und Subnetzanforderungen und Überlegungen

Subnetz Auto Discovery auf der GitHub-Website

Anwendungslastenausgleich auf Amazon EKS

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr