Stellen Sie Workloads aus DevOps Azure-Pipelines auf private Amazon EKS-Cluster bereit - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Stellen Sie Workloads aus DevOps Azure-Pipelines auf private Amazon EKS-Cluster bereit

Mahendra Revanasiddappa, Amazon Web Services

Übersicht

Dieses Muster zeigt, wie Continuous Integration und Continuous Delivery (CI/CD) von DevOps Azure-Pipelines zu privaten Amazon Elastic Kubernetes Service (Amazon EKS) -Clustern implementiert werden. Es befasst sich mit einer kritischen Herausforderung, mit der Unternehmen konfrontiert sind, die ihre Sicherheitslage verbessern, indem sie für ihre Amazon EKS-Cluster auf private API-Serverendpunkte umsteigen.

Ein öffentlicher Endpunkt macht den Kubernetes-API-Server direkt mit dem Internet verbunden, wodurch eine größere Angriffsfläche entsteht, auf die böswillige Akteure potenziell abzielen könnten. Durch den Wechsel zu einem privaten Endpunkt ist der Zugriff auf die Steuerungsebene des Clusters auf die virtuelle private Cloud (VPC) des Kunden beschränkt.

Die Umstellung eines Amazon EKS-Clusters auf einen privaten API-Endpunkt verbessert zwar die Sicherheit erheblich, bringt jedoch Konnektivitätsprobleme für externe CI/CD Plattformen wie Azure DevOps mit sich. Auf den privaten Endpunkt kann nur innerhalb der VPC oder der Peering-Netzwerke des Clusters zugegriffen werden. Daher können von Microsoft gehostete DevOps Standard-Azure-Agenten, die außerhalb des AWS privaten Netzwerks arbeiten, den Kubernetes-API-Server nicht direkt erreichen. Dadurch werden typische Bereitstellungsworkflows unterbrochen, die auf Tools wie kubectl oder Helm angewiesen sind, die auf diesen Agenten ausgeführt werden, da sie keine Verbindung zum Cluster herstellen können.

Um dieses Problem zu lösen, zeigt dieses Muster einen effizienten Ansatz, bei dem selbst gehostete DevOps Azure-Agenten in privaten Amazon EKS-Clustern verwendet werden. Diese Lösung bietet hervorragende Kostenoptimierung, betriebliche Effizienz und Skalierbarkeit bei gleichzeitiger Wahrung der Sicherheitsanforderungen. Dieser Ansatz kommt insbesondere Unternehmen zugute, die ihre DevOps Multi-Cloud-Prozesse rationalisieren möchten, ohne Kompromisse bei Leistung oder Sicherheit einzugehen.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Einige AWS-Services sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter AWS Dienste nach Regionen. Informationen zu bestimmten Endpunkten finden Sie unter Dienstendpunkte und Kontingente. Wählen Sie dort den Link für den Dienst aus.

Architektur

Dieses Muster erzeugt Folgendes:

  • Amazon ECR-Repository — Das Amazon Elastic Container Registry (Amazon ECR) -Repository speichert das Docker-Image mit dem DevOps Azure-Agenten und der bereitgestellten Beispiel-App.

  • DevOps Azure-Agentenpool — Ein DevOps selbst gehosteter Azure-Agentenpool registriert den Agenten, der auf dem privaten Amazon EKS-Cluster ausgeführt wird.

  • IAM-Rolle — Eine AWS Identity and Access Management (IAM) -Rolle für die Azure-Dienstverbindung, um den erforderlichen Zugriff auf den Agenten bereitzustellen, der auf einem privaten Amazon EKS-Cluster ausgeführt wird.

  • DevOps Azure-Dienstverbindung — Eine Dienstverbindung in einem DevOps Azure-Konto zur Verwendung der IAM-Rolle, die den erforderlichen Zugriff für den Zugriff auf die Pipeline-Jobs bereitstellt. AWS-Services

Das folgende Diagramm zeigt die Architektur der Bereitstellung eines selbst gehosteten DevOps Azure-Agenten auf einem privaten Amazon EKS-Cluster und der Bereitstellung einer Beispielanwendung auf demselben Cluster.

Bereitstellung eines selbst gehosteten DevOps Azure-Agenten und einer Beispielanwendung auf einem privaten Amazon EKS-Cluster.

Das Diagramm zeigt den folgenden Workflow:

  1. Stellen Sie einen selbst gehosteten DevOps Azure-Agenten als Bereitstellung in einem Amazon EKS-Cluster bereit.

  2. Ein DevOps Azure-Agent stellt mithilfe eines persönlichen Zugriffstoken (PAT) zur Authentifizierung eine Verbindung zum Agentenpool auf einem DevOps Azure-Konto her.

  3. Azure Pipelines konfiguriert eine Pipeline für die Bereitstellung mithilfe von Code aus einem GitHub Repository.

  4. Die Pipeline wird auf dem Agenten aus dem Agentpool ausgeführt, der in der Pipeline-Konfiguration konfiguriert wurde. Der DevOps Azure-Agent ruft die Auftragsinformationen der Pipeline ab, indem er ständig das DevOps Azure-Konto abfragt.

  5. Der DevOps Azure-Agent erstellt als Teil des Pipeline-Jobs ein Docker-Image und überträgt das Image in das Amazon ECR-Repository.

  6. Der DevOps Azure-Agent stellt die Beispielanwendung auf einem privaten Amazon EKS-Cluster in einem Namespace namens bereit. webapp

Tools

Tools

Andere Tools

  • Docker ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.

  • kubectl ist eine Befehlszeilenschnittstelle, mit der Sie Befehle für Kubernetes-Cluster ausführen können.

Code-Repository

Bewährte Methoden

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Suchen Sie die DevOps Azure-Organisations-GUID.

Melden Sie sich bei Ihrem DevOps Azure-Konto an, und verwenden Sie dann die folgende URL, um die Organisations-GUID zu finden: https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0 {DevOps_org_ID} Ersetzen Sie die URL durch Ihre DevOps Azure-Organisations-ID.

AWS DevOps

Konfigurieren Sie einen IdP in der AWS-Konto.

Gehen Sie wie folgt vor, um einen Identitätsanbieter (IdP) in der AWS-Konto für eine Azure-Dienstverbindung zu konfigurieren:

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die IAM-Konsole unter. https://console.aws.amazon.com/iam/

  2. Wählen Sie im linken Bereich Identitätsanbieter aus.

  3. Klicken Sie auf Anbieter hinzufügen.

  4. Wählen Sie OpenID Connect als Anbietertyp.

  5. Geben Sie für Provider-URL die DevOps Azure-Aussteller-URL ein. Jeder Azure-Mandant DevOps hat ein eindeutiges ObjektOrganizationGUID, das in der Regel das folgende Format verwendet: https://vstoken.dev.azure.com/{OrganizationGUID} {OrganizationGUID} Ersetzen Sie es durch Ihre DevOps Azure-Organisations-ID.

  6. Geben Sie für Audience api: //Azure ADToken Exchange ein. Dies ist ein fester Wert für Azure DevOps.

  7. Klicken Sie auf Anbieter hinzufügen.

  8. Notieren Sie sich den ARN des neu erstellten Anbieters, den Sie in der nächsten Aufgabe verwenden können.

Weitere Informationen finden Sie unter So stellen Sie DevOps mithilfe AWS von OpenID Connect eine Verbindung zu Azure her.

AWS DevOps

Erstellen Sie eine IAM-Richtlinie in der AWS-Konto.

Gehen Sie wie folgt vor, um eine IAM-Richtlinie zu erstellen, um die erforderlichen Berechtigungen für die von der DevOps Azure-Pipeline verwendete IAM-Rolle bereitzustellen:

  1. Wählen Sie in der IAM-Konsole im linken Bereich die Option Richtlinien aus.

  2. Wählen Sie Richtlinie erstellen aus.

  3. Wählen Sie im Richtlinien-Editor für „Berechtigungen angeben“ die Option JSON aus. Ersetzen Sie die Standard-JSON-Richtlinie durch die folgende JSON-Richtlinie:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "ecr:*", "eks:DescribeCluster", "eks:ListClusters" ], "Resource": "*" } ] }
  4. Wählen Sie Weiter aus.

  5. Geben Sie unter Richtlinienname einen Namen für die IAM-Richtlinie ein. Dieses Muster verwendet den Namen ADO-Policy.

  6. Wählen Sie Richtlinie erstellen aus.

AWS DevOps

Erstellen Sie eine IAM-Rolle in der AWS-Konto.

Gehen Sie wie folgt vor, um eine IAM-Rolle AWS-Konto für die Azure-Dienstverbindung zu konfigurieren:

  1. Wählen Sie in der IAM-Konsole im linken Bereich die Option Rollen aus.

  2. Wählen Sie Rolle erstellen aus.

  3. Wählen Sie für Vertrauenswürdigen Entitätstyp die Option Web Identity aus.

  4. Wählen Sie den richtigen IdP aus der Drop-down-Liste aus. Der IdP-Name beginnt mitvstoken.dev.azure.com/{OrganizationGUID}.

  5. Wählen Sie in der Dropdownliste Audience die Option api: ADToken //Azure Exchange aus.

  6. Um diese Rolle auf nur eine Dienstverbindung zu beschränken, fügen Sie eine Bedingung hinzu. Wählen Sie unter Bedingung die Option Bedingung hinzufügen aus und wählen Sie für Schlüssel die Option vstoken.dev.azure.com/ {OrganizationGuid} :sub aus. Wählen StringEqualsSie unter Bedingung die Option aus. Verwenden Sie für Value das folgende Format:sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}. Verwenden Sie für ServiceConnectionName aws-sc. Sie werden diese Dienstverbindung in der nächsten Aufgabe erstellen.

  7. Wählen Sie Weiter aus.

  8. Wählen Sie unter Berechtigungen hinzufügen die Option ADO-Richtlinie aus. Dabei handelt es sich um die Richtlinie, die Sie in einer früheren Aufgabe erstellt haben.

  9. Wählen Sie Weiter und geben Sie als Rollenname ado-role ein. Verwenden Sie für Select Trusted Entities die folgende Vertrauensrichtlinie:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange", "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}" } } } ] }

Geben Sie in der Richtlinie Ihre Informationen für die folgenden Platzhalter an:

  • {account_id}- ID AWS-Konto

  • {OrganizationGUID}— DevOps Azure-Organisations-GUID

  • {OrganizationName}— Name der DevOps Azure-Organisation

  • {ProjectName}- Name DevOps des Azure-Projekts

  • {ServiceConnectionName}- Name der DevOps Azure-Dienstverbindung. Verwenden Sie aws-sc. Sie werden diese Dienstverbindung in der nächsten Aufgabe erstellen.

AWS DevOps

Erstellen Sie eine Dienstverbindung im DevOps Azure-Konto.

Gehen Sie wie folgt vor, um eine Azure-Dienstverbindung zu konfigurieren:

  1. Wählen Sie in Ihrem DevOps Azure-Projekt Projekteinstellungen, Dienstverbindungen aus.

  2. Wählen Sie Neue Dienstverbindung, wählen Sie den Typ der Dienstverbindung als aws aus und wählen Sie dann Weiter aus.

  3. Geben Sie unter Rolle, die angenommen werden soll, den ARN für die IAM-Rolle ado-role ein. Sie haben in der vorherigen Aufgabe eine IAM-Rolle erstellen in der erstellt. AWS-Konto

  4. Aktivieren Sie das Kontrollkästchen OIDC verwenden.

  5. Geben Sie als Namen der Dienstverbindung in den Aufgabeneigenschaften aws-sc ein.

  6. Wählen Sie Speichern.

Weitere Informationen finden Sie in der Microsoft-Dokumentation unter Erstellen einer Dienstverbindung.

AWS DevOps

Fügen Sie die IAM-Rolle zur Amazon EKS-Konfigurationsdatei hinzu.

Die IAM-Rolle muss über die erforderlichen Berechtigungen verfügen, um die erforderlichen Operationen auf dem Amazon EKS-Cluster auszuführen. Da es sich um eine Pipeline-Rolle handelt, muss die IAM-Rolle in der Lage sein, fast alle Arten von Ressourcen im Cluster zu verwalten. Daher ist die system:masters Gruppenberechtigung für diese Rolle geeignet.

Verwenden Sie den folgenden Code, um die erforderliche Konfiguration aws-auth ConfigMap innerhalb von Kubernetes hinzuzufügen:

- groups: - system:masters rolearn: arn:aws:iam::{account_id}:role/ADO-role username: ADO-role

Ersetze es {account_id} durch deine ID AWS-Konto .

Weitere Informationen finden Sie unter So funktioniert Amazon EKS mit IAM in der Amazon EKS-Dokumentation.

AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie einen selbst gehosteten Agentenpool.

Gehen Sie wie folgt vor, um einen selbst gehosteten Agentpool im DevOps Azure-Konto zu konfigurieren:

  1. Melden Sie sich bei Ihrer DevOps Azure-Kontoorganisation an.

  2. Wählen Sie Azure DevOps Organization.

  3. Wählen Sie Ihr DevOps Azure-Projekt aus.

  4. Wählen Sie Project settings (Projekteinstellungen) aus.

  5. Wählen Sie Agentenpools.

  6. Wählen Sie Pool hinzufügen.

  7. Wählen Sie Selbst gehostet aus.

  8. Geben Sie als Namen eks-agent ein.

  9. Aktivieren Sie das Kontrollkästchen Zugriffsberechtigung für alle Pipelines gewähren.

  10. Wählen Sie Erstellen aus.

Weitere Informationen finden Sie in der Microsoft-Dokumentation unter Agentenpools erstellen und verwalten.

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie ein Amazon-ECR-Repository.

Die Docker-Images, die zur Bereitstellung des DevOps Azure-Agenten und der Beispielanwendung (webapp) auf dem privaten Amazon EKS-Cluster verwendet werden, müssen in einem Amazon ECR-Repository gespeichert werden. Gehen Sie wie folgt vor, um ein Amazon ECR-Repository zu erstellen:

  1. Öffnen Sie die Amazon ECR-Konsole unter https://console.aws.amazon.com/ecr/Repositorys.

  2. Wählen Sie in der Navigationsleiste die aus, in der AWS-RegionSie Ihr Repository erstellen möchten.

  3. Wählen Sie auf der Seite Repositorys die Option Private Repositorys und dann Repository erstellen aus.

  4. Geben Sie als Repository-Name webapp ein. Damit die Beispielanwendung in diesem Muster funktioniert, muss der Name des Amazon ECR-Repositorys webapp verwenden. Wenn Sie einen anderen Namen für das Repository verwenden, finden Sie weitere Informationen unter Fehlerbehebung.

Weitere Informationen finden Sie unter Erstellen eines privaten Amazon ECR-Repositorys zum Speichern von Bildern in der Amazon ECR-Dokumentation.

AWS DevOps

Erstellen Sie ein Dockerfile, um den DevOps Azure-Agenten zu erstellen.

Erstellen Sie ein Dockerfile, um das Docker-Image zu erstellen, auf dem der Azure-Agent installiert ist. DevOps Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen: Dockerfile

FROM ubuntu:22.04 ENV TARGETARCH="linux-x64" RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" RUN unzip awscliv2.zip RUN ./aws/install RUN rm -rf aws awscliv2.zip RUN curl -sSL https://get.docker.com/ | sh RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash RUN mkdir -p azp WORKDIR /azp/ COPY ./start.sh ./ RUN chmod +x ./start.sh RUN useradd -m -d /home/agent agent RUN chown -R agent:agent /azp /home/agent RUN groupadd -f docker RUN usermod -aG docker agent USER agent ENTRYPOINT [ "./start.sh" ]
AWS DevOps

Erstellen Sie ein Skript für den DevOps Azure-Agenten.

Gehen Sie wie folgt vor, um das start.sh Skript zu erstellen:

  1. Gehen Sie in der Microsoft-Dokumentation zum Verfahren Create and build the Dockerfile und scrollen Sie zu Schritt 5. Speichern Sie den folgenden Inhalt unter und achten Sie darauf ~/azp-agent-in-docker/start.sh, dass Sie Zeilenenden im UNIX-Stil (LF) verwenden.

  2. Kopieren Sie den Inhalt des Skripts und speichern Sie ihn in einer Datei mit dem Namen start.sh im selben Verzeichnis wie das Dockerfile.

AWS DevOps

Erstellen Sie ein Docker-Image mit dem DevOps Azure-Agenten.

Um ein Docker-Image für die Installation des DevOps Azure-Agenten zu erstellen, verwenden Sie das Dockerfile, das Sie zuvor erstellt haben, um das Image zu erstellen. Führen Sie in demselben Verzeichnis, in dem das Dockerfile gespeichert ist, die folgenden Befehle aus:

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com docker build --platform linux/amd64 -t ado-agent:latest . docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest

Ersetzen Sie aws_account_id und region durch Ihre AWS-Konto ID und. AWS-Region

AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Generieren Sie ein Azure-Token für den persönlichen Zugriff.

Der Agent, der auf dem privaten Amazon EKS-Cluster ausgeführt wird, benötigt ein Personal Access Token (PAT), damit er sich mit dem DevOps Azure-Konto authentifizieren kann. Gehen Sie wie folgt vor, um eine PAT zu generieren:

  1. Melden Sie sich mit dem Benutzerkonto an, das Sie in Ihrer DevOps Azure-Organisation verwenden möchten (https://dev.azure.com/{Your_Organization}).

  1. Öffnen Sie auf Ihrer Startseite Ihre Benutzereinstellungen und wählen Sie dann Persönliche Zugriffstoken aus.

  2. Wählen Sie Neues Token.

  3. Geben Sie den Namen für das Token ein.

  4. Wählen Sie Alle Bereiche anzeigen aus.

  5. Aktivieren Sie für Agentenpools das Kontrollkästchen Lesen und verwalten.

  6. Wählen Sie Erstellen aus.

  7. Verwenden Sie die folgende Konfiguration, um ein Geheimnis auf dem privaten Amazon EKS-Cluster zu erstellen:

apiVersion: v1 kind: Secret metadata: name: azdevops-pat namespace: default type: Opaque stringData: AZP_TOKEN: <PAT Token>
  1. Speichern Sie die Konfiguration in einer Datei mit dem Namenado-secret.yaml. <PAT Token>Ersetzen Sie es durch das persönliche Zugriffstoken, das Sie gerade erstellt haben. Führen Sie den folgenden Befehl aus, um das Geheimnis zu erstellen:

kubectl create -f ado-secret.yaml

Weitere Informationen finden Sie in der Microsoft-Dokumentation unter Registrieren eines Agenten mithilfe eines Personal Access Tokens (PAT).

AWS DevOps

Verwenden Sie die Kubernetes-Manifestdatei für die Agentenbereitstellung.

Um den DevOps Azure-Agenten auf dem privaten Amazon EKS-Cluster bereitzustellen, kopieren Sie die folgende Manifestdatei und speichern Sie die Datei alsagent-deployment.yaml:

apiVersion: apps/v1 kind: Deployment metadata: name: azure-pipelines-agent-eks labels: app: azure-pipelines-agent spec: replicas: 1 selector: matchLabels: app: azure-pipelines-agent template: metadata: labels: app: azure-pipelines-agent spec: containers: - name: docker image: docker:dind securityContext: privileged: true volumeMounts: - name: shared-workspace mountPath: /workspace - name: dind-storage mountPath: /var/lib/docker env: - name: DOCKER_TLS_CERTDIR value: "" - name: azure-pipelines-agent image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest env: - name: AZP_URL value: "<Azure account URL>" - name: AZP_POOL value: "eks-agent" - name: AZP_TOKEN valueFrom: secretKeyRef: name: azdevops-pat key: AZP_TOKEN - name: AZP_AGENT_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: DOCKER_HOST value: tcp://localhost:2375 volumeMounts: - mountPath: /workspace name: shared-workspace volumes: - name: dind-storage emptyDir: {} - name: shared-workspace emptyDir: {}

Ersetzen Sie aws_account_id und <Azure account URL> durch Ihre AWS-Konto ID und die DevOps Azure-Konto-URL.

AWS DevOps

Stellen Sie den Agenten auf dem privaten Amazon EKS-Cluster bereit.

Verwenden Sie den folgenden Befehl, um den Azure DevOps-Agenten auf dem privaten Amazon EKS-Cluster bereitzustellen:

kubectl create -f agent-deployment.tf
AWS DevOps

Stellen Sie sicher, dass der Agent läuft.

Verwenden Sie den folgenden Befehl, um zu überprüfen, ob der DevOps Azure-Agent ausgeführt wird:

kubectl get deploy azure-pipelines-agent-eks

Die erwartete Ausgabe sollte der folgenden ähneln:

NAME READY UP-TO-DATE AVAILABLE AGE azure-pipelines-agent-eks 1/1 1 1 58s

Vergewissern Sie sich, dass die READY Spalte angezeigt wird1/1.

AWS DevOps

Stellen Sie sicher, dass der Agent im DevOps Azure-Agentenpool registriert ist.

Gehen Sie wie folgt vor, um zu überprüfen, ob der Agent auf dem privaten Amazon EKS-Cluster bereitgestellt und im Agentenpool eks-agent registriert ist:

  1. Melden Sie sich bei Ihrer DevOps Azure-Organisation an (https://dev.azure.com/{Your_Organization}).

  2. Wählen Sie Project settings (Projekteinstellungen) aus.

  3. Wählen Sie Agentenpools aus.

  4. Wählen Sie den eks-Agent-Pool aus und überprüfen Sie dann die Registerkarte Agents.

Es sollte ein Agent mit dem Status Online aufgeführt sein, und der Name des Agenten sollte mit azure-pipelines-agent-eks -* beginnen.

AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Forken Sie das Repository für die Beispielanwendung in Ihr GitHub Konto ab.

Forke das folgende AWS Beispiel-Repository zu deinem GitHub Konto:

https://github.com/aws-samples/deploy-kubernetes-resources-to- amazon-eks-using-azure -devops

AWS DevOps

Erstellen Sie eine Pipeline.

Gehen Sie wie folgt vor, um eine Pipeline in Ihrem DevOps Azure-Konto zu erstellen:

  1. Melden Sie sich mit dem Benutzerkonto an, das Sie in Ihrer DevOps Azure-Organisation verwenden möchten (https://dev.azure.com/{Your_Organization}).

  2. Navigieren Sie zu Ihrer Projekt- und Pipeline-Konsole.

  3. Wählen Sie Neue Pipeline aus.

  4. Wählen Sie für Wo ist Ihr Code die Option GitHub.

  5. Geben Sie die Anmeldeinformationen ein, die erforderlich sind, damit die Pipeline eine Verbindung zu Ihrem GitHub Konto herstellen kann

  6. Wählen Sie das Repository deploy-kubernetes-resources-to- amazon-eks-using-azure -devops aus.

  7. Wählen Sie unter Konfiguration Ihrer Pipeline die Option Existing Azure Pipelines YAML-Datei aus.

  8. Wählen Sie für Wählen Sie eine vorhandene YAML-Datei main für Branch und azure_pipelines.yaml für Pfad aus.

  9. Klicken Sie auf Weiter.

  10. Ersetzen Sie für Review your pipeline YAML die Eingabeparameterwerte für und durch Ihre Informationen: awsRegion awsEKSClusterName

pool: name: eks-agent #pool: self-hosted # If you are running self-hosted Azure DevOps Agents stages: # Refering the pipeline template, input parameter that are not specified will be added with defaults - template: ./pipeline_templates/main_template.yaml parameters: serviceConnectionName: aws-sc awsRegion: <your region> awsEKSClusterName: <name of your EKS cluster> projectName: webapp
  1. Wählen Sie RUN.

AWS DevOps

Stellen Sie sicher, dass die Beispielanwendung bereitgestellt wurde.

Überprüfen Sie nach Abschluss der Pipeline die erfolgreiche Bereitstellung der Beispielanwendung, indem Sie sowohl das Amazon ECR-Repository als auch den Amazon EKS-Cluster überprüfen.

Gehen Sie wie folgt vor, um Artefakte im Amazon ECR-Repository zu verifizieren:

  1. Navigieren Sie zum webapp Amazon ECR-Repository.

  2. Bestätigen Sie das Vorhandensein der folgenden neuen Artefakte:

  • Docker-Image — <date>.<build_number>-image

  • Helmdiagramm — <date>.<build_number>-helm

Beispiel: 20250501.1-image und 20250501.1-helm.

Verwenden Sie den folgenden Befehl, um die Bereitstellung auf dem privaten Amazon EKS-Cluster im Namespace webapp zu überprüfen:

kubectl get deploy -n webapp

Die erwartete Ausgabe sieht wie folgt aus:

NAME READY UP-TO-DATE AVAILABLE webapp 1/1 1 1

Hinweis: Wenn dies Ihr erster Pipeline-Lauf ist, müssen Sie möglicherweise die Serviceverbindung und den Agentenpool autorisieren. Suchen Sie in der DevOps Azure-Pipeline-Oberfläche nach Berechtigungsanfragen und genehmigen Sie sie, um fortzufahren.

AWS DevOps

Fehlerbehebung

ProblemLösung

Die Pipeline schlägt fehl, wenn der Name des Amazon ECR-Repositorys nicht übereinstimmt webapp

Die Beispielanwendung erwartet, dass der Name des Amazon ECR-Repositorys mit dem projectName: webapp Parameter in azure_pipeline.yml übereinstimmt.

Um dieses Problem zu beheben, benennen Sie Ihr Amazon ECR-Repository um webapp oder aktualisieren Sie Folgendes:

  • Benennen Sie das webapp Verzeichnis in Ihrem geforkten GitHub Repository um, sodass es Ihrem Amazon ECR-Repository-Namen entspricht.

  • Aktualisieren Sie den projectName Parameter soazure_pipeline.yml, dass er mit Ihrem Amazon ECR-Repository-Namen übereinstimmt.

Fehler: Der Kubernetes-Cluster ist nicht erreichbar: Der Server hat den Client aufgefordert, Anmeldeinformationen bereitzustellen

Wenn Sie im Schritt „Helm Chart abrufen und bereitstellen“ in Ihrer Azure-Pipeline auf diesen Fehler stoßen, ist die Hauptursache in der Regel auf eine falsche IAM-Rollenkonfiguration in Ihrem Amazon EKS-Cluster zurückzuführen. aws-auth ConfigMap

Um dieses Problem zu beheben, überprüfen Sie Folgendes:

  • Überprüfen Sie Ihre aws-auth ConfigMap Konfiguration.

  • Überprüfen Sie die Authentifizierungseinstellungen Ihres Amazon EKS-Clusters: Öffnen Sie die Amazon EKS-Konsole, Cluster-Details, Zugriffskonfiguration. Stellen Sie sicher, dass der Authentifizierungsmodus auf EKS-API und ConfigMap (nicht nur auf EKS-API) eingestellt ist.

Zugehörige Ressourcen

AWS Blogs

AWS-Services Dokumentation

Microsoft-Dokumentation