Mengonfigurasi update image dasar otomatis

Mengonfigurasi update image dasar otomatis untuk Cloud Run memungkinkan Google untuk membuat {i>patch<i} keamanan pada sistem operasi dan komponen {i>runtime<i} gambar aplikasi secara otomatis. Anda tidak perlu membangun atau men-deploy ulang layanan.

Untuk mengonfigurasi update image dasar otomatis, lakukan langkah berikut:

  • Pilih image dasar Cloud Run yang kompatibel.
  • Bangun dan deploy image aplikasi Anda dengan cara yang mempertahankan kemampuan untuk melakukan {i>rebase<i} layanan yang sedang berjalan dengan aman.

Pilih Gambar Dasar

Image dasar adalah titik awal untuk sebagian besar pengembangan berbasis container di alur kerja. Pengembang memulai dengan {i>image<i} dasar dan lapisan di atasnya sebagai perpustakaan, biner, dan file konfigurasi yang diperlukan yang digunakan untuk menjalankan aplikasi.

buildpack Google Cloud memublikasikan dan mengelola image dasar untuk membangun aplikasi Serverless. Image dasar ini dibangun berdasarkan teratas dari distribusi Ubuntu Linux.

Cloud Run hanya mendukung image dasar otomatis yang menggunakan Image dasar buildpacks Google Cloud.

Anda harus mempertimbangkan hal berikut saat memilih buildpack Google Cloud:

  • Stack: Stack terdiri dari versi dan sistem distribusi Linux paket, seperti OpenSSL dan curl
  • Bahasa: Versi spesifik bahasa pemrograman yang digunakan oleh aplikasi

Meninjau image dasar runtime untuk mempelajari lebih lanjut variasi gambar dasar.

Membangun image aplikasi

Layanan dengan pembaruan otomatis yang diaktifkan harus menyediakan aplikasi yang menghilangkan lapisan sistem operasi dasar. Ada dua cara untuk melakukannya ini:

Men-deploy dari sumber

Anda dapat menggunakan Cloud Run men-deploy dari sumber untuk membangun agar kompatibel dengan update otomatis. Untuk melakukannya, Anda harus berikan flag --base-image saat membuat aplikasi.

Misalnya, untuk men-deploy layanan atau fungsi Python dengan image dasar otomatis mengaktifkan pembaruan, Anda akan menggunakan perintah berikut:

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

Build di scratch

Anda juga dapat menggunakan toolchain build untuk membuat image aplikasi yang kompatibel dengan update image dasar otomatis. Untuk melakukannya, Anda akan:

  1. Membuat Dockerfile multi-tahap.
    1. Membangun aplikasi menggunakan image dasar yang sesuai dengan kebutuhan dependensi.
    2. Salin komponen yang dibuat ke gambar awal.
  2. Bangun image aplikasi dan publikasikan ke Artifact Registry.
  3. Men-deploy aplikasi dengan Cloud Run.

Membuat Dockerfile multi-tahap

Kita akan menggunakan aplikasi Node.js untuk panduan ini. Panduan ini bukan bahasa spesifik, serta dapat disesuaikan untuk aplikasi dan bahasa Anda.

  • Buat Dockerfile di direktori utama project kita dengan berikut ini:

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

Dockerfile ini menggunakan build multi-tahap untuk menyalin kode sumber aplikasi dan dependensi ke gambar scratch yang menghilangkan sistem operasi, paket, dan komponen {i> runtime<i} yang akan disediakan di runtime oleh image dasar terkelola Cloud Run.

Membangun gambar aplikasi

Bangun image aplikasi Anda dan upload ke Artifact Registry. Lihat membangun container untuk mengetahui detail cara mem-build Dockerfile dengan Cloud Build dan upload ke Artifact Registry.

Men-deploy image aplikasi

Anda kini siap men-deploy image aplikasi dengan update otomatis diaktifkan menggunakan image dasar yang paling kompatibel untuk aplikasi Anda. Kita akan menggunakan runtime Node.js 18 dari us-central1 untuk contoh ini. Tinjau image dasar runtime untuk mempelajari lebih lanjut variasi gambar dasar.

Lihat men-deploy image container ke Cloud Run untuk detail tambahan tentang peran dan izin yang diperlukan.

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

Ganti:

  • SERVICE dengan nama layanan tempat Anda ingin men-deploy. Nama layanan harus terdiri dari 49 karakter atau kurang dan harus unik per region dan proyek. Jika layanan belum ada, perintah ini akan membuat selama deployment. Anda bisa menghilangkan parameter ini sepenuhnya, tetapi Anda akan diminta untuk memberikan nama layanan jika Anda menghilangkannya.
  • IMAGE dengan URL image container Anda.

Kolom dan anotasi layanan

Dengan mengaktifkan Update keamanan otomatis, konfigurasi layanan Anda akan yang diperkaya dengan data berikut.

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

Ganti:

  • SERVICE nama layanan tempat Anda ingin men-deploy. Nama layanan harus terdiri dari 49 karakter atau kurang dan harus unik sesuai region dan project. Jika layanan tersebut belum ada, perintah ini membuat layanan selama deployment. Anda dapat menghilangkan parameter ini sepenuhnya, tetapi Anda akan diminta untuk memasukkan nama layanan jika Anda menghilangkannya.
  • BASE_IMAGE_URL image dasar yang akan digunakan pada deployment berikutnya. BASE_IMAGE_URL akan digunakan di sumber berikutnya atau fungsi. Tinjau Image dasar runtime untuk mempelajari lebih lanjut variasi gambar dasar.

Nonaktifkan update otomatis

Update keamanan otomatis dapat dinonaktifkan dengan memperbarui definisi layanan Anda.

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Untuk menonaktifkan update otomatis untuk runtime Node.js 18, jalankan perintah berikut:

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

Ganti:

  • SERVICE dengan nama layanan tempat Anda ingin men-deploy. Nama layanan harus terdiri dari 49 karakter atau kurang dan harus unik sesuai region dan project. Jika layanan tersebut belum ada, perintah ini membuat layanan selama deployment. Anda dapat menghilangkan parameter ini sepenuhnya, tetapi Anda akan diminta untuk memasukkan nama layanan jika Anda menghilangkannya.
  • IMAGE dengan URL image container Anda

YAML

  1. Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Hapus baris run.googleapis.com/build-base-image: BASE_IMAGE_URL. Anda dapat menghapus baris runtimeClassName secara opsional.

  3. Ganti layanan dengan konfigurasinya yang baru menggunakan perintah berikut:

    gcloud run services replace service.yaml

Batasan umum

  • Cloud Run hanya mendukung Image dasar buildpacks Google Cloud.

  • Aplikasi yang menggunakan bahasa yang dikompilasi tidak akan dikompilasi ulang sebagai hasil dari update image dasar otomatis.

  • Pemindaian keamanan pada gambar aplikasi Anda mungkin tidak lengkap. Karena image aplikasi kini dibangun di scratch, pemindai keamanan hanya akan memindai bagian aplikasi dari gambar Anda. Untuk mendapatkan gambar yang lebih lengkap keamanan container, Anda harus menjalankan pemindaian pada Image dasar yang disediakan Google juga. Anda dapat mengunduh {i>image<i} dasar dan menggunakan {i>open source<i} untuk menjalankan pemindaian.