Dela via


Skapa en CI/CD-pipeline för AKS-appar med hjälp av Azure Pipelines

Viktigt!

Den här artikeln beskriver en version av baslinjearkitekturen för kontinuerlig integrering och kontinuerlig distribution (CI/CD). Den fokuserar specifikt på att distribuera Azure Kubernetes Service-program (AKS) med hjälp av Azure Pipelines.

Azure Pipelines samordnar distributionsaktiviteter till AKS som en del av en upprepningsbar programleveransplan. Du kan integrera dina bygg- och lanseringsprocesser i en pipeline för att minska risken för mänskliga fel, påskynda lanseringscykler och förbättra den övergripande programvarukvaliteten. Den här artikeln beskriver hur du använder Azure Pipelines för att implementera CI/CD och skicka programuppdateringar till AKS-kluster.

Architecture

Arkitekturdiagram över en AKS CI/CD-pipeline som använder Azure Pipelines.

Flödet går från vänster till höger. Det börjar med steg 1, där en tekniker skickar kodändringar till en Azure Repos Git-lagringsplats och en Azure Pipelines PR-pipeline utlöses. Den här pipelinen innehåller följande uppgifter: Återställning, bygge, enhetstester, PR-granskning och kodanalys som innehåller lint, säkerhetsgenomsökning och andra verktyg. I steg 2 utlöses en Azure Pipelines CI-pipeline. Den här pipelinen innehåller följande uppgifter: Hämta hemligheter, lint, återställa, skapa, enhetstester, integreringstester, publicera byggartefakter och publicera containeravbildningar. I steg 3 publiceras en containeravbildning till ett icke-produktions Azure-containerregister. I steg 4 utlöses en Azure Pipelines CD-pipeline. Den här pipelinen inkluderar följande uppgifter: Distribuera till testmiljö, godkännandetester, främja containeravbildning, valfri manuell åtgärd och lansering. I steg 5 distribuerar CD-pipelinen till en mellanlagringsmiljö som innehåller AKS. I steg 6 befordras containeravbildningen till Azure-containerregistret för produktion. I steg 7 släpps CD-pipelinen till en produktionsmiljö som innehåller AKS. I steg 8 vidarebefordrar Azure Monitor-hanterad tjänst för Prometheus telemetri till Azure Monitor. Steg 9 representeras av ett avsnitt som innehåller en operatör, Azure Monitor, Azure Monitor-hanterad tjänst för Prometheus, en Log Analytics-arbetsyta, Microsoft Security DevOps, nyckelvalv, Azure Managed Grafana och Defender for Cloud. En streckad rad går från steg 1 till Microsoft Security DevOps. Flera streckade linjer går från steg 2, steg 4 och linjen mellan steg 4 och mellanlagrings- och produktionsmiljöerna tillbaka till ingenjören.

Ladda ned en Visio-fil med den här arkitekturen.

Dataflöde

Följande dataflöde motsvarar föregående diagram:

  1. En pull-begäran (PR) till antingen en Azure Repos Git-lagringsplats eller en GitHub-lagringsplats utlöser en PR-pipeline.

    Den här pipelinen kör kvalitetskontroller, inklusive följande åtgärder:

    • Byggkod, som kan kräva att beroenden hämtas från ett beroendehanteringssystem
    • Använda verktyg för att analysera koden, till exempel statisk kodanalys, linting och säkerhetsgenomsökning
    • Utföra enhetstester

    Om några kontroller misslyckas avslutas pipelinekörningen och utvecklaren måste göra de nödvändiga ändringarna. Om alla kontroller godkänns kräver pipelinen en PR-granskning. Om PR-granskningen misslyckas avslutas pipelinen och utvecklaren måste göra de ändringar som krävs. En lyckad pipelinekörning resulterar i en lyckad PR-sammanslagning.

  2. En sammanslagning till Azure Repos Git utlöser en CI-pipeline. Den här pipelinen kör samma uppgifter som PR-pipelinen och lägger till integreringstester.

    Om integreringstesterna kräver hemligheter hämtar pipelinen dem från Azure Key Vault, en resurs som är dedikerad till den här miljöns CI-pipeline.

    Om några kontroller misslyckas avslutas pipelinen och utvecklaren måste göra de nödvändiga ändringarna.

  3. En lyckad körning av CI-pipeline skapar och publicerar en containerbild i ett Azure-containerregister som inte är i produktion. Defender for Containers söker igenom containeravbildningarna när de skickas till Azure Container Registry och rapporterar avbildningsriskerna till Microsoft Defender för molnet. Alternativt kan containerimagerna signeras för att säkerställa deras integritet.

  4. Slutförandet av CI-pipelinen utlöser CD-pipelinen.

  5. CD-pipelinen distribuerar en YAML-mall för stagingmiljön för AKS som innehåller en Defender-agent. Den här distributionen använder en push-modell och körs via antingen kubectl eller Helm. Mallen refererar till containeravbildningen från ett icke-produktionsregister.

    Pipelinan utför godkännandetester mot stagingmiljön för att verifiera distributionen. Om testerna lyckas kan pipelinen innehålla en manuell valideringsuppgift för att verifiera distributionen och återuppta pipelinen. Vissa arbetsbelastningar distribueras automatiskt. Om några kontroller misslyckas avslutas pipelinen och utvecklaren måste göra de nödvändiga ändringarna.

  6. När en enskild person återupptar den manuella åtgärden befordrar CD-pipelinen avbildningen från Azure-containerregistret som inte är produktion till produktionsregistret. Defender for Containers söker igenom containeravbildningarna när de skickas till Container Registry och rapporterar avbildningsriskerna till Microsoft Defender för molnet.

  7. CD-rörledningen implementerar en YAML-mall till AKS-produktionsmiljön som inkluderar en Defender-agent. Mallen anger containeravbildningen från produktionsregistret.

  8. Azure Monitor-hanterad tjänst för Prometheus vidarebefordrar regelbundet prestandamått, inventeringsdata och hälsotillståndsinformation från containervärdar och containrar till Azure Monitor.

  9. En Log Analytics-arbetsyta lagrar alla data. Azure Monitor innehåller flera verktyg för att analysera data som samlas in av andra funktioner. Olika Grafana-instrumentpaneler kombinerar olika uppsättningar Kubernetes-telemetri. Application Insights samlar in programspecifika övervakningsdata, till exempel spårningar.

    Defender for Containers utför periodiska genomsökningar av containrar som körs i AKS och av containeravbildningar som lagras i Container Registry. Defender for Containers ger också skydd mot hot i realtid för containerbaserade miljöer som stöds och genererar aviseringar för misstänkta aktiviteter. Den här informationen hjälper dig att identifiera säkerhetsproblem och förbättra säkerheten för containrar.

Components

  • Azure Pipelines är en komponent i Azure DevOps som automatiskt skapar, testar och distribuerar kod till sitt beräkningsmål. I den här arkitekturen skapar och testar den containeravbildningar, laddar upp dem till Container Registry och distribuerar dem i AKS.

  • Azure Monitor-hanterad tjänst för Prometheus är en Azure-funktion som tillhandahåller övervakning för containerbaserade miljöer. I den här arkitekturen samlar den in prestandamått, loggar och hälsodata från containrar och vidarebefordrar dessa observerbarhetsdata till Azure Monitor för analys och aviseringar.

  • Key Vault är en molntjänst för lagring och åtkomst till hemligheter, till exempel API-nycklar, lösenord, certifikat eller kryptografiska nycklar. I den här arkitekturen hämtar pipelinen hemligheter som krävs för att testa koden från Key Vault.

  • Azure Monitor är en övervakningslösning som samlar in, analyserar och svarar på telemetri från molnmiljöer och lokala miljöer. I den här arkitekturen fungerar den som den centrala observerbarhetsplattformen som tillhandahåller övervakning och aviseringar för AKS-kluster och CI/CD-pipelineåtgärder.

  • Container Registry är en hanterad, privat containerregistertjänst i Azure. Container Registry lagrar privata containeravbildningar. I den här arkitekturen hämtar beräkningsplattformen programmets containeravbildning från Container Registry.

  • AKS är en hanterad Kubernetes-tjänst där Azure hanterar kritiska uppgifter, till exempel hälsoövervakning och underhåll. I den här arkitekturen fungerar den som beräkningsplattform för programmet.

  • Med Microsoft Security DevOps Azure DevOps-tillägget kan du bädda in säkerhetsgenomsökning direkt i dina CI/CD-arbetsflöden. I den här arkitekturen utför Microsoft Security DevOps statisk analys och ger insyn i säkerhetsstatus i flera pipelines i AKS-utveckling och distribution. Microsoft Security DevOps är en del av Microsoft Defender for Cloud DevOps-säkerhet, som ger omfattande synlighet, hållningshantering och skydd mot hot i miljöer med flera moln.

Alternatives

Överväg följande alternativ för din implementation.

Pull-baserad modell (GitOps)

Det här scenariot visar en push-baserad modell för att distribuera resurser i AKS. Push-baserade distributioner fungerar bäst när du behöver deterministiska uppdateringar av dina kluster. Pipelines initierar aktivt distributioner, övervakar deras framgång och vidtar direkta åtgärder om distributionerna misslyckas. Den här metoden är ofta en viktig egenskap för säkra användningsmetoder i arbetsbelastningar. Push-baserade distributioner passar även för flera distributionsmål, till exempel blågröna miljöer, där du behöver ett mycket kontrollerat distributionsmönster i ett enda kluster eller mellan kluster.

Alternativt förlitar sig pull-baserade distributioner på kluster för att hämta och tillämpa uppdateringar. Det här mönstret frikopplar distributionslogik från pipelinen, vilket gör att enskilda kluster kan stämma av mot ett önskat tillstånd som lagras på en central plats, till exempel en Git-lagringsplats i GitOps-arbetsflöden eller ett artefaktregister. Pull-baserade distributioner fungerar bäst för miljöer som prioriterar konsekvens, granskning och självåterställning. Sanningens källa lever externt, ofta i versionsstyrda system, så kluster övervakar och tillämpar uppdateringar kontinuerligt för att matcha det önskade tillståndet. Den här metoden reducerar risken för avvikelse. Om ett kluster drabbas av ett fel eller blir otillgängligt kan det stämma av automatiskt när det är online igen utan att behöva omdistribuera från en central pipeline.

GitOps-pullmodellen tar också bort behovet av pipelines för att komma åt kluster direkt eller använda associerade distributionsautentiseringsuppgifter, vilket eliminerar en attackvektor. Kluster behöver bara skrivskyddad åtkomst till källlagringsplatsen. Mer information finns i GitOps för AKS.

CI/CD-pipeline som skapats med GitHub Actions

Du kan ersätta Azure Pipelines med GitHub Actions för AKS. GitHub Actions är en CI/CD-plattform som du kan använda för att automatisera din bygg-, test- och distributionspipeline. Överväg att använda ett startarbetsflöde för AKS och anpassa det enligt dina CI/CD-krav.

Nästa steg