Configurar atualizações automáticas da imagem de base

Configurar atualizações automáticas da imagem de base para o Cloud Run permite que o Google faça patches de segurança aos componentes do sistema operacional e do imagem do aplicativo automaticamente. Não é necessário recriar ou reimplantar o serviço.

Para configurar as atualizações automáticas de imagem de base, faça o seguinte:

  • Selecione uma imagem de base do Cloud Run compatível.
  • Crie e implante a imagem do aplicativo de uma maneira que preserve a capacidade de refazer a base do serviço em execução com segurança.

Selecionar uma imagem de base

A imagem base é o ponto de partida para a maioria dos fluxos de trabalho de desenvolvimento baseados em contêineres. Os desenvolvedores começam com uma imagem base e adicionam bibliotecas, binários e arquivos de configuração necessários para executar seus para o aplicativo.

Os buildpacks do Google Cloud publicam e mantêm imagens de base para criar aplicativos sem servidor. Essas imagens de base são criadas na parte superior da distribuição do Ubuntu Linux.

O Cloud Run só aceita imagens de base automáticas que usam Imagens de base dos buildpacks do Google Cloud.

Considere o seguinte ao escolher os buildpacks do Google Cloud:

  • Pilha: uma pilha é composta por uma versão da distribuição do Linux e pacotes do sistema, como OpenSSL e curl.
  • Linguagem: a versão específica da linguagem de programação usada pelo seu aplicativo

Consulte imagens de base do ambiente de execução para saber mais sobre as variações de imagens de base.

Como criar a imagem do aplicativo

Os serviços com atualizações automáticas ativadas precisam fornecer um aplicativo imagem que omite as camadas do sistema operacional básico. Há duas maneiras de fazer isso.

Implantar a partir da origem

É possível usar a implantação do Cloud Run do source para criar seu aplicativo para que compatível com atualizações automáticas. Para fazer isso, forneça a flag --base-image ao criar o app.

Por exemplo, para implantar um serviço ou função do Python com atualizações automáticas de imagem base ativadas, use o seguinte comando:

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

Criado em scratch

Você também pode usar o conjunto de ferramentas de build para criar uma imagem do aplicativo compatível com atualizações automáticas de imagem base. Para fazer isso, você precisa do seguinte:

  1. Crie um Dockerfile com vários estágios.
    1. Crie o aplicativo usando uma imagem de base adequada com as dependências necessárias.
    2. Copie os componentes criados em uma imagem de scratch.
  2. Crie as imagens do aplicativo e publique no Artifact Registry.
  3. Implantar o aplicativo com o Cloud Run.

Criar um Dockerfile com vários estágios

Usaremos um aplicativo Node.js para este guia. Este guia não é um idioma específicos e pode ser personalizados para seu aplicativo e idioma

  • Crie um Dockerfile no diretório raiz do projeto com o seguinte conteúdo:

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

Esse Dockerfile usa um build multiestágio para copiar o código-fonte e as dependências do aplicativo para uma imagem scratch que omite o sistema operacional, os pacotes e os componentes de execução que serão fornecidos no momento da execução pela imagem de base gerenciada do Cloud Run.

Como criar a imagem do aplicativo

Crie a imagem do aplicativo e faça upload dela no Artifact Registry. Consulte construção contêineres para saber como criar um Dockerfile com Cloud Build e upload para o Artifact Registry

Implantar a imagem do aplicativo

Agora está tudo pronto para implantar a imagem do aplicativo com atualizações automáticas ativado usando a imagem de base mais compatível com seu aplicativo. Usaremos o ambiente de execução do Node.js 18 da us-central1 para este exemplo. Analise Imagens de base do ambiente de execução para saber mais sobre as variações da imagem de base.

Consulte Implantar imagens de contêiner no Cloud Run para mais detalhes sobre os papéis e as permissões necessários.

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

Substitua:

  • SERVICE pelo nome do serviço em que você quer implantar. Os nomes dos serviços precisam ter 49 caracteres ou menos e ser exclusivos por região e projeto. Se o serviço ainda não existir, esse comando criará o serviço durante a implantação. É possível omitir esse parâmetro inteiramente, mas será solicitado o nome do serviço, se você omiti-lo.
  • IMAGE pelo URL da imagem de contêiner.

Campos de serviço e anotações

Ao ativar as atualizações de segurança automáticas, a configuração do serviço será enriquecida com os seguintes dados.

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

Substitua:

  • SERVICE o nome do serviço em que você quer implantar. Os nomes dos serviços precisam ter 49 caracteres ou menos e ser exclusivos por região e projeto. Se o serviço ainda não existir, esse comando criará o serviço durante a implantação. É possível omitir esse parâmetro inteiramente, mas será solicitado o nome do serviço, se você omiti-lo.
  • BASE_IMAGE_URL a imagem de base que será usada na próxima implantação. BASE_IMAGE_URL será usado na próxima fonte. ou de função. Análise Imagens de base do ambiente de execução para saber mais sobre as variações da imagem de base.

Desativar atualizações automáticas

Atualize a definição do serviço para desativar as atualizações automáticas de segurança.

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. Para desativar as atualizações automáticas do ambiente de execução do Node.js 18, execute o seguinte comando:

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

Substitua:

  • SERVICE pelo nome do serviço em que você quer implantar. Os nomes dos serviços precisam ter 49 caracteres ou menos e ser exclusivos por região e projeto. Se o serviço ainda não existir, esse comando criará o serviço durante a implantação. É possível omitir esse parâmetro inteiramente, mas será solicitado o nome do serviço, se você omiti-lo.
  • IMAGE pelo URL da imagem de contêiner

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Excluir a linha run.googleapis.com/build-base-image: BASE_IMAGE_URL. A remoção da linha runtimeClassName é opcional.

  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Limitações conhecidas

  • O Cloud Run só oferece suporte a imagens de base de buildpacks do Google Cloud.

  • Os aplicativos que usam linguagens compiladas não serão recompilados como resultado de um atualização automática da imagem de base.

  • As verificações de segurança na imagem do aplicativo podem estar incompletas. Como a imagem do aplicativo agora foi criada com base no scratch, os verificadores de segurança só vão verificar a parte do aplicativo da imagem. Para ter uma imagem mais completa da segurança do contêiner, você também precisa executar verificações na imagem de base fornecida pelo Google. É possível fazer o download da imagem de base e usar ferramentas de código aberto para executar uma verificação.