Configura gli aggiornamenti automatici delle immagini di base

La configurazione degli aggiornamenti automatici delle immagini di base per Cloud Run abilita Google per implementare patch di sicurezza per il sistema operativo e i componenti di runtime l'immagine dell'applicazione automaticamente. Non è necessario ricreare o rieseguire il deployment completamente gestito di Google Cloud.

Per configurare gli aggiornamenti automatici delle immagini di base:

  • Seleziona un'immagine di base di Cloud Run compatibile.
  • Crea ed esegui il deployment della tua immagine dell'applicazione in modo che preserva la capacità di rebase in sicurezza del servizio in esecuzione.

Seleziona un'immagine di base

Un'immagine di base è il punto di partenza per la maggior parte dello sviluppo basato su container per i flussi di lavoro. Gli sviluppatori iniziano con un'immagine di base e sovrappongono le librerie, i programmi binari e i file di configurazione necessari un'applicazione.

I buildpack di Google Cloud pubblicano e mantengono immagini di base per la creazione di applicazioni serverless. Queste immagini di base si basano in cima alla distribuzione di Ubuntu Linux.

Cloud Run supporta solo immagini di base automatiche che utilizzano Immagini di base dei buildpack di Google Cloud.

Quando scegli i buildpack di Google Cloud, devi tenere in considerazione quanto segue:

  • Stack: uno stack è costituito da una versione di distribuzione e da un sistema Linux come OpenSSL e curl
  • Lingua: la versione specifica del linguaggio di programmazione utilizzato dall' applicazione

Esamina le immagini base di runtime per scoprire di più sulle varianti delle immagini di base.

Creazione dell'immagine dell'applicazione

Per i servizi con aggiornamenti automatici attivi è necessario fornire un'applicazione che omette i livelli di base del sistema operativo. Puoi farlo in due modi questo:

Esegui il deployment dall'origine

Puoi utilizzare Cloud Run la funzionalità di deployment dall'origine per creare in modo che sia compatibile con gli aggiornamenti automatici. Per farlo, devi fornisce il flag --base-image durante la creazione dell'applicazione.

Ad esempio, per eseguire il deployment di una funzione o un servizio Python con immagine di base automatica aggiornamenti abilitati, usa il comando seguente:

gcloud beta run deploy python-application \
  --source . \
  --base-image=python312

Crea su scratch

Puoi anche utilizzare la toolchain di compilazione per creare un'immagine dell'applicazione compatibili con gli aggiornamenti automatici delle immagini di base. Per farlo:

  1. Creare un Dockerfile a più fasi.
    1. Crea l'applicazione utilizzando un'immagine di base appropriata con i campi delle dipendenze.
    2. Copia i componenti creati su di un'immagine scratchpad.
  2. Crea le immagini dell'applicazione e pubblicale in Artifact Registry.
  3. Eseguire il deployment dell'applicazione con Cloud Run.

Crea un Dockerfile a più fasi

Per questa guida utilizzeremo un'applicazione Node.js. Questa guida non riguarda un linguaggio specifici e possono essere personalizzati in base alla tua applicazione e alla tua lingua.

  • Crea un Dockerfile nella directory root del nostro progetto con il seguenti:

    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" ]
    

Questo Dockerfile utilizza un'istanza build multifase da copiare il codice sorgente dell'applicazione e le dipendenze su un'immagine scratch che omette il sistema operativo, i pacchetti e i componenti di runtime che verranno forniti dall'immagine di base gestita di Cloud Run.

Immagine della creazione dell'applicazione

Crea l'immagine dell'applicazione e caricala in Artifact Registry. Consulta la creazione container per maggiori dettagli su come creare Dockerfile con Cloud Build e caricarlo in Artifact Registry.

Esegui il deployment dell'immagine dell'applicazione

Ora puoi eseguire il deployment dell'immagine dell'applicazione con gli aggiornamenti automatici attivata utilizzando l'immagine di base più compatibile con la tua applicazione. Utilizzeremo il runtime Node.js 18 da us-central1 per questo esempio. Rivedi immagini base di runtime per scoprire di più sulle varianti delle immagini di base.

Consulta Eseguire il deployment delle immagini container in Cloud Run per ulteriori dettagli sui ruoli e sulle autorizzazioni richiesti.

gcloud beta run deploy SERVICE \
  --image=IMAGE \
  --base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/nodejs18

Sostituisci:

  • SERVICE con il nome del servizio in cui vuoi eseguire il deployment. I nomi dei servizi devono contenere al massimo 49 caratteri e devono essere univoci per ogni regione e progetto. Se il servizio non esiste ancora, questo comando crea durante il deployment. Puoi omettere completamente questo parametro, ma se lo ometti, ti verrà richiesto il nome del servizio.
  • IMAGE con l'URL dell'immagine container.

Campi servizio e annotazioni

Se attivi gli aggiornamenti automatici della sicurezza, la configurazione del servizio verrà e arricchito con i seguenti dati.

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

Sostituisci:

  • SERVICE il nome del servizio in cui vuoi eseguire il deployment. I nomi dei servizi devono contenere al massimo 49 caratteri e devono essere univoci regione e progetto. Se il servizio non esiste ancora, questo comando crea il servizio durante il deployment. Puoi omettere questo parametro ma, se lo ometti, ti verrà richiesto il nome del servizio.
  • BASE_IMAGE_URL l'immagine di base che verrà utilizzata nel prossimo deployment. BASE_IMAGE_URL verrà utilizzato nella prossima fonte o un deployment di funzioni. Rivedi Immagini base di runtime per scoprire di più sulle varianti delle immagini di base.

Disattivare gli aggiornamenti automatici

Gli aggiornamenti automatici della sicurezza possono essere disabilitati aggiornando la definizione del servizio.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. Per disabilitare gli aggiornamenti automatici per il runtime Node.js 18, esegui questo comando:

gcloud beta run deploy SERVICE \
    --image=IMAGE \
    --base-image=nodejs18 \
    --no-automatic-updates

Sostituisci:

  • SERVICE con il nome del servizio in cui vuoi eseguire il deployment. I nomi dei servizi devono contenere al massimo 49 caratteri e devono essere univoci regione e progetto. Se il servizio non esiste ancora, questo comando crea il servizio durante il deployment. Puoi omettere questo parametro ma, se lo ometti, ti verrà richiesto il nome del servizio.
  • IMAGE con l'URL dell'immagine container

YAML

  1. Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Elimina la riga run.googleapis.com/build-base-image: BASE_IMAGE_URL. La rimozione della riga runtimeClassName è facoltativa.

  3. Sostituisci il servizio con la nuova configurazione utilizzando quanto segue :

    gcloud run services replace service.yaml

Limitazioni note

  • Cloud Run supporta solo Immagini di base dei buildpack di Google Cloud.

  • Le applicazioni che utilizzano linguaggi compilati non verranno ricompilate a causa di un aggiornamento automatico dell'immagine di base.

  • Le analisi della sicurezza sull'immagine dell'applicazione potrebbero essere incomplete. Poiché la tua l'immagine dell'applicazione è ora basata su scratch, gli scanner di sicurezza analizzeranno solo della parte dell'immagine relativa all'applicazione. Per avere un'immagine più completa del tuo del container, devi eseguire scansioni sulla anche un'immagine di base fornita da Google. Puoi scaricare l'immagine di base e utilizzare di strumenti open source per eseguire una scansione.