Direkt zum Inhalt

Wie verwende ich den AWS Load Balancer Controller, um einen Application Load Balancer auf einer Amazon EC2-Knotengruppe in Amazon EKS einzurichten?

Lesedauer: 6 Minute
0

Ich möchte den AWS Load Balancer Controller verwenden, um einen Application Load Balancer auf einer Amazon Elastic Compute Cloud (Amazon EC2)-Knotengruppe in Amazon Elastic Kubernetes Service (Amazon EKS) einzurichten.

Behebung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Voraussetzung: Konfiguriere deine Subnetze so, dass sie den ausgehenden Internetzugang von deinen Worker-Knoten aus ermöglichen. AWS Load Balancer Controller benötigt eine ausgehende Internetverbindung.

Informationen zur Bereitstellung von AWS Load Balancer Controller auf AWS Fargate findest du unter Wie richte ich den AWS Load Balancer Controller auf einem Amazon EKS-Cluster für Fargate ein?

Subnetze taggen

Markiere die Amazon Virtual Private Cloud (Amazon VPC)-Subnetze in deinem Amazon EKS-Cluster. Nachdem du deine Subnetze markiert hast, erkennt dein AWS Load Balancer Controller automatisch Subnetze, wenn du die Application Load Balancer-Ressource erstellst.

Für öffentliche Application Load Balancer benötigst du mindestens zwei öffentliche Subnetze in der VPC deines Clusters mit dem Tag kubernetes.io/role/elb.

Für private Application Load Balancer benötigst du mindestens zwei private Subnetze in der VPC deines Clusters mit dem Tag kubernetes.io/role/internal-elb.

OIDC-Identitätsanbieter erstellen

Verwende die Amazon EKS-Konsole, die AWSL CLI oder eksctl, um einen OIDC-Identitätsanbieter zu erstellen, der mit AWS Identity and Access Management (IAM)-Rollen für Servicekonten (IRSA) verwendet werden kann.

Amazon-EKS-Konsole

Informationen zur Verwendung der Konsole findest du unter Erstellen eines OIDC-Identitätsanbieters (AWS-Konsole).

AWSL CLI

Suche den Fingerabdruck der Stammzertifizierungsstelle (CA), die dein Cluster verwendet. Führe dann den folgenden Befehl create-open-id-connect-provider aus:

ISSUER_URL=$(aws eks describe-cluster --name cluster-name \  --query "cluster.identity.oidc.issuer" --region region-name --output text)aws iam create-open-id-connect-provider \  
  --url ${ISSUER_URL} \  
  --thumbprint-list ca-thumbprint \  
  --client-id-list sts.amazonaws.com \  
  --region region-name

Hinweis: Ersetze cluster-name durch den Namen deines Clusters, region-name durch deine AWS-Region und ca-thumbprint durch den Fingerabdruck deines von der Stammzertifizierungsstelle ausgestellten Zertifikats.

eksctl

Informationen zur Verwendung des Befehlszeilentools eksctl findest du unter Erstellen eines OIDC-Identitätsanbieters (eksctl).

Erstellen einer IAM-Richtlinie

Erstelle eine IAM-Richtlinie, die es dem AWS Load Balancer Controller ermöglicht, AWS-APIs aufzurufen.

Wichtig: Es ist eine bewährte Methode, IRSA zu verwenden, wenn du Zugriff auf AWS-APIs gewährst.

Führe die folgenden Schritte aus:

  1. Führe je nach Region einen der folgenden Befehle aus, um eine IAM-Richtlinie für den AWS Load Balancer Controller von GitHub herunterzuladen.
    Führe für alle Regionen außer Peking und Ningxia, China, den folgenden Befehl describe-cluster aus:

    ISSUER_URL= aws eks describe-cluster --name example-cluster-name \  --query "cluster.identity.oidc.issuer" --region example-region-name --output text  
    aws iam create-open-id-connect-provider \  
      --url example-issuer-url \  
      --thumbprint-list ca-thumbprint \  
      --client-id-list sts.amazonaws.com \  --region example-region-name

    Hinweis: Ersetze example-cluster-name durch den Namen deines Clusters, example-region-name durch deine Region und example-issuer-url durch die URL deines Ausstellers.
    Führe für die chinesischen Regionen Peking und Ningxia den folgenden Befehl curl aus:

    curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
  2. Führe den folgenden Befehl create-policy aus, um eine IAM-Richtlinie mit dem Namen AWSLoadBalancerControllerIAMPolicy für dein Worker-Knoten-Instance-Profil zu erstellen:

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \    --policy-document file://iam-policy.json
  3. Notiere dir den Amazon-Ressourcennamen (ARN) der Richtlinie, die der Befehl zurückgibt.

  4. Verwende die vorhandene IAM-Rolle oder erstelle eine neue IAM-Rolle für den AWS Load Balancer Controller.
    Hinweis: Um mit eksctl eine IAM-Rolle zu erstellen, verwende den Parameter --attach-policy-am mit dem ARN der IAM-Richtlinie AWSLoadBalancerControllerIAMPolicy.

  5. Führe den folgenden Befehl attach-role-policy aus, um AWSLoadBalancerControllerIAMPolicy an deine IAM-Rolle anzuhängen:

    aws iam attach-role-policy \--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \--role-name role-name  
    

    Hinweis: Ersetzen Sie 111122223333 durch die AWS-Konto-ID und role-name durch den Namen Ihrer IAM-Rolle.

Bereitstellen des AWS Load Balancer Controllers

Führe die folgenden Schritte aus:

  1. Stelle sicher, dass du über den erforderlichen Tag für den Load Balancer verfügst, der deinen Subnetzen zugeordnet ist.

  2. Führe den folgenden Befehl mit Kubernetes 1.16 oder höher aus, um cert-manager zu installieren:

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/example-version/cert-manager.yaml
  3. Führe in der Manifestdatei, die du von GitHub heruntergeladen hast, den folgenden Befehl aus:

    curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/example-version/v2_13_3_full.yaml  
    

    Hinweis: Ersetze example-version durch die Version von AWS Load Balancer Controller, die du bereitstellen möchtest. Informationen zur Überprüfung der AWS Load Balancer Controller-Version findest du unter Kubernetes SIGs auf der GitHub-Website. Achte darauf, den Dateinamen so zu ändern, dass er deiner Version entspricht. Im vorherigen Codebeispiel entspricht v2_13_3_full.yaml dem AWS Load Balancer Controller v2.13.3. Weitere Informationen findest du unter aws-load-balancer-controller auf der GitHub-Website.

  4. Nimm im Abschnitt ServiceAccount der .yaml-Datei die folgenden Aktualisierungen vor:

    spec:        containers:  
        - args:  
            - --cluster-name=example-cluster-name  
            - --ingress-class=alb

    Hinweis: Ersetze example-cluster-name durch den Namen deines Clusters.
    Im folgenden Beispiel ist 111122223333 die Konto-ID und example-role-name ist der IAM-Rollenname:

    apiVersion: v1  
    kind: ServiceAccount  
    metadata:  
      labels:  
        app.kubernetes.io/component: controller  
        app.kubernetes.io/name: aws-load-balancer-controller  
      annotations:                                                                         
        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/example-role-name       
      name: aws-load-balancer-controller  
      namespace: kube-system
  5. Führe den folgenden Befehl aus, um den AWS Load Balancer Controller bereitzustellen:

    kubectl apply -f ingress-controller.yaml

Eine Beispielanwendung bereitstellen

Stelle eine Beispielanwendung bereit, um zu überprüfen, ob der AWS Load Balancer Controller aufgrund des eingehenden Objekts einen öffentlichen Application Load Balancer erstellt.

Führe die folgenden Schritte aus:

  1. Führe den folgenden Befehl aus, um ein Spiel namens 2048 bereitzustellen:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/example-version/docs/examples/2048/2048_full.yaml

    Hinweis: Ersetze example-version durch die Version des AWS Load Balancer Controllers, den du bereitstellen möchtest. Informationen zur Überprüfung deiner AWS Load Balancer Controller-Version findest du unter Kubernetes SIGs auf der GitHub-Website.

  2. Führe nach einigen Minuten den folgenden Befehl aus, um zu überprüfen, ob Kubernetes die eingehende Ressource erstellt hat:

    kubectl get ingress/ingress-2048 -n game-2048

    Beispielausgabe:

    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
  3. Wenn Kubernetes deine eingehende Ressource nicht erstellt, führe den folgenden Befehl aus, um die AWS Load Balancer Controller-Protokolle auf Bereitstellungsfehlermeldungen zu überprüfen:

    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
  4. Um das Spiel zu sehen, öffne einen Webbrowser und gib dann die URL-Adresse aus der Ausgabe in Schritt 2 ein.

  5. Führe den folgenden Befehl aus, um das Spiel zu löschen:

    kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/example-version/docs/examples/2048/2048_full.yaml

    Hinweis: Ersetze example-version durch die Version des AWS Load Balancer Controllers, den du bereitstellen möchtest.

AWS OFFICIALAktualisiert vor 6 Monaten