Freigeben über


Anwenden automatischer Sicherheitsupgrades auf Azure Kubernetes Service (AKS)-Knoten mithilfe von GitHub-Aktionen

Sicherheitsupdates sind ein wichtiger Bestandteil, um die Sicherheit und Konformität Ihres AKS-Clusters mit den neuesten Korrekturen für das zugrunde liegende Betriebssystem aufrechtzuerhalten. Diese Updates enthalten Sicherheitsfixes für das Betriebssystem oder Kernelupdates. Einige Updates erfordern einen Knotenneustart, um den Vorgang abzuschließen.

In diesem Artikel erfahren Sie, wie Sie den Aktualisierungsprozess von AKS-Knoten mithilfe von GitHub Actions und der Azure CLI automatisieren können, um eine Aktualisierungsaufgabe zu erstellen, die auf cron basiert und automatisch ausgeführt wird.

Hinweis

Sie können Knotenimageupgrades auch automatisch durchführen und diese Upgrades mit geplanter Wartung planen. Weitere Informationen finden Sie unter Automatisches Upgrade von Knotenimages.

Bevor Sie anfangen

  • In diesem Artikel wird vorausgesetzt, dass Sie über einen AKS-Cluster verfügen. Wenn Sie einen AKS-Cluster benötigen, erstellen Sie einen mithilfe der Azure CLI, von Azure PowerShell oder des Azure-Portals.
  • In diesem Artikel wird außerdem davon ausgegangen, dass Sie über ein GitHub-Konto und ein Profil-Repository verfügen, um Ihre Aktionen zu hosten. Wenn Sie nicht über ein Repository verfügen, erstellen Sie ein Repository mit demselben Namen wie Ihr GitHub-Benutzername.
  • Azure CLI-Version 2.0.59 oder höher muss installiert und konfiguriert sein. Führen Sie az --version aus, um die Version zu ermitteln. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.

Aktualisieren von Knoten mit az aks upgrade

Mit dem az aks upgrade Befehl erhalten Sie eine Null-Ausfallzeit, um Updates anzuwenden. Der Befehl führt die folgenden Aktionen aus:

  1. Wendet die neuesten Updates auf alle Knoten Ihres Clusters an.
  2. Sperrt (macht den Knoten für die Planung neuer Workloads nicht verfügbar) und leert (verschiebt die vorhandenen Workloads auf andere Knoten) Datenverkehr auf die Knoten.
  3. Startet die Knoten neu.
  4. Ermöglicht es den aktualisierten Knoten, den Datenverkehr erneut zu empfangen.

AKS startet Ihre Knoten nicht automatisch neu, wenn Sie sie mit einer anderen Methode aktualisieren.

Hinweis

Das Ausführen von az aks upgrade mit dem --node-image-only-Flag aktualisiert nur die Knotenbilder. Wenn Sie den Befehl ohne das Flag ausführen, werden sowohl die Knotenimages als auch die Kubernetes-Steuerungsebenenversion aktualisiert. Weitere Informationen finden Sie in den Dokumenten für verwaltete Upgrades auf Knoten und die Dokumente für Clusterupgrades.

Alle Kubernetes-Knoten werden auf einem Windows- oder Linux-basierten virtuellen Azure-Computer (VM) ausgeführt. Die linuxbasierten VMs verwenden ein Ubuntu-Image mit dem Betriebssystem, das für die automatische Überprüfung auf Updates jeden Abend konfiguriert ist.

Wenn Sie den az aks upgrade Befehl verwenden, initiiert die Azure CLI eine Erhöhung an neuen Knoten mit den neuesten Sicherheits- und Kernelupdates. Diese neuen Knoten werden zunächst abgesperrt, um zu verhindern, dass Apps auf ihnen geplant werden, bis das Update abgeschlossen ist. Nach Abschluss des Updates sperrt Azure die älteren Knoten und entlastet sie, während es die neuen entsperrt und alle geplanten Anwendungen auf die neuen Knoten überträgt.

Dieser Vorgang ist besser als das manuelle Aktualisieren von Linux-basierten Kerneln, da Linux einen Neustart erfordert, wenn ein neues Kernelupdate installiert wird. Wenn Sie das Betriebssystem manuell aktualisieren, müssen Sie auch die VM neu starten und alle Anwendungen manuell sperren und ausgleichen.

Erstellen einer zeitlichen GitHub-Aktion

cron ist ein Dienstprogramm, mit dem Sie eine Reihe von Befehlen oder Aufträgen in einem automatisierten Zeitplan ausführen können. Um einen Auftrag zum Aktualisieren Ihrer AKS-Knoten in einem automatisierten Zeitplan zu erstellen, benötigen Sie ein Repository, um Ihre Aktionen zu hosten. GitHub-Aktionen werden in der Regel im selben Repository wie Ihre Anwendung konfiguriert, aber Sie können ein beliebiges Repository verwenden.

  1. Navigieren Sie zu Ihrem Repository auf GitHub.

  2. Wählen Sie Actions aus.

  3. Wählen Sie Neuen Workflow>Workflow selbst einrichten aus.

  4. Erstellen Sie eine GitHub-Aktion namens Upgrade cluster node images mit einem Zeitplantrigger, der alle 15 Tage um 3 Uhr ausgeführt werden soll. Kopieren Sie den folgenden Code in das YAML:Copy the following code into the YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Erstellen Sie einen Auftrag namens Upgradeknoten, der auf einem Ubuntu-Agent ausgeführt wird und eine Verbindung mit Ihrem Azure CLI-Konto herstellt, um den Knotenupgradebefehl auszuführen. Kopieren Sie den folgenden Code unter dem on Schlüssel in das YAML:

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

Einrichten der Azure CLI im Workflow

  1. Suchen Sie in der Such-Marketplace-Leiste für Aktionen nach Azure-Anmeldung.

  2. Wählen Sie Azure-Anmeldung aus.

    Suchergebnisse mit zwei Zeilen, die erste Aktion heißt

  3. Wählen Sie unter "Installation" eine Version aus, z. B. v1.4.6, und kopieren Sie den Codeausschnitt der Installation.

  4. Fügen Sie den steps Schlüssel und die folgenden Informationen aus dem Codeausschnitt der Installation zum YAML hinzu:

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

Erstellen von Anmeldeinformationen für die Azure CLI

  1. Erstellen Sie in einem neuen Browserfenster mithilfe des az ad sp create-for-rbac-Befehls einen neuen Dienstprinzipal. Stellen Sie sicher, dass Sie *{subscriptionID}* durch Ihre eigene Abonnement-ID ersetzen.

    Hinweis

    In diesem Beispiel wird die Contributor Rolle im Abonnementbereich erstellt. Sie können die Rolle und den Bereich bereitstellen, die Ihren Anforderungen entspricht. Weitere Informationen finden Sie unter den integrierten Azure-Rollen und Azure RBAC-Bereichsebenen.

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

    Ihre Ausgabe sollte der folgenden Beispielausgabe ähneln:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Kopieren Sie die Ausgabe, und navigieren Sie zu Ihrem GitHub-Repository.

  3. Wählen Sie "Geheime Einstellungen">und "Variablen>Aktionen>Neuer Repositoryschlüssel" aus.

  4. Geben Sie unter NameAZURE_CREDENTIALS ein.

  5. Kopieren Sie für Geheimnis den Inhalt der Ausgabe, die Sie beim Erstellen des Dienstprinzipals erhalten haben.

  6. Wählen Sie "Geheimen Schlüssel hinzufügen" aus.

Erstellen der Schritte zum Ausführen der Azure CLI-Befehle

  1. Navigieren Sie mit dem YaML-Workflow zu Ihrem Fenster.

  2. Suchen Sie in der Such-Marketplace-Leiste für Aktionen nach Azure CLI Action.

  3. Wählen Sie Azure CLI-Aktion aus.

    Suchergebnis für

  4. Wählen Sie unter "Installation" eine Version wie v1.0.8 aus, und kopieren Sie den Codeausschnitt der Installation.

  5. Fügen Sie den Inhalt der Aktion in das YAML unterhalb des *Azure Login* Schritts ein, ähnlich wie im folgenden Beispiel:

    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
    

    Tipp

    Sie können die Parameter --resource-group und --name vom Befehl entkoppeln, indem Sie neue Repository-Geheimnisse erstellen, wie Sie es für AZURE_CREDENTIALS getan haben.

    Wenn Sie Geheimnisse für diese Parameter erstellen, müssen Sie die <resourceGroupName> und <aksClusterName> Platzhalter durch ihre geheimen Entsprechungen ersetzen. Beispielsweise ${{secrets.RESOURCE_GROUP_NAME}} und ${{secrets.AKS_CLUSTER_NAME}}

  6. Benennen Sie YAML in upgrade-node-images.yml um.

  7. Wählen Sie Änderungen bestätigen... aus, fügen Sie eine Commit-Nachricht hinzu, und wählen Sie dann Änderungen bestätigen.

Manuelles Ausführen der GitHub-Aktion

Sie können den Workflow zusätzlich zur geplanten Ausführung manuell ausführen, indem Sie einen neuen on Trigger namens workflow_dispatch hinzufügen.

Hinweis

Wenn Sie einen einzelnen Knotenpool anstelle aller Knotenpools auf dem Cluster aktualisieren möchten, fügen Sie dem Befehl den --nameaz aks nodepool upgrade Parameter hinzu, um den Namen des Knotenpools anzugeben. Beispiel:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • Fügen Sie den workflow_dispatch Trigger unter dem on Schlüssel hinzu:

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

    Das YAML sollte ähnlich wie im folgenden Beispiel aussehen:

        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ächste Schritte

Weitere Informationen zu AKS-Upgrades finden Sie in den folgenden Artikeln und Ressourcen:

Eine ausführliche Erläuterung zu bewährten Methoden für Upgrades und anderen Überlegungen finden Sie unter AKS Patch- und Upgradeanleitungen.