Wie richte ich den AWS Load Balancer Controller auf einem Amazon-EKS-Cluster für Fargate ein und stelle das Spiel 2048 bereit?

Lesedauer: 6 Minute
0

Ich möchte den AWS Load Balancer Controller auf einem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster für AWS Fargate einrichten. Dann möchte ich das Spiel 2048 bereitstellen.

Kurzbeschreibung

Sie können den AWS Load Balancer Controller ohne vorhandene Application Load Balancer (ALB)-Ingress Controller-Bereitstellungen einrichten.

Bevor Sie den AWS Load Balancer Controller auf einem neuen Fargate-Cluster einrichten, führen Sie die folgenden Aktionen aus:

  • Deinstallieren Sie den AWS ALB Ingress Controller für Kubernetes. Der AWS Load Balancer Controller ersetzt die Funktionalität des AWS ALB Ingress Controllers.
  • Verwenden Sie eksctl-Version 0.109.0 oder höher. Weitere Informationen finden Sie unter Installation auf der eksctl-Website.
  • Installieren Sie Helm auf der Workstation.
  • Ersetzen Sie Platzhalterwerte in Codefragmenten durch Ihre eigenen Werte.

Lösung

Einen Amazon-EKS-Cluster, eine Servicekontorichtlinie und Richtlinien zur rollenbasierten Zugriffskontrolle (RBAC) erstellen

Gehen Sie wie folgt vor, um einen Cluster und Richtlinien zu erstellen:

  1. Führen Sie den folgenden Befehl aus, um eksctl zum Erstellen eines Amazon-EKS-Clusters zu verwenden:

    eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.28 --fargate

    Anmerkung: Sie müssen keine Fargate-Pod-Ausführungsrolle für Cluster erstellen, die nur Fargate-Pods verwenden (--fargate).

  2. Erlauben Sie dem Cluster, AWS Identity and Access Management (IAM) für Dienstkonten zu verwenden, indem Sie den folgenden Befehl ausführen:

    eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve

    Anmerkung: Die FargateExecutionRole ist die Rolle, die für das kubelet und den kube-proxy verwendet wird, um Ihren Fargate-Pod auszuführen. Dies ist jedoch nicht die Rolle, die für den Fargate-Pod verwendet wird (d. h. für den aws-load-balancer-controller). Für Fargate-Pods müssen Sie die IAM-Rolle für das Dienstkonto verwenden. Weitere Informationen finden Sie unter IAM-Rollen für Dienstkonten.

  3. Führen Sie den folgenden Befehl aus, um eine IAM-Richtlinie herunterzuladen, die es dem AWS Load Balancer Controller ermöglicht, in Ihrem Namen Aufrufe an AWS-APIs zu tätigen:

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
  4. Erstellen Sie eine IAM-Richtlinie mit der Richtlinie, die Sie heruntergeladen haben. Verwenden Sie den folgenden Befehl:

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. Erstellen Sie ein Dienstkonto mit dem Namen aws-load-balancer-controller im kube-system-Namespace für den AWS Load Balancer Controller. Verwenden Sie den folgenden Befehl:

    eksctl create iamserviceaccount \    
    --cluster=YOUR_CLUSTER_NAME \  
    --namespace=kube-system \  
    --name=aws-load-balancer-controller \  
    --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \  
    --override-existing-serviceaccounts \  
    --approve
  6. Führen Sie einen der folgenden Befehle aus, um zu überprüfen, ob die neue Servicerolle erstellt wurde:

    eksctl get iamserviceaccount --cluster YOUR_CLUSTER_NAME --name aws-load-balancer-controller --namespace kube-system

    -oder-

    kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system

Den AWS Load Balancer Controller mit Helm installieren

Gehen Sie wie folgt vor, um den AWS Load Balancer Controller zu installieren:

  1. Führen Sie den folgenden Befehl aus, um das Amazon-EKS-Chart zu Helm hinzuzufügen:

    helm repo add eks https://aws.github.io/eks-charts
  2. Aktualisieren Sie das Repo, um das neueste Chart abzurufen:

      helm repo update eks
  3. Führen Sie den folgenden Befehl aus, um das Helm-Chart zu installieren. Anmerkung: Ersetzen Sie clusterName, Region und vpcId durch Ihre Werte:

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \      
    --set clusterName=YOUR_CLUSTER_NAME \  
    --set serviceAccount.create=false \  
    --set region=YOUR_REGION_CODE \  
    --set vpcId=<VPC_ID> \  
    --set serviceAccount.name=aws-load-balancer-controller \  
    -n kube-system
  4. Stellen Sie sicher, dass der Controller erfolgreich installiert wurde:

    $ kubectl get deployment -n kube-system aws-load-balancer-controller     

    Beispielausgabe:

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    aws-load-balancer-controller   2/2     2            2           84s

Den AWS Load Balancer Controller testen

Sie können den AWS Load Balancer Controller verwenden, um entweder einen Application Load Balancer für Ingress oder einen Network Load Balancer zu erstellen. Sie verwenden einen davon, um einen k8s-Dienst zu erstellen. Gehen Sie wie folgt vor, um eine Beispiel-App namens 2048 mit Application Load Balancer Ingress bereitzustellen:

  1. Erstellen Sie ein Fargate-Profil, das für die Bereitstellung des Spiels erforderlich ist. Verwenden Sie den folgenden Befehl:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Führen Sie den folgenden Befehl aus, um das Samplespiel bereitzustellen und zu überprüfen, ob der AWS Load Balancer Controller eine ALB-Ingress-Ressource erstellt:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. Überprüfen Sie nach einigen Minuten, dass die Ingress-Ressource erstellt wurde, indem Sie den folgenden Befehl ausführen:

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

    Sie erhalten die folgende Ausgabe:

    NAME           CLASS    HOSTS   ADDRESS. PORTS   AGE
    ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-

    Anmerkung: Wenn die Ingress-Ressource 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

    Die Protokolle können Fehlermeldungen enthalten, die Ihnen bei der Diagnose von Problemen mit Ihrer Bereitstellung helfen.

  4. Öffnen Sie einen Browser, um die Beispielanwendung anzuzeigen. Navigieren Sie dann zur ADDRESS URL aus der vorherigen Befehlsausgabe.
    Anmerkung: Wenn Sie die Beispielanwendung nicht sehen, warten Sie einige Minuten und aktualisieren Sie Ihren Browser.

Bereitstellen einer Beispielanwendung

Gehen Sie wie folgt vor, um eine Beispielanwendung mit dem Network Load Balancer IP-Adressmodusdienst bereitzustellen:

  1. Führen Sie den folgenden Befehl aus, um ein Fargate-Profil zu erstellen:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Führen Sie den folgenden Befehl aus, um das Manifest für die Bereitstellung des 2048-Spiels abzurufen:

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. Löschen Sie im Manifest aus Schritt 2 diesen Ingress-Abschnitt:

    apiVersion: networking.k8s.io/v1kind: Ingress
    metadata:
      namespace: game-2048
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: service-2048           
                    port:
                      number: 80
  4. Ändern Sie das Service-Objekt:

    apiVersion: v1
    kind: Service
    metadata:
      namespace: game-2048
      name: service-2048
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: app-2048
  5. Führen Sie den folgenden Befehl aus, um das Dienst- und Bereitstellungsmanifest zu erstellen:

    kubectl apply -f 2048-game.yaml
  6. Führen Sie den folgenden Befehl aus, um die Diensterstellung und den DNS-Namen des Network Load Balancers zu überprüfen:

    kubectl get svc -n game-2048

    Sie haben die folgende Ausgabe erhalten:

    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                                PORT(S)        AGE
    service-2048   LoadBalancer   10.100.114.197   k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com   80:30159/TCP   23m
  7. Warten Sie einige Minuten, bis der Load Balancer aktiv ist. Prüfen Sie dann, ob Sie die Bereitstellung erreichen können. Öffnen Sie den vollqualifizierten Domainnamen (FQDN) des NLB, auf den im Abschnitt EXTERNE-IP verwiesen wird, in einem Webbrowser.

Beheben von Problemen mit dem AWS Load Balancer Controller

Wenn Sie Probleme mit dem Controller-Setup haben, führen Sie die folgenden Befehle aus:

$ kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
$ kubectl get endpoints -n game-2048
$ kubectl get ingress/ingress-2048 -n game-2048

Die Ausgabe des Logbefehls gibt Fehlermeldungen zurück (z. B. mit Tags oder Subnetzen). Diese Fehlermeldungen können Ihnen beim Beheben häufig auftretender Fehler helfen (auf der GitHub-Website von Kubernetes). Der Befehl get endpoints zeigt Ihnen, ob die unterstützten Bereitstellungs-Pods korrekt registriert sind. Die Befehle get ingress zeigen Ihnen, ob Ingress-Ressourcen bereitgestellt werden. Weitere Informationen finden Sie unter AWS Load Balancer Controller auf der Kubernetes-Website.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten