Dela via


Tillämpa automatiska säkerhetsuppgraderingar på Azure Kubernetes Service-noder (AKS) med hjälp av GitHub Actions

Säkerhetsuppdateringar är en viktig del av att upprätthålla aks-klustrets säkerhet och efterlevnad med de senaste korrigeringarna för det underliggande operativsystemet. Dessa uppdateringar omfattar os-säkerhetskorrigeringar eller kerneluppdateringar. Vissa uppdateringar kräver en omstart av noden för att slutföra processen.

Den här artikeln visar hur du kan automatisera uppdateringsprocessen för AKS-noder med hjälp av GitHub Actions och Azure CLI för att skapa en uppdateringsaktivitet baserat på cron vilken som körs automatiskt.

Kommentar

Du kan också utföra nodbilduppgraderingar automatiskt och schemalägga dessa uppgraderingar med planerat underhåll. Mer information finns i Uppgradera nodbilder automatiskt.

Innan du börjar

  • Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du behöver ett AKS-kluster skapar du ett med Hjälp av Azure CLI, Azure PowerShell eller Azure Portal.
  • Den här artikeln förutsätter också att du har ett GitHub-konto och en profillagringsplats som värd för dina åtgärder. Om du inte har någon lagringsplats skapar du en med samma namn som ditt GitHub-användarnamn.
  • Du behöver Azure CLI version 2.0.59 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Uppdatera noder med az aks upgrade

Kommandot az aks upgrade ger dig ett sätt att tillämpa uppdateringar utan avbrott. Kommandot utför följande åtgärder:

  1. Tillämpar de senaste uppdateringarna på alla noder i klustret.
  2. Avspärrningar (gör noden otillgänglig för schemaläggning av nya arbetsbelastningar) och tömningar (flyttar befintliga arbetsbelastningar till andra noder) trafik till noderna.
  3. Startar om noderna.
  4. Gör att de uppdaterade noderna kan ta emot trafik igen.

AKS startar inte om noderna automatiskt om du uppdaterar dem med en annan metod.

Kommentar

Om du --node-image-only kör az aks upgrade med flaggan uppgraderas endast nodbilderna. Om du kör kommandot utan flaggan uppgraderas både nodbilderna och Kubernetes-kontrollplanets version. Mer information finns i dokumenten för hanterade uppgraderingar på noder och dokument för klusteruppgraderingar.

Alla Kubernetes-noder körs på en standard virtuell Windows- eller Linux-baserad virtuell Azure-dator (VM). De Linux-baserade virtuella datorerna använder en Ubuntu-avbildning med operativsystemet konfigurerat för att automatiskt söka efter uppdateringar varje natt.

När du använder az aks upgrade kommandot skapar Azure CLI en våg av nya noder med de senaste säkerhets- och kerneluppdateringarna. Dessa nya noder är inledningsvis avspärrade för att förhindra att appar schemaläggs till dem tills uppdateringen har slutförts. När uppdateringen har slutförts spärrar Och tömmer Azure de äldre noderna och avmarkerar de nya och överför alla schemalagda program till de nya noderna.

Den här processen är bättre än att uppdatera Linux-baserade kernels manuellt eftersom Linux kräver en omstart när en ny kerneluppdatering installeras. Om du uppdaterar operativsystemet manuellt måste du även starta om den virtuella datorn, manuellt spärra och tömma alla appar.

Skapa en tidstimerad GitHub-åtgärd

cron är ett verktyg som gör att du kan köra en uppsättning kommandon eller jobb enligt ett automatiserat schema. Om du vill skapa ett jobb för att uppdatera dina AKS-noder enligt ett automatiserat schema behöver du en lagringsplats som värd för dina åtgärder. GitHub Actions konfigureras vanligtvis på samma lagringsplats som ditt program, men du kan använda valfri lagringsplats.

  1. Gå till din lagringsplats på GitHub.

  2. Välj Åtgärder.

  3. Välj Nytt arbetsflöde>Konfigurera ett arbetsflöde själv.

  4. Skapa en GitHub-åtgärd med namnet Uppgradera klusternodavbildningar med en schemautlösare som körs var 15:e dag klockan 03.00. Kopiera följande kod till YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Skapa ett jobb med namnet upgrade-node som körs på en Ubuntu-agent och ansluter till ditt Azure CLI-konto för att köra kommandot för noduppgradering. Kopiera följande kod till YAML under on nyckeln:

    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
    

Konfigurera Azure CLI i arbetsflödet

  1. I fältet Sök på Marketplace för åtgärder söker du efter Azure-inloggning.

  2. Välj Azure-inloggning.

    Sökresultat som visar två rader, den första åtgärden kallas

  3. Under Installation väljer du en version, till exempel v1.4.6, och kopierar kodfragmentet för installation.

  4. steps Lägg till nyckeln och följande information från installationskodfragmentet i YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
        steps:
          - name: Azure Login
            uses: Azure/login@v1.4.6
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    

Skapa autentiseringsuppgifter för Azure CLI

  1. I ett nytt webbläsarfönster skapar du ett nytt huvudnamn för az ad sp create-for-rbac tjänsten med kommandot . Se till att du ersätter *{subscriptionID}* med ditt eget prenumerations-ID.

    Kommentar

    Det här exemplet skapar Contributor rollen i prenumerationsomfånget. Du kan ange den roll och det omfång som uppfyller dina behov. Mer information finns i Inbyggda Azure-roller och Azure RBAC-omfångsnivåer.

    az ad sp create-for-rbac --role Contributor --scopes /subscriptions/{subscriptionID} -o json
    

    Dina utdata bör likna följande exempelutdata:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Kopiera utdata och navigera till din GitHub-lagringsplats.

  3. Välj Inställningar>Hemligheter och variabler>Åtgärder>Ny lagringsplatshemlighet.

  4. För Namn ange AZURE_CREDENTIALS.

  5. För Hemlighet kopierar du innehållet i utdata som du fick när du skapade tjänstens huvudnamn.

  6. Välj Lägg till hemlighet.

Skapa stegen för att köra Azure CLI-kommandona

  1. Gå till ditt fönster med arbetsflödets YAML.

  2. I fältet Sök på Marketplace för åtgärder söker du efter Azure CLI-åtgärd.

  3. Välj Azure CLI-åtgärd.

    Sökresultat för

  4. Under Installation väljer du en version, till exempel v1.0.8, och kopierar kodfragmentet för installation.

  5. Klistra in innehållet i åtgärden i YAML under *Azure Login* steget, ungefär som i följande exempel:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
        steps:
          - name: Azure Login
            uses: Azure/login@v1.4.6
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
          - name: Upgrade node images
            uses: Azure/cli@v1.0.8
            with:
              inlineScript: az aks upgrade --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yes
    

    Dricks

    Du kan frikoppla parametrarna --resource-group och --name från kommandot genom att skapa nya lagringsplatshemligheter som du gjorde för AZURE_CREDENTIALS.

    Om du skapar hemligheter för dessa parametrar måste du ersätta <resourceGroupName> platshållarna och <aksClusterName> med deras hemliga motsvarigheter. Till exempel och ${{secrets.RESOURCE_GROUP_NAME}}${{secrets.AKS_CLUSTER_NAME}}

  6. Byt namn på YAML till upgrade-node-images.yml.

  7. Välj Genomför ändringar..., lägg till ett incheckningsmeddelande och välj sedan Genomför ändringar.

Kör GitHub-åtgärden manuellt

Du kan köra arbetsflödet manuellt utöver den schemalagda körningen genom att lägga till en ny on utlösare med namnet workflow_dispatch.

Kommentar

Om du vill uppgradera en enskild nodpool i stället för alla nodpooler i klustret lägger du till parametern --name i az aks nodepool upgrade kommandot för att ange namnet på nodpoolen. Till exempel:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • Lägg till utlösaren workflow_dispatch under on nyckeln:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
      workflow_dispatch:
    

    YAML bör se ut ungefär som i följande exempel:

        name: Upgrade cluster node images
        on:
          schedule:
            - cron: '0 3 */15 * *'
          workflow_dispatch:
        jobs:
          upgrade-node:
            runs-on: ubuntu-latest
            steps:
              - name: Azure Login
                uses: Azure/login@v1.4.6
                with:
                  creds: ${{ secrets.AZURE_CREDENTIALS }}
              - name: Upgrade node images
                uses: Azure/cli@v1.0.8
                with:
                  inlineScript: az aks upgrade -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes
              # Code for upgrading one or more node pools
    

Nästa steg

Mer information om AKS-uppgraderingar finns i följande artiklar och resurser:

En detaljerad beskrivning av metodtips för uppgradering och andra överväganden finns i AKS-korrigerings- och uppgraderingsvägledning.