Wie richte ich einen Application Load Balancer mithilfe des AWS Load Balancer Controllers auf einer Amazon EC2-Knotengruppe in Amazon EKS ein?
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.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr