Entregando Containers OCI Minimalistas no Ubuntu: Corte de Bloat sem Perder Funcionalidades

Iniciado por Malaquias, Hoje at 06:45

Respostas: 0   |   Visualizações: 4

Tópico anterior - Tópico seguinte

0 Membros e 2 Visitantes estão a ver este tópico.

Introdução
A recente iniciativa "Cut bloat, not features" anunciada pela equipe de desenvolvimento do Ubuntu traz à tona um novo conjunto de práticas e ferramentas focadas na criação de imagens OCI (Open Container Initiative) extremamente enxutas, sem sacrificar a visibilidade de vulnerabilidades. Para ISVs (Independent Software Vendors) e equipes de DevOps, a proposta resolve um dilema antigo: imagens pequenas geram menos overhead e são mais rápidas de transferir, mas podem ocultar vulnerabilidades críticas devido a scanners que não reconhecem camadas otimizadas. Este artigo detalha o que mudou, como aplicar as recomendações no dia‑a‑dia de um sysadmin e quais são os impactos diretos em servidores VPS, nuvens públicas e privadas, além da segurança do kernel.

O que há de novo no Ubuntu?

  • Ubuntu Minimal Base (UMB): Uma nova variante da imagem base que contém apenas o conjunto essencial de bibliotecas do glibc, systemd e ferramentas de gerenciamento de pacotes. Tudo o que não está presente na lista de "essential" é descartado.

  • Ferramenta ubuntu-oci‑builder: Um wrapper em Python que automatiza a remoção de pacotes redundantes, aplica políticas de "strip" em binaries e gera metadados de segurança compatíveis com scanners como Trivy, Grype e Clair.

  • Suporte nativo ao OCI Layout v1.1: Permite que imagens sejam armazenadas como diretórios simples no disco, facilitando a inspeção e a assinatura de componentes individuais.

  • Integração com snapcraft core18‑minimal: Para workloads que ainda dependem de snaps, há agora um snap "core‑minimal" que reduz o footprint em até 40%.



Impacto prático para Sysadmins
A adoção das imagens minimalistas afeta diretamente três áreas críticas:

[ul]
[li]**VPS/Cloud:** Menor tempo de download (até 30 s em links de 100 Mbps) e menor uso de storage, reduzindo custos de I/O em discos SSD compartilhados.
[li]**Segurança do Kernel:** A base reduzida diminui a superfície de ataque. Menos módulos carregados por padrão significa menos vetores de exploração. Além disso, o UMB inclui apenas os módulos de kernel realmente necessários, que podem ser listados via `modprobe -c | grep -v "#"`.
[li]**Containers (Docker/LXD):** Imagens mais leves aceleram o spin‑up de pods e máquinas virtuais LXD, melhorando a densidade de workloads por host.
[/ul]

Como construir imagens OCI minimalistas
Segue um passo‑a‑passo prático que pode ser incluído no pipeline CI/CD:

#!/usr/bin/env bash
# 1. Definir a base minimalista
BASE="ubuntu:22.04-minimal"
# 2. Criar Dockerfile temporário
cat > Dockerfile <<'EOF'
FROM $BASE
# Instala apenas runtime deps
RUN apt-get update && \\
    apt-get install -y --no-install-recommends \\
        ca-certificates \\
        libssl1.1 && \\
    rm -rf /var/lib/apt/lists/*
# 3. Stripping de binários
RUN find /usr -type f -executable -exec strip --strip-all {} + || true
EOF
# 4. Build usando buildx para gerar OCI layout
docker buildx build \\
    --platform linux/amd64,linux/arm64 \\
    --output type=oci,dest=./myapp_oci \\
    .
# 5. Verificar metadados de vulnerabilidade
trivy fs --format json --output vulns.json ./myapp_oci

Alguns detalhes importantes:
- O uso de `--no-install-recommends` corta dependências que não são estritamente necessárias.
- O comando `strip` reduz o tamanho de executáveis em até 20 %.
- `docker buildx` permite gerar multi‑arch em um único passo, essencial para ambientes híbridos.

Integração com Docker e LXD
Para Docker, basta apontar o `image:` no compose ou no Kubernetes manifest para o diretório OCI gerado:

services:
  app:
    image: "oci://./myapp_oci"
    restart: always

No LXD, a importação usa `lxc image import`:

lxc image import ./myapp_oci --alias myapp-minimal
lxc launch myapp-minimal mycontainer

Ambas as ferramentas reconhecem os metadados de assinatura (cosign) inseridos pelo `ubuntu-oci-builder`, garantindo que a imagem não foi adulterada.

Segurança do Kernel e Visibilidade de CVE
A principal preocupação ao reduzir a imagem é não criar "blind spots" nos scanners. A solução proposta inclui:


  • SBOM embutido: O builder gera um SPDX‑JSON que fica dentro da camada `sbom/` da imagem. Ferramentas como `syft` leem esse arquivo e correlacionam CVEs sem precisar analisar todo o filesystem.

  • Assinatura de camadas: Cada camada recebe um hash SHA‑256 e é assinada com `cosign`. Qualquer modificação gera falha de verificação, evitando ataques de "layer injection".

  • Kernel hardening profile: O UMB já vem com `sysctl` pré‑configurado (`kernel.kptr_restrict=2`, `fs.protected_regular=1`). Esses valores podem ser reforçados via `/etc/sysctl.d/99-ubuntu-oci.conf`.



Com essas práticas, o ruído de CVE diminui drasticamente, pois apenas as vulnerabilidades reais das bibliotecas presentes são reportadas.

Conclusão – Estabilidade em produção
A estratégia "Cut bloat, not features" oferece ao administrador de sistemas uma via segura para reduzir o tamanho das imagens OCI, melhorar a velocidade de deploy e, simultaneamente, manter (ou até aumentar) a visibilidade de vulnerabilidades. A adoção do Ubuntu Minimal Base, aliada ao `ubuntu-oci-builder`, permite criar pipelines reproduzíveis, assinados e auditáveis, adequados a ambientes corporativos que exigem alta disponibilidade e compliance. Em produção, isso se traduz em menor consumo de rede, economia de storage e menor superfície de ataque – tudo sem abrir mão da estabilidade comprovada do Ubuntu LTS. Recomenda‑se iniciar com workloads não‑críticos, validar a cadeia de assinatura e, gradualmente, migrar serviços críticos para as novas imagens minimalistas.

Tags: