Automatische beveiligingsupgrades toepassen op AKS-knooppunten (Azure Kubernetes Service) met behulp van GitHub Actions

Beveiligingsupdates vormen een belangrijk onderdeel van het onderhouden van de beveiliging en naleving van de nieuwste oplossingen voor het onderliggende besturingssysteem van uw AKS-cluster. Deze updates omvatten besturingssysteembeveiligingsoplossingen of kernelupdates. Voor sommige updates moet een knooppunt opnieuw worden opgestart om het proces te voltooien.

In dit artikel leest u hoe u het updateproces van AKS-knooppunten kunt automatiseren met behulp van GitHub Actions en Azure CLI om een updatetaak te maken op cron basis van die taak die automatisch wordt uitgevoerd.

Notitie

U kunt ook knooppuntinstallatiekopieën automatisch uitvoeren en deze upgrades plannen met behulp van gepland onderhoud. Zie Knooppuntinstallatiekopieën automatisch upgraden voor meer informatie.

Voordat u begint

  • In dit artikel wordt ervan uitgegaan dat u een bestaand AKS-cluster hebt. Als u een AKS-cluster nodig hebt, maakt u er een met behulp van Azure CLI, Azure PowerShell of Azure Portal.
  • In dit artikel wordt ook ervan uitgegaan dat u een GitHub-account en een profielopslagplaats hebt om uw acties te hosten. Als u geen opslagplaats hebt, maakt u er een met dezelfde naam als uw GitHub-gebruikersnaam.
  • U moet Azure CLI versie 2.0.59 of hoger hebben geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

Knooppunten bijwerken met az aks upgrade

Met de az aks upgrade opdracht kunt u geen downtime gebruiken om updates toe te passen. Met de opdracht worden de volgende acties uitgevoerd:

  1. Hiermee worden de meest recente updates toegepast op alle knooppunten van uw cluster.
  2. Cordons (maakt het knooppunt niet beschikbaar voor de planning van nieuwe workloads) en afvoert (verplaatst de bestaande workloads naar een ander knooppunt) verkeer naar de knooppunten.
  3. Start de knooppunten opnieuw op.
  4. Hiermee kunnen de bijgewerkte knooppunten verkeer opnieuw ontvangen.

AKS start uw knooppunten niet automatisch opnieuw op als u ze bijwerkt met behulp van een andere methode.

Notitie

Als de --node-image-only vlag wordt uitgevoerdaz aks upgrade, worden alleen de knooppuntinstallatiekopieën bijgewerkt. Als u de opdracht uitvoert zonder de vlag, worden zowel de installatiekopieën van het knooppunt als de versie van het Kubernetes-besturingsvlak bijgewerkt. Zie de documenten voor beheerde upgrades op knooppunten en de documenten voor clusterupgrades voor meer informatie.

Alle Kubernetes-knooppunten worden uitgevoerd op een standaard virtuele Azure-machine (VM) op basis van Windows of Linux. De linux-VM's gebruiken een Ubuntu-installatiekopie met het besturingssysteem dat is geconfigureerd om elke nacht automatisch op updates te controleren.

Wanneer u de az aks upgrade opdracht gebruikt, maakt Azure CLI een piek van nieuwe knooppunten met de nieuwste beveiligingsupdates en kernelupdates. Deze nieuwe knooppunten worden in eerste instantie vastgezet om te voorkomen dat apps erop worden gepland totdat de update is voltooid. Nadat de update is voltooid, verwijdert Azure cordons en verwijdert u de oudere knooppunten en verwijdert u de nieuwe, waarbij alle geplande toepassingen worden overgebracht naar de nieuwe knooppunten.

Dit proces is beter dan het handmatig bijwerken van linux-kernels, omdat Linux opnieuw moet worden opgestart wanneer een nieuwe kernelupdate wordt geïnstalleerd. Als u het besturingssysteem handmatig bijwerkt, moet u ook de VIRTUELE machine opnieuw opstarten, waarbij u alle apps handmatig op elkaar afkabelt en leegloopt.

Een getimede GitHub-actie maken

cron is een hulpprogramma waarmee u een set opdrachten of taken kunt uitvoeren volgens een geautomatiseerd schema. Als u een taak wilt maken om uw AKS-knooppunten volgens een geautomatiseerd schema bij te werken, hebt u een opslagplaats nodig om uw acties te hosten. GitHub Actions worden meestal geconfigureerd in dezelfde opslagplaats als uw toepassing, maar u kunt elke opslagplaats gebruiken.

  1. Navigeer naar uw opslagplaats op GitHub.

  2. Selecteer Acties.

  3. Selecteer Zelf een werkstroom instellen voor nieuwe werkstroom>.

  4. Maak een GitHub-actie met de naam Clusterknooppuntinstallatiekopieën upgraden met een schematrigger om elke 15 dagen om 3:00 uur uit te voeren. Kopieer de volgende code naar de YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Maak een taak met de naam upgradeknooppunt dat wordt uitgevoerd op een Ubuntu-agent en maak verbinding met uw Azure CLI-account om de upgradeopdracht voor knooppunten uit te voeren. Kopieer de volgende code in de YAML onder de on sleutel:

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

De Azure CLI instellen in de werkstroom

  1. Zoek in de balk Marketplace voor acties naar Azure-aanmelding.

  2. Selecteer Azure-aanmelding.

    Search results showing two lines, the first action is called 'Azure Login' and the second 'Azure Container Registry Login'

  3. Selecteer onder Installatie een versie, zoals v1.4.6, en kopieer het codefragment van de installatie.

  4. Voeg de steps sleutel en de volgende informatie uit het codefragment voor de installatie toe aan de 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 }}
    

Referenties maken voor de Azure CLI

  1. Maak in een nieuw browservenster een nieuwe service-principal met behulp van de az ad sp create-for-rbac opdracht. Zorg ervoor dat u vervangt door *{subscriptionID}* uw eigen abonnements-id.

    Notitie

    In dit voorbeeld wordt de Contributor rol gemaakt in het bereik Abonnement . U kunt de rol en het bereik opgeven die aan uw behoeften voldoen. Zie ingebouwde Azure-rollen en Azure RBAC-bereikniveaus voor meer informatie.

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

    De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Kopieer de uitvoer en navigeer naar uw GitHub-opslagplaats.

  3. Selecteer Instellingen> Secrets en variables>Actions>New repository secret.

  4. Voer bij Naam de tekst AZURE_CREDENTIALS in.

  5. Kopieer voor Geheim de inhoud van de uitvoer die u hebt ontvangen toen u de service-principal maakte.

  6. Selecteer Geheim toevoegen.

De stappen maken om de Azure CLI-opdrachten uit te voeren

  1. Navigeer naar uw venster met de YAML van de werkstroom.

  2. Zoek in de balk Marketplace voor acties naar Azure CLI-actie.

  3. Selecteer azure CLI-actie.

    Search result for 'Azure CLI Action' with first result being shown as made by Azure

  4. Selecteer onder Installatie een versie, zoals v1.0.8, en kopieer het codefragment van de installatie.

  5. Plak de inhoud van de actie in de YAML onder de *Azure Login* stap, vergelijkbaar met het volgende voorbeeld:

    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 -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes
    

    Tip

    U kunt de -g parameters -n loskoppelen van de opdracht door nieuwe opslagplaatsgeheimen te maken zoals u dat hebt AZURE_CREDENTIALSgedaan.

    Als u geheimen voor deze parameters maakt, moet u de tijdelijke {aksClusterName} aanduidingen vervangen door hun {resourceGroupName} geheime tegenhangers. Bijvoorbeeld, ${{secrets.RESOURCE_GROUP_NAME}} en ${{secrets.AKS_CLUSTER_NAME}}

  6. Wijzig de naam van de YAML in upgrade-node-images.yml.

  7. Selecteer Wijzigingen doorvoeren..., voeg een doorvoerbericht toe en selecteer Wijzigingen doorvoeren.

De GitHub-actie handmatig uitvoeren

U kunt de werkstroom naast de geplande uitvoering handmatig uitvoeren door een nieuwe on trigger met de naam workflow_dispatchtoe te voegen.

Notitie

Als u een upgrade wilt uitvoeren van één knooppuntgroep in plaats van alle knooppuntgroepen in het cluster, voegt u de --name parameter toe aan de az aks nodepool upgrade opdracht om de naam van de knooppuntgroep op te geven. Voorbeeld:

az aks nodepool upgrade -g {resourceGroupName} --cluster-name {aksClusterName} --name {{nodePoolName}} --node-image-only
  • Voeg de workflow_dispatch trigger toe onder de on sleutel:

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

    De YAML moet er ongeveer uitzien als in het volgende voorbeeld:

        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
    

Volgende stappen

Zie de volgende artikelen en resources voor meer informatie over AKS-upgrades:

Zie AKS-patch- en upgraderichtlijnen voor een gedetailleerde bespreking van best practices en andere overwegingen voor upgrades.