Sdílet prostřednictvím


Pomocí GitHub Actions aplikovat automatické upgrady zabezpečení na uzly Azure Kubernetes Service (AKS).

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 viz Automatická aktualizace obrazů uzlů.

Než začnete

  • Tento článek předpokládá, že již máte existující AKS cluster. 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 instalovat nebo upgradovat, podívejte se na Install Azure CLI.

Aktualizace uzlů pomocí az aks upgrade

Tento az aks upgrade příkaz vám poskytuje způsob, jak aplikovat aktualizace bez výpadku. 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ím příkazu bez příznaku se aktualizují jak image uzlů, tak i verze ří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 oddělené, aby se zabránilo přiřazení žádné aplikace, dokud se aktualizace nedokončí. Po dokončení aktualizace Azure izoluje a odvede starší uzly, odizoluje nové uzly 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ě izolovat a vypnout 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 Nový pracovní postup>Nastavte 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.

    Výsledky hledání se dvěma řádky, první akce se nazývá Azure Login a druhá přihlášení ke službě Azure Container Registry.

  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 použijte příkaz az ad sp create-for-rbac k vytvoření nové služby principal. Nezapomeňte nahradit *{subscriptionID}* vlastním ID předplatného.

    Poznámka:

    Tento příklad vytvoří Contributor roli na úrovni 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í>tajných kódů a proměnných>Akce>Nový tajný klíč úložiště.

  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 Přidat tajný klíč.

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

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

  2. V panelu Hledat v Marketplace pro akce vyhledat Azure CLI Action.

  3. Vyberte akci Azure CLI.

    Výsledek hledání pro 'Azure CLI Action' s prvním výsledkem vytvořeným 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 krok *Azure Login*, 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 --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yes
    

    Návod

    Můžete oddělit parametry --resource-group a --name od příkazu vytvořením nových tajemství úložiště, jako jste to udělali pro AZURE_CREDENTIALS.

    Pokud pro tyto parametry vytvoříte tajemství, musíte nahradit zástupné symboly <resourceGroupName> a <aksClusterName> 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ů. Například:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • Přidejte trigger pod klíč workflow_dispatchon

    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.