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.
- Usar o implante da origem do Cloud Run (recomendado)
- Usando um sistema de build, copie seu aplicativo em uma imagem
scratch
.
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:
- Crie um Dockerfile com vários estágios.
- Crie o aplicativo usando uma imagem de base adequada com as dependências necessárias.
- Copie os componentes criados em uma imagem de scratch.
- Crie as imagens do aplicativo e publique no Artifact Registry.
- 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
-
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.
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
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
Excluir a linha
run.googleapis.com/build-base-image: BASE_IMAGE_URL
. A remoção da linharuntimeClassName
é opcional.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.