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:
- Hiermee worden de meest recente updates toegepast op alle knooppunten van uw cluster.
- 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.
- Start de knooppunten opnieuw op.
- 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.
Navigeer naar uw opslagplaats op GitHub.
Selecteer Acties.
Selecteer Zelf een werkstroom instellen voor nieuwe werkstroom>.
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 * *'
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
Zoek in de balk Marketplace voor acties naar Azure-aanmelding.
Selecteer Azure-aanmelding.
Selecteer onder Installatie een versie, zoals v1.4.6, en kopieer het codefragment van de installatie.
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
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" }
Kopieer de uitvoer en navigeer naar uw GitHub-opslagplaats.
Selecteer Instellingengeheimen>>en variabelen Acties>Nieuwe opslagplaatsgeheim.
Voer bij Naam de tekst
AZURE_CREDENTIALS
in.Kopieer voor Geheim de inhoud van de uitvoer die u hebt ontvangen toen u de service-principal maakte.
Selecteer Geheim toevoegen.
De stappen maken om de Azure CLI-opdrachten uit te voeren
Navigeer naar uw venster met de YAML van de werkstroom.
Zoek in de balk Marketplace voor acties naar Azure CLI-actie.
Selecteer azure CLI-actie.
Selecteer onder Installatie een versie, zoals v1.0.8, en kopieer het codefragment van de installatie.
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 --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yes
Tip
U kunt de
--resource-group
parameters--name
loskoppelen van de opdracht door nieuwe opslagplaatsgeheimen te maken zoals u dat hebtAZURE_CREDENTIALS
gedaan.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}}
Wijzig de naam van de YAML in
upgrade-node-images.yml
.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_dispatch
toe 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 --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
Voeg de
workflow_dispatch
trigger toe onder deon
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.
Azure Kubernetes Service