Použití automatických upgradů zabezpečení na uzly Azure Kubernetes Service (AKS) pomocí GitHub Actions

Aktualizace zabezpečení jsou klíčovou součástí údržby zabezpečení clusteru AKS a dodržování nejnovějších oprav základního operačního systému. Mezi tyto aktualizace patří opravy zabezpečení operačního systému nebo aktualizace jádra. Některé aktualizace vyžadují restartování uzlu k dokončení procesu.

V tomto článku se dozvíte, jak automatizovat proces aktualizace uzlů AKS pomocí GitHub Actions a Azure CLI a vytvořit úlohu aktualizace na cron základě toho, která se spustí automaticky.

Poznámka:

Upgrady imagí uzlů můžete provádět automaticky a plánovat tyto upgrady pomocí plánované údržby. Další informace najdete v tématu Automatické upgrade imagí uzlů.

Než začnete

  • Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, vytvořte ho pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal.
  • Tento článek také předpokládá, že máte účet GitHub a úložiště profilu pro hostování vašich akcí. Pokud úložiště nemáte, vytvořte si ho se stejným názvem jako uživatelské jméno GitHubu.
  • Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.0.59 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Aktualizace uzlů pomocí az aks upgrade

Tento az aks upgrade příkaz poskytuje nulový způsob, jak použít aktualizace. Příkaz provede následující akce:

  1. Použije nejnovější aktualizace na všechny uzly clusteru.
  2. Cordons (znepřístupňuje uzel pro plánování nových úloh) a vyprázdní (přesune existující úlohy do jiného uzlu) provoz do uzlů.
  3. Restartuje uzly.
  4. Umožňuje aktualizovaným uzlům znovu přijímat provoz.

AKS automaticky nerestartuje uzly, pokud je aktualizujete jinou metodou.

Poznámka:

Spuštění az aks upgrade s příznakem --node-image-only upgraduje pouze image uzlů. Spuštění příkazu bez příznaku upgraduje image uzlů i verzi řídicí roviny Kubernetes. Další informace najdete v dokumentaci ke spravovaným upgradům na uzlech a dokumentaci pro upgrady clusteru.

Všechny uzly Kubernetes běží na standardním virtuálním počítači Azure s Windows nebo Linuxem. Virtuální počítače založené na Linuxu používají image Ubuntu s operačním systémem nakonfigurovaným tak, aby automaticky kontrolovaly aktualizace každou noc.

Když použijete az aks upgrade příkaz, Azure CLI vytvoří nárůst nových uzlů s nejnovějšími aktualizacemi zabezpečení a jádra. Tyto nové uzly jsou zpočátku podávané, aby se zabránilo naplánování všech aplikací, dokud se aktualizace nedokončí. Po dokončení aktualizace Azure cordons a vyprázdní starší uzly a zruší opravy nových uzlů a přenese všechny naplánované aplikace do nových uzlů.

Tento proces je lepší než ruční aktualizace linuxových jader, protože Linux vyžaduje restartování při instalaci nové aktualizace jádra. Pokud operační systém aktualizujete ručně, musíte také restartovat virtuální počítač, ručně připojit a vyprázdnit všechny aplikace.

Vytvoření akce GitHubu s časovým limitem

cron je nástroj, který umožňuje spustit sadu příkazů nebo úloh v automatizovaném plánu. Pokud chcete vytvořit úlohu pro aktualizaci uzlů AKS podle automatizovaného plánu, potřebujete úložiště pro hostování akcí. GitHub Actions se obvykle konfiguruje ve stejném úložišti jako vaše aplikace, ale můžete použít libovolné úložiště.

  1. Přejděte do úložiště na GitHubu.

  2. Vyberte Akce.

  3. Vyberte Možnost Nový pracovní postup Nastavit pracovní postup>sami.

  4. Vytvořte akci GitHubu s názvem Upgradovat image uzlů clusteru s aktivační událostí plánu, která se spustí každých 15 dnů v 3:00. Do YAML zkopírujte následující kód:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Vytvořte úlohu s názvem upgrade-node , která běží na agentovi Ubuntu, a připojte se k účtu Azure CLI a spusťte příkaz pro upgrade uzlu. Zkopírujte následující kód do YAML pod on klíčem:

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

Nastavení Azure CLI v pracovním postupu

  1. Na panelu Hledat na Marketplace pro akce vyhledejte Azure Login.

  2. Vyberte Přihlášení k Azure.

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

  3. V části Instalace vyberte verzi, například v1.4.6, a zkopírujte fragment kódu instalace.

  4. steps Do YAML přidejte klíč a následující informace z fragmentu kódu instalace:

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

Vytvoření přihlašovacích údajů pro Azure CLI

  1. V novém okně prohlížeče vytvořte pomocí příkazu nový instanční objekt az ad sp create-for-rbac . Nezapomeňte nahradit *{subscriptionID}* vlastním ID předplatného.

    Poznámka:

    Tento příklad vytvoří Contributor roli v oboru předplatného . Můžete zadat roli a obor, který vyhovuje vašim potřebám. Další informace najdete v tématu Předdefinované role Azure a úrovně rozsahu Azure RBAC.

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

    Výstup by se měl podobat následujícímu příkladu výstupu:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Zkopírujte výstup a přejděte do úložiště GitHub.

  3. Vyberte Nastavení> Secrets a variables>Actions>New repository secret.

  4. Do pole Název zadejte AZURE_CREDENTIALS.

  5. V případě tajného kódu zkopírujte obsah výstupu, který jste obdrželi při vytváření instančního objektu.

  6. Vyberte Add Secret (Přidat tajný kód).

Vytvoření kroků pro spuštění příkazů Azure CLI

  1. Přejděte do okna pomocí YAML pracovního postupu.

  2. Na panelu Hledat na Marketplace pro akce vyhledejte akci Azure CLI.

  3. Vyberte akci Azure CLI.

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

  4. V části Instalace vyberte verzi, například v1.0.8, a zkopírujte fragment kódu instalace.

  5. Vložte obsah akce do YAML pod *Azure Login* krok, podobně jako v následujícím příkladu:

    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

    Můžete oddělit -g a -n parametry od příkazu vytvořením nových tajných kódů úložiště, jako jste to udělali .AZURE_CREDENTIALS

    Pokud pro tyto parametry vytvoříte tajné kódy, musíte nahradit {resourceGroupName} zástupné {aksClusterName} symboly jejich tajnými protějšky. Například ${{secrets.RESOURCE_GROUP_NAME}} a ${{secrets.AKS_CLUSTER_NAME}}

  6. Přejmenujte YAML na upgrade-node-images.yml.

  7. Vyberte Potvrdit změny..., přidejte zprávu potvrzení a pak vyberte Potvrdit změny.

Ruční spuštění akce GitHubu

Kromě naplánovaného spuštění můžete pracovní postup spustit ručně přidáním nové on aktivační události s názvem workflow_dispatch.

Poznámka:

Pokud chcete upgradovat fond s jedním uzlem místo všech fondů uzlů v clusteru, přidejte --name do az aks nodepool upgrade příkazu parametr, který určí název fondu uzlů. Příklad:

az aks nodepool upgrade -g {resourceGroupName} --cluster-name {aksClusterName} --name {{nodePoolName}} --node-image-only
  • workflow_dispatch Přidejte trigger pod on klíč:

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

    YAML by měl vypadat podobně jako v následujícím příkladu:

        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
    

Další kroky

Další informace o upgradech AKS najdete v následujících článcích a zdrojích informací:

Podrobné informace o osvědčených postupech upgradu a dalších aspektech najdete v pokynech k opravám a upgradu AKS.