Configurer les mises à jour automatiques des images de base pour Cloud Run permet à Google d'appliquer automatiquement des correctifs de sécurité au système d'exploitation et aux composants d'exécution de l'image de l'application. Vous n'avez pas besoin de recompiler ou de redéployer votre service.
Pour configurer les mises à jour automatiques des images de base, procédez comme suit :
- Sélectionnez une image de base compatible avec Cloud Run.
- Créez et déployez l'image de votre application de manière à préserver la possibilité de redéfinir en toute sécurité votre service en cours d'exécution.
Sélectionner une image de base
Une image de base est le point de départ de la plupart des workflows de développement basés sur des conteneurs. Les développeurs commencent par une image de base, sur laquelle sont superposées les bibliothèques, les fichiers binaires et les fichiers de configuration nécessaires à l'exécution de leur application.
Les buildpacks de Google Cloud publient et gèrent des images de base pour la création d'applications sans serveur. Ces images de base sont créées sur la distribution Linux Ubuntu.
Cloud Run n'est compatible qu'avec les images de base automatiques qui utilisent des images de base des buildpacks de Google Cloud.
Lorsque vous choisissez un buildpack Google Cloud, vous devez tenir compte des points suivants :
- Pile : une pile se compose d'une version de distribution Linux et de packages système, tels que OpenSSL et curl.
- Langage : version spécifique du langage de programmation utilisé par votre application.
Consultez la section images de base de l'environnement d'exécution pour en savoir plus sur les variantes d'images de base.
Créer l'image de l'application
Les services pour lesquels les mises à jour automatiques sont activées doivent fournir une image d'application qui omet les couches de base du système d'exploitation. Pour ce faire, deux moyens s'offrent à vous :
- Utiliser le déploiement à partir de la source Cloud Run (recommandé)
- À l'aide d'un système de compilation, copiez votre application dans une image
scratch
.
Déployer une fonction à partir d'une source
Vous pouvez utiliser la fonctionnalité de déploiement à partir de la source de Cloud Run pour créer votre application afin qu'elle soit compatible avec les mises à jour automatiques. Pour ce faire, vous devez fournir l'option --base-image
lorsque vous créez votre application.
Par exemple, pour déployer un service ou une fonction Python avec les mises à jour automatiques des images de base activées, utilisez la commande suivante :
gcloud beta run deploy python-application \
--source . \
--base-image=python312
Créer à partir de scratch
Vous pouvez également utiliser votre chaîne d'outils de compilation pour créer une image d'application compatible avec les mises à jour automatiques des images de base. Pour ce faire, vous devrez :
- Créer un Dockerfile en plusieurs étapes
- Créer l'application en utilisant une image de base appropriée avec les dépendances requises
- Copier les composants compilés sur une image scratch.
- Créer les images de l'application et les publier dans Artifact Registry
- Déployer l'application avec Cloud Run
Créer un Dockerfile en plusieurs étapes
Nous utiliserons une application Node.js pour ce guide. Ce guide n'est pas spécifique à un langage et peut être personnalisé pour votre application et votre langage.
Créez un fichier
Dockerfile
dans le répertoire racine de notre projet avec les éléments suivants :FROM node:18-slim as builder # Create and change to the app directory. WORKDIR /usr/src/app # Copy application dependency manifests to the container image and install # production dependencies. COPY package*.json ./ RUN npm install --only=production # Copy local code to the container image. COPY . ./ # Copy the application source code and depenencies onto a scratch image. FROM scratch COPY --from=builder --chown=33:33 /usr/src/app/ ./ # Run the web service on container startup. CMD [ "node", "index.js" ]
Ce fichier Dockerfile utilise une création en plusieurs étapes pour copier le code source et les dépendances de l'application sur une image scratch
qui omet le système d'exploitation, les packages et les composants d'exécution qui seront fournis au moment de l'exécution par l'image de base gérée par Cloud Run.
Créer l'image de votre application
Créez l'image de votre application et importez-la dans Artifact Registry. Consultez la section Créer des conteneurs pour apprendre à créer un fichier Dockerfile avec Cloud Build et à l'importer dans Artifact Registry.
Déployer l'image de l'application
Vous êtes maintenant prêt à déployer l'image de votre application avec les mises à jour automatiques activées à l'aide de l'image de base la plus compatible pour votre application. Nous allons utiliser nodejs18
pour cet exemple.
Pour en savoir plus sur les rôles et les autorisations requis, consultez la page Déployer des images de conteneurs sur Cloud Run.
gcloud beta run deploy SERVICE \ --image=IMAGE \ --base-image=nodejs18
Remplacez :
- SERVICE par le nom du service sur lequel vous souhaitez déployer l'image. Les noms de service doivent comporter un maximum de 49 caractères et être uniques par région et par projet. Si le service n'existe pas encore, cette commande le crée lors du déploiement. Vous pouvez omettre ce paramètre, mais dans ce cas le nom du service vous sera demandé.
- IMAGE par l'URL de votre image de conteneur ;
Champs et annotations de service
En activant les mises à jour de sécurité automatiques, la configuration de votre service sera enrichie des données suivantes.
YAML
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: SERVICE
annotations:
...
run.googleapis.com/build-base-image: BASE_IMAGE_URL
run.googleapis.com/launch-stage: BETA
...
spec:
...
runtimeClassName: run.googleapis.com/linux-base-image-update
Remplacez :
SERVICE
par le nom du service sur lequel vous souhaitez déployer l'image. Les noms de service doivent comporter un maximum de 49 caractères et être uniques par région et par projet. Si le service n'existe pas encore, cette commande le crée lors du déploiement. Vous pouvez omettre ce paramètre, mais dans ce cas le nom du service vous sera demandé.BASE_IMAGE_URL
par l'image de base qui sera utilisée lors du prochain déploiement.BASE_IMAGE_URL
sera utilisé lors du prochain déploiement d'une source ou d'une fonction. Consultez la section Images de base de l'environnement d'exécution pour en savoir plus sur les variantes d'images de base.
Désactiver les mises à jour automatiques
Vous pouvez désactiver les mises à jour de sécurité automatiques en mettant à jour la définition de votre service.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour désactiver les mises à jour automatiques de l'environnement d'exécution Node.js 18, exécutez la commande suivante :
gcloud beta run deploy SERVICE \ --image=IMAGE \ --base-image=nodejs18 \ --no-automatic-updates
Remplacez :
- SERVICE par le nom du service sur lequel vous souhaitez déployer l'image. Les noms de service doivent comporter un maximum de 49 caractères et être uniques par région et par projet. Si le service n'existe pas encore, cette commande le crée lors du déploiement. Vous pouvez omettre ce paramètre, mais dans ce cas le nom du service vous sera demandé.
- IMAGE par l'URL de votre image de conteneur.
YAML
Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :
gcloud run services describe SERVICE --format export > service.yaml
Supprimez la ligne
run.googleapis.com/build-base-image: BASE_IMAGE_URL
. Vous pouvez éventuellement supprimer la ligneruntimeClassName
.Remplacez la configuration du service en exécutant la commande suivante :
gcloud run services replace service.yaml
Limitations connues
Cloud Run n'est compatible qu'avec les images de base des buildpacks de Google Cloud.
Les applications utilisant des langages compilés ne seront pas recompilées suite à la mise à jour automatique de l'image de base.
Les analyses de sécurité de l'image de votre application peuvent être incomplètes. Étant donné que l'image de votre application est désormais basée sur
scratch
, les analyseurs de sécurité se concentrent sur la partie application de votre image. Pour obtenir une image plus complète de la sécurité de vos conteneurs, vous devez également exécuter des analyses sur l'image de base correspondante fournie par Google. Vous pouvez télécharger l'image de base et utiliser des outils Open Source pour effectuer une analyse.