Wie richte ich einen Application Load Balancer mithilfe des AWS Load Balancer Controllers auf einer Amazon EC2-Knotengruppe in Amazon EKS ein?

Lesedauer: 6 Minute
0

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

Kurzbeschreibung

Die folgenden Schritte zeigen Ihnen, wie Sie den Application Load Balancer mithilfe des AWS Load Balancer Controllers auf einer Amazon EC2-Knotengruppe mit Amazon EKS bereitstellen. Informationen zum Erstellen eines Network Load Balancers finden Sie unter AWS Load Balancer Controller.

Der AWS Load Balancer Controller muss mit einem AWS-Serviceendpunkt wie AWS Identity and Access Management (IAM), EC2, AWS Certificate Manager (ACM), Elastic Load Balancing, Amazon Cognito, AWS WAF oder AWS Shield verbunden sein. Das bedeutet, dass Sie über eine ausgehende Internetverbindung verfügen müssen, damit der AWS Load Balancer Controller funktionieren kann. 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 VPC-Subnetze im Amazon EKS-Cluster, damit der AWS Load Balancer Controller Subnetze automatisch erkennen kann, wenn die Application Load Balancer-Ressource erstellt wird.

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

Hinweis: Wenn Sie beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehlermeldungen erhalten, vergewissern Sie sich, dass Sie die neueste Version der AWS CLI verwenden.

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

Um einen OpenID Connect (OIDC)-Identitätsanbieter für den Cluster zu erstellen, der mit AWS Identity and Access Management (IAM)-Rollen für Servicekonten verwendet werden kann, verwenden Sie entweder eksctl oder die AWS-Managementkonsole.

Sie können die AWSL CLI auch verwenden, 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, in Ihrem Namen Aufrufe an AWS-APIs zu tätigen. Es ist eine bewährte Methode, AWS IAM-Rollen für Servicekonten zu verwenden, wenn Sie Zugriff auf AWS-APIs gewähren.

1.    Um ein IAM-Richtliniendokument für den AWS Load Balancer Controller von AWS GitHub herunterzuladen, führen Sie je nach Region einen der folgenden Befehle aus.

Alle Regionen außer China:

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

– oder –

Peking und Ningxia, Regionen in China:

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 Amazon-Ressourcennamen (ARN) der Richtlinie, die in der Ausgabe von Schritt 2 zurückgegeben wurde.

4.    Verwenden Sie die vorhandene IAM-Rolle oder erstellen Sie eine neue IAM-Rolle für den AWS Load Balancer Controller.

Tipp: Um eine IAM-Rolle mit eksctl zu erstellen, verwenden Sie den Parameter --attach-policy-arn mit der ARN der IAM-Richtlinie AWSLoadBalancerControllerIAMPolicy.

5.    Führen Sie den folgenden Befehl aus, um AWSLoadBalancerControllerIAMPolicy an IAM-Rollen anzuhängen, die Sie zuvor bestimmt haben:

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.

Für Kubernetes 1.16 oder höher:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml

Für Kubernetes 1.15 oder früher:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager-legacy.yaml

Hinweis: Ersetzen Sie $VERSION durch die Version (siehe GitHub-Website von Jetstack, zum Beispiel „v1.6.0“) des Cert-Managers, den Sie bereitstellen möchten.

3.    Führen Sie in der heruntergeladenen Manifestdatei für den AWS Load Balancer Controller von AWS GitHub den folgenden Befehl aus:

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

Hinweis: Ersetzen Sie $VERSION durch die Version (siehe GitHub-Website von Kubernetes SIGs, zum Beispiel „v2.4.1“) des AWS Load Balancer Controllers, den Sie bereitstellen möchten.

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, zum Beispiel „v2.3.0“) 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   AGE
ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s

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 eventuell Fehlermeldungen angezeigt, die Ihnen bei der Behebung von Problemen mit Ihrer Bereitstellung helfen können.

3.    Um die Beispielanwendung zu sehen, öffnen Sie einen Webbrowser und wechseln Sie dann in Schritt 2 zur URL-Adresse aus der Ausgabe.

4.    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, zum Beispiel „v2.3.0“) des AWS Load Balancer Controllers, den Sie bereitstellen möchten.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren