Appliquer automatiquement des mises à niveau de sécurité aux nœuds Azure Kubernetes service (AKS) avec GitHub Actions
Les correctifs de sécurité sont un élément essentiel de la gestion de la sécurité et de la conformité de votre cluster AKS à l’aide des 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 avec GitHub Actions et Azure CLI pour créer une tâche de mise à jour basée sur cron
qui s’exécute automatiquement.
Remarque
Vous pouvez aussi effectuer automatiquement des mises à niveau d’images de nœud et les planifier avec une 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 avez un compte GitHub et un dépôt de profil pour héberger vos actions. Si vous n’avez pas de dépôt, créez-en un en lui donnant comme nom 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 commande az aks upgrade
vous permet d’appliquer des mises à jour sans temps d’arrêt. La commande effectue les actions suivantes :
- Applique les dernières mises à jour à tous les nœuds de votre cluster.
- Boucle (rend le nœud indisponible pour la planification de nouvelles charges de travail) et draine (déplace les charges de travail existantes vers un autre nœud) le trafic sur les nœuds.
- Redémarre les nœuds.
- 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 avec d’autres méthodes.
Remarque
L’exécution de az aks upgrade
avec l’indicateur --node-image-only
met uniquement à niveau les images de nœud. 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 sur les mises à niveau managées des nœuds et la documentation sur les mises à niveau de cluster.
Tous les nœuds Kubernetes s’exécutent dans une machine virtuelle Azure standard Windows ou basée sur Linux. Les machines virtuelles Linux utilisent une image Ubuntu avec le système d’exploitation configuré pour rechercher automatiquement les mises à jour toutes les nuits.
Quand vous utilisez la commande az aks upgrade
, Azure CLI crée un flot de nouveaux nœuds avec les dernières mises à jour de sécurité et de noyau. Ces nouveaux nœuds sont initialement bouclés pour empêcher les applications d’être planifiées sur eux avant la fin de la mise à jour. Une fois la mise à jour terminée, Azure boucle et draine les anciens nœuds, et déboucle les nouveaux, en transférant toutes les applications planifié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 et bloquer et drainer manuellement 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 des travaux, selon une planification automatisée. Pour créer un travail afin de mettre à jour vos nœuds AKS selon une planification automatisée, vous avez besoin d’un dépôt pour héberger vos actions. Les actions GitHub sont généralement configurées dans le même dépôt que votre application, mais vous pouvez utiliser n’importe quel dépôt.
Accédez à votre dépôt sur GitHub.
Sélectionnez Actions.
Sélectionnez Nouveau workflow>Configurer un workflow vous-même.
Créez une action GitHub nommée Upgrade cluster node images avec un déclencheur de planification à exécuter tous les 15 jours à 3 h 00. Copiez le code suivant dans le fichier YAML :
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *'
Créez un travail nommé upgrade-node qui s’exécute sur un agent Ubuntu et se connecte à votre compte Azure CLI pour exécuter la commande de mise à niveau de nœud. Copiez le code suivant dans le fichier YAML sous la clé
on
:jobs: upgrade-node: runs-on: ubuntu-latest
Configurer Azure CLI dans le workflow
Dans la barre Rechercher des actions dans la Place de marché, recherchez Connexion Azure.
Sélectionnez Connexion Azure.
Sous Installation, sélectionnez une version, par exemple, v1.4.6, puis copiez l’extrait de code d’installation.
Ajoutez la clé
steps
et les informations suivantes de l’extrait de code d’installation au fichier 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
Dans une nouvelle fenêtre de navigateur, créez un principal de service avec la commande
az ad sp create-for-rbac
. Veillez à remplacer*{subscriptionID}*
par votre propre ID d’abonnement.Remarque
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 articles Rôles intégrés Azure et Niveaux d’étendue Azure RBAC.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" }
Copiez la sortie et accédez à votre dépôt GitHub.
Sélectionnez Paramètres>Secrets et variables>Actions>Nouveau secret de dépôt.
Pour Nom, entrez
AZURE_CREDENTIALS
.Pour Secret, copiez le contenu de la sortie que vous avez reçue quand vous avez créé le principal de service.
Cliquez sur Ajouter un secret.
Créer les étapes nécessaires à l’exécution des commandes Azure CLI
Accédez à votre fenêtre avec le fichier YAML du workflow.
Dans la barre Rechercher des actions dans la Place de marché, recherchez Action Azure CLI.
Sélectionnez Action Azure CLI.
Sous Installation, sélectionnez une version, par exemple, v1.0.8, puis copiez l’extrait de code d’installation.
Collez le contenu de l’action dans le fichier YAML sous 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
Vous pouvez dissocier les paramètres
--resource-group
et--name
de la commande en créant des secrets de dépôt comme vous l’avez fait pourAZURE_CREDENTIALS
.Si vous créez des secrets pour ces paramètres, vous devez remplacer les espaces réservés
<resourceGroupName>
et<aksClusterName>
par les secrets équivalents. Par exemple :${{secrets.RESOURCE_GROUP_NAME}}
et${{secrets.AKS_CLUSTER_NAME}}
Renommez le fichier YAML en
upgrade-node-images.yml
.Sélectionnez Commiter les changements..., ajoutez un message de commit, puis sélectionnez Commiter les changements.
Exécuter l’action GitHub manuellement
Vous pouvez exécuter le workflow manuellement en plus de l’exécution planifiée en ajoutant un nouveau déclencheur on
appelé workflow_dispatch
.
Remarque
Si vous voulez mettre à niveau un seul pool de nœuds au lieu de tous les pools de nœuds du cluster, ajoutez le paramètre --name
à la commande az aks nodepool upgrade
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
Ajouter le déclencheur
workflow_dispatch
sous la cléon
:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch:
Le fichier 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 bonnes pratiques de mise à niveau et d’autres considérations, consultez Instructions de mise à jour corrective et de mise à niveau AKS.
Azure Kubernetes Service