Wie richte ich einen Application Load Balancer durch den AWS Load Balancer Controller auf einer Amazon EC2-Knotengruppe in Amazon EKS ein?

Lesedauer: 6 Minute
0

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

Kurzbeschreibung

Verbinden Sie den AWS Load Balancer Controller mit einem der folgenden AWS-Serviceendpunkte:

  • AWS Identity and Access Management (IAM)
  • Amazon EC2
  • AWS Certificate Manager (ACM)
  • Elastic Load Balancing (ELB)
  • Amazon Cognito
  • AWS WAF
  • AWS Shield

Damit der AWS Load Balancer Controller funktioniert, müssen Sie über eine ausgehende Internetverbindung verfügen. Weitere Informationen finden Sie unter Wie konfiguriere ich meine Subnetze für einen Amazon EKS-Cluster?

Informationen zur Bereitstellung des AWS Load Balancer Controllers auf AWS Fargate finden Sie unter Wie richte ich den AWS Load Balancer Controller auf einem Amazon EKS-Cluster für Fargate ein und stelle das 2048-Spiel bereit?

Behebung

Subnetze markieren, um die automatische Erkennung zu ermöglichen

Markieren Sie die Amazon Virtual Private Cloud (Amazon VPC) -Subnetze in Ihrem Amazon EKS-Cluster. Dadurch kann Ihr AWS Load Balancer Controller automatisch Subnetze erkennen, wenn Sie die Application Load Balancer-Ressource erstellen.

Für öffentliche Application Load Balancers müssen Sie in der VPC des Clusters mindestens zwei öffentliche Subnetze mit den folgenden Markierungen haben:

kubernetes.io/role/elb

Für interne Application Load Balancers müssen Sie in der VPC des Clusters mindestens zwei private Subnetze mit den folgenden Markierungen haben:

kubernetes.io/role/internal-elb

Erstellen eines OIDC-Identitätsanbieters für den Cluster

Verwenden Sie entweder eksctl oder die AWS-Managementkonsole, um einen OpenID Connect (OIDC)-Identitätsanbieter zu erstellen, der mit IAM-Rollen für Dienstkonten verwendet werden kann.

**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Oder verwenden Sie die AWSL CLI, um einen OIDC-Identitätsanbieter für den Cluster zu erstellen. Zum Beispiel:

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: Ersetzen Sie cluster-name durch den Namen Ihres Clusters, region-name durch Ihre AWS-Region und ca-thumbprint durch den Fingerabdruck Ihres von der Stammzertifizierungsstelle ausgestellten Zertifikats. Sie können den Fingerabdruck des Zertifikats der Stammzertifizierungsstelle, das Ihr Cluster verwendet, mit oidc.eks.region-name.amazonaws.com abrufen.

Erstellen einer IAM-Richtlinie für den AWS Load Balancer Controller

Die Amazon EKS-Richtlinie, die Sie erstellen, ermöglicht es dem AWS Load Balancer Controller, Aufrufe an AWS-APIs zu tätigen. Wenn Sie Zugriff auf AWS-APIs gewähren, ist es eine bewährte Praxis, AWS IAM-Rollen für Servicekonten zu verwenden.

  1. Laden Sie eine IAM-Richtlinie für den AWS Load Balancer Controller von GitHub herunter. Führen Sie einen der folgenden Befehle für Ihre Region aus.
    Alle Regionen außer den Regionen Chinas:

    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

    Peking und Ningxia, Regionen Chinas:

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

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \
        --policy-document file://iam-policy.json
  3. Notieren Sie sich den ARN der Richtlinie, der in der Ausgabe zurückgegeben wird.

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

  5. Führen Sie den folgenden Befehl aus, um AWSLoadBalancerControllerIAMPolicy 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

  1. Stellen Sie sicher, dass Sie über die erforderlichen Markierungen für den Load Balancer verfügen, der Ihren Subnetzen zugeordnet ist.

  2. Installieren Sie cert-manager, damit Sie die Zertifikatskonfiguration in die Webhooks einfügen können. Verwenden Sie Kubernetes 1.16 oder höher, um den folgenden Befehl auszuführen:

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
  3. Führen Sie in der Manifestdatei, die Sie von GitHub heruntergeladen haben, den folgenden Befehl aus:

    curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_6_2_full.yaml

    Hinweis: Ersetzen Sie $VERSION durch die AWS Load Balancer Controller-Version, die Sie bereitstellen möchten, und ändern Sie den Dateinamen, z. B. v2_6_2_full.yaml für v2.6.2. Weitere Informationen finden Sie unter Das Kubernetes-Repository auf GitHub.

  4. Bearbeiten Sie cluster-name für Ihren Cluster. Zum Beispiel:

    spec:    
        containers:
        - args:
            - --cluster-name=your-cluster-name # edit the cluster name
            - --ingress-class=alb
  5. Aktualisieren Sie nur den Abschnitt ServiceAccount der Datei. Zum Beispiel:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      labels:
        app.kubernetes.io/component: controller
        app.kubernetes.io/name: aws-load-balancer-controller
      annotations:                                                                        # Add the annotations line
        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/role-name              # Add the IAM role
      name: aws-load-balancer-controller
      namespace: kube-system

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

  6. Führen Sie den folgenden Befehl aus, um den AWS Load Balancer Controller bereitzustellen:

    kubectl apply -f ingress-controller.yaml

Stellen Sie eine Beispielanwendung bereit, um den AWS Load Balancer Controller zu testen

Stellen Sie eine Beispielanwendung bereit, um zu prüfen, ob der AWS Load Balancer Controller aufgrund des Eingangsobjekts einen öffentlichen Application Load Balancer erstellt.

  1. Führen Sie den folgenden Befehl aus, um ein Spiel namens 2048 als Beispielanwendung bereitzustellen:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Hinweis: Ersetzen Sie $VERSION durch die Version (von der GitHub-Website von Kubernetes SIGs) des AWS Load Balancer Controllers, den Sie bereitstellen möchten.
  2. Warten Sie einige Minuten, um zu prüfen, ob die Eingangsressource erstellt wurde, und führen Sie dann den folgenden Befehl aus:
    kubectl get ingress/ingress-2048 -n game-2048
    Sie erhalten eine Ausgabe, die der folgenden ähnelt:
    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
     
  3. Wenn der Eingang nach einigen Minuten Wartezeit nicht erstellt wurde, führen Sie den folgenden Befehl aus, um die Protokolle des AWS Load Balancer Controllers einzusehen:
    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
    Hinweis: In den Protokollen des AWS Load Balancer Controllers werden oft Fehlermeldungen angezeigt, die Ihnen bei der Behebung von Problemen mit Ihrer Bereitstellung helfen können.
  4. Um die Beispielanwendung zu sehen, öffnen Sie einen Webbrowser und wechseln Sie dann in Schritt 2 zur URL-Adresse aus der Ausgabe.
  5. Führen Sie den folgenden Befehl aus, um die Beispielanwendung zu bereinigen:
    kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Hinweis: Ersetzen Sie $VERSION durch die Version (von der GitHub-Website von Kubernetes SIGs) des AWS Load Balancer Controllers, den Sie bereitstellen möchten.

Ähnliche Informationen

Wie behebe ich Probleme mit Load Balancern, die vom Kubernetes-Servicecontroller in Amazon EKS erstellt wurden?

Wie kann ich Probleme beheben, wenn ich den AWS Load Balancer Controller verwende, um einen Load Balancer zu erstellen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr