Automatikus biztonsági frissítések alkalmazása az Azure Kubernetes Service -csomópontokra a GitHub Actions használatával

A biztonsági frissítések kulcsfontosságú részét képezik az AKS-fürt biztonságának és az alapul szolgáló operációs rendszer legújabb javításainak való megfelelésnek. Ezek a frissítések közé tartoznak az operációs rendszer biztonsági javításai vagy a kernelfrissítések. Egyes frissítésekhez a csomópont újraindítása szükséges a folyamat befejezéséhez.

Ez a cikk bemutatja, hogyan automatizálhatja az AKS-csomópontok frissítési folyamatát a GitHub Actions és az Azure CLI használatával egy automatikusan futó frissítési feladat cron létrehozásához.

Megjegyzés:

A csomópontrendszerképek automatikus frissítéseit is végrehajthatja, és tervezett karbantartással ütemezheti ezeket a frissítéseket. További információ: Csomópontrendszerképek automatikus frissítése.

Mielőtt hozzákezdene

  • Feltételezzük, hogy létezik egy AKS-klasztere. Ha AKS-fürtre van szüksége, hozzon létre egyet az Azure CLI, az Azure PowerShell vagy az Azure Portal használatával.
  • Ez a cikk azt is feltételezi, hogy rendelkezik egy GitHub-fiókkal és egy profiladattárral a műveletek üzemeltetéséhez. Ha nem rendelkezik adattárral, hozzon létre egyet ugyanazzal a névvel, mint a GitHub-felhasználónevét.
  • Telepítenie és konfigurálnia kell az Azure CLI 2.0.59-es vagy újabb verzióját. A verzió azonosításához futtassa a következőt: az --version. Ha telepítenie vagy frissítenie kell, tekintse meg az Azure CLI telepítését.

Csomópontok frissítése az aks upgrade

A az aks upgrade parancs nulla állásidőt biztosít a frissítések alkalmazásához. A parancs a következő műveleteket hajtja végre:

  1. Alkalmazza a legújabb frissítéseket a fürt összes csomópontjára.
  2. A csomópontokat kordonnal elkülöníti (elérhetetlenné teszi az új számítási feladatok ütemezéséhez), és kiüríti (a meglévő feladatokat más csomópontokra helyezi át).
  3. Újraindítja a csomópontokat.
  4. Lehetővé teszi, hogy a frissített csomópontok ismét fogadják a forgalmat.

Az AKS nem indítja újra automatikusan a csomópontokat, ha más módszerrel frissíti őket.

Megjegyzés:

A --node-image-only jelzővel történő az aks upgrade futtatás csak a csomópontképeket frissíti. A jelölő nélküli parancs futtatása a csomópont lemezképeit és a Kubernetes vezérlősíkjának verzióját is frissíti. További információ: a csomópontok felügyelt frissítéseinek dokumentációja és a fürtfrissítések dokumentációja.

Minden Kubernetes-csomópont szabványos Windows- vagy Linux-alapú Azure-beli virtuális gépen fut. A Linux-alapú virtuális gépek egy Ubuntu rendszerképet használnak, amelyen az operációs rendszer úgy van konfigurálva, hogy minden este automatikusan ellenőrizze a frissítéseket.

A parancs használatakor az az aks upgrade Azure CLI új csomópontokat hoz létre a legújabb biztonsági és kernelfrissítésekkel. Ezek az új csomópontok kezdetben kordonnal vannak elzárva, hogy az alkalmazások a frissítés befejezéséig ne legyenek ütemezve hozzájuk. A frissítés befejeződése után az Azure lekeríti és kiüríti a régebbi csomópontokat, és kinyitja az újakat, áthelyezve az összes ütemezett alkalmazást az új csomópontokra.

Ez a folyamat jobb, mint a Linux-alapú kernelek manuális frissítése, mivel a Linux újraindítást igényel egy új kernelfrissítés telepítésekor. Ha manuálisan frissíti az operációs rendszert, újra kell indítania a virtuális gépet, manuálisan kell kordonolnia és kiürítenie az összes alkalmazást.

Időzített GitHub-művelet létrehozása

cron Egy segédprogram, amely lehetővé teszi, hogy parancsokat vagy feladatokat futtasson automatizált ütemezés szerint. Ahhoz, hogy az AKS-csomópontokat automatizált ütemezés szerint frissíthesse, egy adattárra van szüksége a műveletek üzemeltetéséhez. A GitHub Actions általában ugyanabban az adattárban van konfigurálva, mint az alkalmazás, de bármilyen adattárat használhat.

  1. Nyissa meg az adattárat a GitHubon.

  2. Válassza a Műveletek gombot.

  3. Válassza az Új munkafolyamat>– Munkafolyamat beállítása saját maga lehetőséget.

  4. Hozzon létre egy Upgrade cluster node images nevű GitHub Actiont ütemezési eseményindítóval, amely 15 naponta hajnal 3-kor fut. Másolja a következő kódot a YAML-be:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Hozzon létre egy upgrade-node nevű feladatot, amely egy Ubuntu-ügynökön fut, és csatlakozik az Azure CLI-fiókhoz a csomópontfrissítési parancs végrehajtásához. Másolja a következő kódot a YAML-be a on kulcs alatt:

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

Az Azure CLI beállítása a munkafolyamatban

  1. A Marketplace for Actions keresősávban keressen rá az Azure Login kifejezésre.

  2. Válassza az Azure Login lehetőséget.

    A keresési eredmények két sort mutatnak, az első művelet neve

  3. A Telepítés területen válasszon ki egy verziót (például 1.4.6-os verziót), és másolja ki a telepítési kódrészletet.

  4. Adja hozzá a steps kulcsot és a következő információkat a telepítési kódrészletből a YAML-hez:

    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 }}
    

Hitelesítő adatok létrehozása az Azure CLI-hez

  1. Új böngészőablakban hozzon létre egy új szolgáltatásnevet a az ad sp create-for-rbac parancs használatával. Győződjön meg róla, hogy lecseréli a *{subscriptionID}* elemet a saját előfizetésazonosítójára.

    Megjegyzés:

    Ez a példa létrehozza a szerepkört Contributor az Előfizetés hatókörében. Megadhatja az igényeinek megfelelő szerepkört és hatókört. További információ: Azure beépített szerepkörök és Azure RBAC-hatókörszintek.

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

    A kimenetnek hasonlónak kell lennie a következő példakimenethez:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Másolja ki a kimenetet, és keresse meg a GitHub-adattárat.

  3. Válassza a Beállítások>Titkos kulcsok és változók>Műveletek>Új tárhely titkos kulcs lehetőséget.

  4. A Név mezőbe írja be a következőtAZURE_CREDENTIALS:

  5. Titkos kód esetén másolja be a szolgáltatásnév létrehozásakor kapott kimenet tartalmát.

  6. Válassza a Titkos kód hozzáadása lehetőséget.

Az Azure CLI-parancsok végrehajtásának lépéseinek létrehozása

  1. Nyissa meg az ablakát, amely a YAML munkafolyamatot tartalmazza.

  2. A Marketplace for Actions keresősávjában keresse meg az Azure CLI-akciót.

  3. Válassza az Azure CLI-művelet lehetőséget.

    Az

  4. A Telepítés területen válasszon ki egy verziót (például 1.0.8-as verziót), és másolja ki a telepítési kódrészletet.

  5. Illessze be a művelet tartalmát a lépés alatti *Azure Login* YAML-be az alábbi példához hasonlóan:

    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
    

    Jótanács

    A parancstól az új adattári titkosítások létrehozásával leválaszthatja a --resource-group és --name paramétereket, ahogyan azt a AZURE_CREDENTIALS esetében tette.

    Ha titkos kulcsokat hoz létre ezekhez a paraméterekhez, a <resourceGroupName> helyőrzőket a <aksClusterName> titkos megfelelőikre kell cserélnie. Például ${{secrets.RESOURCE_GROUP_NAME}} és ${{secrets.AKS_CLUSTER_NAME}}

  6. Nevezze át a YAML-et a következőre upgrade-node-images.yml: .

  7. Válassza a Módosítások véglegesítése... lehetőséget, adjon hozzá egy véglegesítési üzenetet, majd válassza a Módosítások véglegesítése lehetőséget.

A GitHub-művelet manuális futtatása

Az ütemezett futtatás mellett manuálisan is futtathatja a munkafolyamatot egy új on , úgynevezett trigger hozzáadásával workflow_dispatch.

Megjegyzés:

Ha a fürt összes csomópontkészlete helyett egyetlen csomópontkészletet szeretne frissíteni, adja hozzá a --name paramétert a az aks nodepool upgrade parancshoz a csomópontkészlet nevének megadásához. Például:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • Adja hozzá az workflow_dispatch eseményindítót a on kulcs alatt:

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

    A YAML-nek a következő példához hasonlóan kell kinéznie:

        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
    

Következő lépések

Az AKS frissítéseiről az alábbi cikkekben és forrásokban talál további információt:

A frissítési ajánlott eljárások és egyéb szempontok részletes ismertetését az AKS-javítás és a frissítési útmutató ismerteti.