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:
- Tillämpar de senaste uppdateringarna på alla noder i klustret.
- 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.
- Startar om noderna.
- 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.
Gå till din lagringsplats på GitHub.
Välj Åtgärder.
Välj Nytt arbetsflöde>Konfigurera ett arbetsflöde själv.
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 * *'
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
I fältet Sök på Marketplace för åtgärder söker du efter Azure-inloggning.
Välj Azure-inloggning.
Under Installation väljer du en version, till exempel v1.4.6, och kopierar kodfragmentet för installation.
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
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" }
Kopiera utdata och navigera till din GitHub-lagringsplats.
Välj Inställningar>Hemligheter och variabler>Åtgärder>Ny lagringsplatshemlighet.
För Namn ange
AZURE_CREDENTIALS
.För Hemlighet kopierar du innehållet i utdata som du fick när du skapade tjänstens huvudnamn.
Välj Lägg till hemlighet.
Skapa stegen för att köra Azure CLI-kommandona
Gå till ditt fönster med arbetsflödets YAML.
I fältet Sök på Marketplace för åtgärder söker du efter Azure CLI-åtgärd.
Välj Azure CLI-åtgärd.
Under Installation väljer du en version, till exempel v1.0.8, och kopierar kodfragmentet för installation.
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örAZURE_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}}
Byt namn på YAML till
upgrade-node-images.yml
.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
underon
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.
Azure Kubernetes Service