Partager via


Appliquer des mises à niveau de sécurité automatiques vers des nœuds Azure Kubernetes Service (AKS) à l’aide de GitHub Actions

Les mises à jour de sécurité font partie intégrante de la maintenance de la sécurité et de la conformité de votre cluster AKS avec les derniers correctifs pour le système d’exploitation sous-jacent. Ces mises à jour incluent des correctifs de sécurité ou des mises à jour du noyau. Certaines mises à jour nécessitent un redémarrage du nœud pour terminer le processus.

Cet article vous montre comment automatiser le processus de mise à jour des nœuds AKS à l’aide de GitHub Actions et d’Azure CLI pour créer une tâche de mise à jour automatisée basée sur cron qui s’exécute automatiquement.

Note

Vous pouvez également effectuer automatiquement des mises à niveau d’images de nœud et planifier ces mises à niveau à l’aide de la maintenance planifiée. Pour plus d’informations, consultez Mettre à niveau automatiquement les images de nœud.

Avant de commencer

  • Cet article suppose que vous disposez d’un cluster AKS. Si vous avez besoin d’un cluster AKS, créez-en un à l'aide d’Azure CLI, d’Azure PowerShell ou du portail Azure.
  • Cet article suppose également que vous disposez d’un compte GitHub et d’un référentiel de profils pour héberger vos actions. Si vous n’avez pas de référentiel, créez-en un portant le même nom que votre nom d’utilisateur GitHub.
  • La version 2.0.59 ou ultérieure d’Azure CLI doit être installée et configurée. Exécutez az --version pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.

Mettre à jour des nœuds avec az aks upgrade

La az aks upgrade commande vous permet d’appliquer des mises à jour sans temps d’arrêt. La commande effectue les actions suivantes :

  1. Applique les dernières mises à jour à tous les nœuds de votre cluster.
  2. Isole (rend le nœud indisponible pour la planification de nouvelles charges de travail) et draine (déplace les charges de travail existantes vers d'autres nœuds) le trafic vers les nœuds.
  3. Redémarre les nœuds.
  4. Permet aux nœuds mis à jour de recevoir à nouveau le trafic.

AKS ne redémarre pas automatiquement vos nœuds si vous les mettez à jour à l’aide d’une autre méthode.

Note

L’exécution az aks upgrade avec l’indicateur --node-image-only met uniquement à niveau les images nodales. L’exécution de la commande sans l’indicateur met à niveau les images de nœud et la version du plan de contrôle Kubernetes. Pour plus d’informations, consultez la documentation relative aux mises à niveau managées sur les nœuds et les documents pour les mises à niveau de cluster.

Tous les nœuds Kubernetes s’exécutent dans une machine virtuelle Azure Windows ou Linux standard. Les machines virtuelles Linux utilisent une image Ubuntu avec le système d’exploitation configuré pour rechercher automatiquement les mises à jour chaque nuit.

Lorsque vous utilisez la az aks upgrade commande, Azure CLI crée une augmentation de nouveaux nœuds avec les dernières mises à jour de sécurité et de noyau. Ces nouveaux nœuds sont initialement cordonnés pour empêcher les applications d’être programmées tant que la mise à jour n'est pas terminée. Une fois la mise à jour terminée, Azure met en quarantaine et évacue les anciens nœuds, désenregistre les nouveaux, et transfère toutes les applications programmées vers les nouveaux nœuds.

Ce processus est préférable à la mise à jour manuelle des noyaux basés sur Linux, car Linux nécessite un redémarrage lorsqu’une nouvelle mise à jour du noyau est installée. Si vous mettez à jour le système d’exploitation manuellement, vous devez également redémarrer la machine virtuelle, mettre manuellement en cordon et vider toutes les applications.

Créer une action GitHub chronométrée

cron est un utilitaire qui vous permet d’exécuter un ensemble de commandes ou de travaux, selon une planification automatisée. Pour créer un travail pour mettre à jour vos nœuds AKS selon une planification automatisée, vous avez besoin d’un référentiel pour héberger vos actions. GitHub Actions est généralement configuré dans le même référentiel que votre application, mais vous pouvez utiliser n’importe quel dépôt.

  1. Accédez à votre référentiel sur GitHub.

  2. Sélectionnez Actions.

  3. Sélectionnez Nouveau flux de travail> vous-même.

  4. Créez une action GitHub nommée Mettre à niveau les images des nœuds de cluster avec un déclencheur de planification à exécuter tous les 15 jours à 3h du matin. Copiez le code suivant dans yaML :

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Créez un travail nommé upgrade-node qui s’exécute sur un agent Ubuntu et connectez-vous à votre compte Azure CLI pour exécuter la commande de mise à niveau du nœud. Copiez le code suivant dans le YAML sous la on clé :

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

Configurer Azure CLI dans le flux de travail

  1. Dans la barre Rechercher sur la Place de marché des actions , recherchez Azure Login.

  2. Sélectionnez Connexion Azure.

    Affichage des résultats de recherche montrant deux lignes, la première action est appelée 'Connexion Azure' et la deuxième 'Connexion au registre des conteneurs Azure'

  3. Sous Installation, sélectionnez une version, telle que v1.4.6, puis copiez l’extrait de code d’installation.

  4. Ajoutez la steps clé et les informations suivantes de l’extrait de code d’installation à 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 }}
    

Créer des informations d’identification pour Azure CLI

  1. Dans une nouvelle fenêtre de navigateur, créez un principal de service à l’aide de la az ad sp create-for-rbac commande. Veillez à remplacer *{subscriptionID}* par votre propre ID d’abonnement.

    Note

    Cet exemple crée le rôle Contributor dans l’étendue Abonnement. Vous pouvez fournir le rôle et l’étendue qui répondent à vos besoins. Pour plus d’informations, consultez les rôles intégrés Azure et les niveaux d’étendue RBAC Azure.

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

    Votre résultat devrait être semblable à l’exemple de sortie suivant :

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Copiez la sortie et accédez à votre dépôt GitHub.

  3. Sélectionnez Paramètres>Secrets et variables>Actions>Nouveau secret de référentiel.

  4. Pour Nom, entrez AZURE_CREDENTIALS.

  5. Pour Secret, copiez le contenu de la sortie que vous avez reçue lorsque vous avez créé le principal de service.

  6. Sélectionnez Ajouter un secret.

Créer les étapes pour exécuter les commandes Azure CLI

  1. Accédez à votre fenêtre avec le YAML de flux de travail.

  2. Dans la barre Rechercher des actions dans la Place de marché, recherchez Action Azure CLI.

  3. Sélectionnez l’action Azure CLI.

    Résultat de la recherche pour « Action Azure CLI » avec le premier résultat affiché comme effectué par Azure

  4. Sous Installation, sélectionnez une version, telle que v1.0.8, puis copiez l’extrait de code d’installation.

  5. Collez le contenu de l’action dans yaML en dessous de l’étape *Azure Login* , comme dans l’exemple suivant :

    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
    

    Conseil / Astuce

    Vous pouvez dissocier les paramètres --resource-group et --name de la commande, en créant de nouveaux secrets de référentiel comme vous l’avez fait pour AZURE_CREDENTIALS.

    Si vous créez des secrets pour ces paramètres, vous devez remplacer les espaces réservés <resourceGroupName> et <aksClusterName> par leurs équivalents secrets. Par exemple, ${{secrets.RESOURCE_GROUP_NAME}} et ${{secrets.AKS_CLUSTER_NAME}}

  6. Renommez le YAML en upgrade-node-images.yml.

  7. Sélectionnez Valider les modifications..., ajoutez un message de validation, puis sélectionnez Valider les modifications.

Exécuter manuellement l’action GitHub

Vous pouvez exécuter le workflow manuellement en plus de l’exécution planifiée en ajoutant un nouveau on déclencheur appelé workflow_dispatch.

Note

Si vous souhaitez mettre à niveau un pool de nœuds unique au lieu de tous les pools de nœuds sur le cluster, ajoutez le --name paramètre à la az aks nodepool upgrade commande pour spécifier le nom du pool de nœuds. Par exemple:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • Ajoutez le workflow_dispatch déclencheur sous la on clé :

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

    Le YAML doit ressembler à l’exemple suivant :

        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
    

Étapes suivantes

Pour plus d’informations sur les mises à niveau AKS, consultez les articles et ressources suivants :

Pour obtenir une discussion détaillée sur les meilleures pratiques de mise à niveau et d’autres considérations, consultez Instructions de mise à jour corrective et de mise à niveau AKS.