Mengonfigurasi update otomatis image dasar untuk Cloud Run memungkinkan Google membuat patch keamanan pada komponen sistem operasi dan runtime bahasa dari image dasar secara otomatis. Anda tidak perlu membangun ulang atau men-deploy ulang layanan agar image dasar diperbarui. Tidak ada revisi baru yang dibuat saat gambar dasar diperbarui.
Untuk mempelajari cara menetapkan kebijakan update keamanan pada fungsi yang dibuat menggunakan perintah gcloud functions atau Cloud Functions v2 API, lihat Keamanan lingkungan eksekusi.
Diagram berikut menunjukkan cara kode aplikasi dan dependensi Anda ("image aplikasi") disusun di atas runtime bahasa, paket OS, dan Sistem Operasi ("image dasar"). Komponen image dasar diperbarui secara otomatis oleh Google.
Kebijakan update keamanan
Update otomatis: Update dan patch keamanan pada lingkungan runtime dipublikasikan dalam image runtime versi baru. Setelah periode pengujian stabilitas dan keandalan, runtime yang diupdate akan diluncurkan ke semua layanan sehingga update berlangsung tanpa waktu non-operasional. Untuk menerapkan perbaikan keamanan tingkat bahasa, Anda mungkin perlu membangun ulang fungsi atau layanan yang menggunakan bahasa yang dikompilasi seperti Go atau Java.
Update saat deployment: Update dan patch keamanan diterapkan ke runtime hanya ketika layanan di-deploy atau di-deploy ulang, kecuali jika dinyatakan lain. Update saat deployment tersedia di Cloud Run Functions (generasi ke-1) dan Cloud Run Functions.
Secara default, update keamanan otomatis diaktifkan untuk fungsi yang di-deploy menggunakan:
gcloud functions- Cloud Functions v2 API
gcloud rundengan flag--functionsdan flag--base-image
Ringkasan konfigurasi
Untuk mengonfigurasi pembaruan image dasar otomatis, lakukan hal berikut:
- Pilih image dasar Cloud Run yang kompatibel.
- Bangun dan deploy image aplikasi Anda dengan cara yang mempertahankan kemampuan untuk merebase layanan yang sedang berjalan dengan aman.
Pilih gambar dasar
Image dasar adalah titik awal untuk sebagian besar alur kerja pengembangan berbasis container. Developer memulai dengan image dasar dan menempatkan library, biner, dan file konfigurasi yang diperlukan di atasnya untuk menjalankan aplikasi mereka.
Buildpack Google Cloud memublikasikan dan memelihara image dasar untuk membangun aplikasi Serverless. Image dasar ini dibangun di atas distribusi Linux Ubuntu.
Cloud Run hanya mendukung image dasar otomatis yang menggunakan image dasar buildpack Google Cloud.
Anda harus mempertimbangkan hal berikut saat memilih image dasar buildpack:
- Stack: Stack terdiri dari versi distribusi Linux dan paket sistem, seperti OpenSSL dan curl.
- Bahasa: Versi spesifik bahasa pemrograman yang digunakan oleh aplikasi Anda.
Tinjau image dasar runtime untuk mempelajari lebih lanjut variasi image dasar.
Membangun image aplikasi
Layanan dengan update otomatis yang diaktifkan harus menyediakan image aplikasi yang tidak menyertakan lapisan sistem operasi dasar. Ada dua cara untuk melakukannya:
- Gunakan deployment Cloud Run dari sumber (direkomendasikan)
- Dengan menggunakan sistem build, salin aplikasi Anda ke
image
scratch
Men-deploy dari sumber
Anda dapat menggunakan opsi
deployment sumber Cloud Run untuk mem-build dan men-deploy kode Anda sehingga layanan Anda kompatibel untuk menerima update otomatis. Untuk melakukannya, Anda harus memberikan tanda --base-image saat membuat aplikasi.
Misalnya, untuk men-deploy layanan Node.js dengan mengaktifkan update image dasar otomatis, Anda akan menggunakan perintah berikut:
gcloud run deploy \
--source . \
--base-image nodejs24 \
--automatic-updates
Perhatikan hal berikut:
- Untuk men-deploy fungsi, Anda harus menentukan
flag
--functiondengan titik entri fungsi dari kode sumber Anda. - Gunakan flag
--base-imageuntuk menentukan URL gambar dasar Anda, misalnyanodejs24ataueurope-west1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24. - Gunakan tanda
--automatic-updatesuntuk mengaktifkan update otomatis saat Anda men-deploy dari sumber menggunakan buildpack. Flag ini hanya berlaku saat Anda men-deploy dari sumber; Anda tidak perlu menggunakannya saat men-deploy image container bawaan.
Bangun di scratch
Anda juga dapat menggunakan toolchain build untuk membuat image container aplikasi yang kompatibel dengan pembaruan image dasar otomatis.
Saat Anda men-deploy layanan Cloud Run dengan update image dasar otomatis, image container aplikasi Anda akan di-layer di atas image container dasar. Image container aplikasi hanya boleh menyertakan aplikasi Anda, bukan sistem operasi atau runtime, yang disediakan dalam image container dasar.
Untuk membuat image container aplikasi, lakukan hal berikut:
- Buat Dockerfile multi-level yang:
- Membangun aplikasi menggunakan image dasar yang sesuai dengan dependensi yang diperlukan.
- Menyalin komponen yang dibuat ke gambar sementara.
- Bangun image container aplikasi dan kirimkan ke Artifact Registry.
- Deploy image container aplikasi ke Cloud Run dan tentukan image dasar.
Membuat Dockerfile multi-tahap
Kita akan menggunakan aplikasi Node.js untuk panduan ini. Panduan ini tidak spesifik untuk bahasa tertentu, dan dapat disesuaikan untuk aplikasi dan bahasa Anda.
Buat
Dockerfiledi direktori root project kita dengan berikut:# This Dockerfile will produce an image that only includes the Node.js app and *not* the Node.js runtime. # The resulting image will not run locally. It is intended at being layered on top of a Node.js base image. FROM node:24-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 dependencies onto a scratch image. FROM scratch WORKDIR /workspace COPY --from=builder --chown=33:33 /usr/src/app/ ./ USER 33:33 # Run the web service on container startup. CMD [ "node", "index.js" ]
Dockerfile ini menggunakan build
multi-tahap untuk menyalin
kode sumber dan dependensi aplikasi ke image scratch yang menghilangkan
sistem operasi, paket, dan komponen runtime yang akan disediakan saat
runtime oleh image dasar yang dikelola Cloud Run.
Membangun image aplikasi Anda
Bangun image aplikasi Anda dan upload ke Artifact Registry. Lihat membangun container untuk mengetahui detail cara membangun Dockerfile dengan Cloud Build dan menguploadnya ke Artifact Registry.
Men-deploy image aplikasi
Sekarang Anda siap men-deploy image aplikasi dengan update otomatis diaktifkan menggunakan image dasar yang paling kompatibel untuk aplikasi Anda. Contoh
berikut menggunakan runtime nodejs24 dan region europe-west1. Untuk mempelajari lebih lanjut variasi image dasar, tinjau
image dasar runtime.
Lihat deploy dari kode sumber untuk mengetahui detail tambahan tentang peran dan izin yang diperlukan.
gcloud
-
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai 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 pada sesi.
Untuk mengaktifkan update otomatis untuk runtime
nodejs24saat men-deploy image aplikasi, jalankan perintah berikut:gcloud run deploy SERVICE \ --image APP_IMAGE \ --base-image BASE_IMAGE
Ganti kode berikut:
- SERVICE: nama layanan yang ingin Anda deploy.
- APP_IMAGE: URL image container aplikasi Anda.
- BASE_IMAGE: URL gambar dasar Anda—misalnya
nodejs24ataueurope-west1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24Tinjau Gambar dasar runtime untuk mempelajari lebih lanjut variasi gambar dasar.
YAML
Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:
gcloud run services describe SERVICE --format export > service.yaml
Perbarui
runtimeClassNamedan anotasirun.googleapis.com/base-images:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/base-images: '{"NAME":"BASE_IMAGE"}' spec: containers: - name: NAME image: APP_IMAGE runtimeClassName: run.googleapis.com/linux-base-image-update
Ganti kode berikut:
- SERVICE: nama layanan yang ingin Anda deploy.
- APP_IMAGE: URL image container aplikasi Anda.
- BASE_IMAGE: URL gambar dasar Anda—misalnya
europe-west1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24. Tinjau Image dasar runtime untuk mempelajari lebih lanjut variasi image dasar.
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Tambahkan kode berikut ke resourcegoogle_cloud_run_v2_service
di konfigurasi Terraform Anda:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
base_image_uri = "BASE_IMAGE"
}
}
}
Ganti kode berikut:
- SERVICE: nama layanan yang ingin Anda deploy.
- REGION: Google Cloud region.
IMAGE_URL: referensi ke image container, misalnya,us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- BASE_IMAGE: URL gambar dasar Anda—misalnya
us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24. Tinjau Image dasar runtime untuk mempelajari lebih lanjut variasi image dasar.
Menggabungkan kembali image container untuk dijalankan secara lokal
Image container aplikasi yang digunakan dengan update image dasar otomatis dibangun di scratch
dan tidak dapat dijalankan di luar Cloud Run dengan update image dasar yang diaktifkan.
Anda dapat membuat image aplikasi Anda dapat dijalankan dengan merebasis image aplikasi di atas image dasar yang kompatibel.
Instal Docker Community Edition (CE) di workstation Anda.
Download gambar aplikasi:
docker pull APP_IMAGEGanti APP_IMAGE dengan URL image container Anda.
Download image dasar:
docker pull BASE_IMAGEGanti BASE_IMAGE dengan jalur image lengkap dari image dasar yang kompatibel. Lihat image dasar buildpack Google Cloud untuk melihat daftar image dasar yang tersedia.
Menyusun ulang gambar:
Gunakan
Dockerfileuntuk menyalin semua file dari image aplikasi kembali ke image dasar:ARG APP_IMAGE ARG NEW_BASE_IMAGE # first copy all files from the app image onto the builder image FROM ${APP_IMAGE} AS app FROM ${NEW_BASE_IMAGE} AS builder COPY --from=app / / # restore the app image config by copying everything from previous step back # back onto the app image FROM ${APP_IMAGE} COPY --from=builder / /Buat gambar:
docker build \ -t IMAGE \ --build-arg APP_IMAGE=APP_IMAGE \ --build-arg NEW_BASE_IMAGE=BASE_IMAGE \ .Ganti IMAGE dengan nama image yang digabungkan kembali.
Jika Anda melihat peringatan bahwa
ARG ${APP_IMAGE}danARG ${NEW_BASE_IMAGE}bukan image dasar yang valid, Anda dapat mengabaikannya dengan aman dan menjalankan image:docker run -p 8080:8080 IMAGE
Menonaktifkan update otomatis
Saat men-deploy dari sumber
Saat men-deploy dari sumber, Anda dapat menonaktifkan update image dasar otomatis menggunakan flag --no-automatic-updates. Contoh
berikut menunjukkan cara menonaktifkan update image dasar otomatis untuk layanan Node.js:
gcloud
gcloud run deploy SERVICE \ --source . \ --base-image nodejs24 \ --no-automatic-updates
Saat men-deploy image container
Untuk menonaktifkan update image dasar untuk layanan yang menggunakan image container yang dibuat di scratch, Anda harus men-deploy image container baru yang menyertakan image dasar dan menghapus image dasar:
gcloud
-
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai 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 pada sesi.
Untuk menonaktifkan update image dasar otomatis, jalankan perintah berikut:
gcloud run deploy SERVICE \ --image IMAGE \ --base-image ""
Ganti kode berikut:
- SERVICE: nama layanan yang ingin Anda deploy.
- IMAGE: URL image container Anda yang berisi aplikasi, runtime, dan OS.
YAML
Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:
gcloud run services describe SERVICE --format export > service.yaml
Hapus anotasi
run.googleapis.com/base-images.Hapus atribut
runtimeClassName.Di
image, pastikan untuk menggunakan image container yang menyertakan aplikasi, runtime, dan OS.Buat atau update layanan menggunakan perintah berikut:
gcloud run services replace service.yaml
Perintah
gcloud run services replacesecara default menggunakan fileservice.yamljika ada.
Melihat versi image dasar
Untuk melihat versi image dasar yang digunakan untuk menayangkan aplikasi Anda, lihat resource
LogEntry.labels.run.googleapis.com/base_image_versions
di log layanan Cloud Run.
Batasan umum
Pembaruan image dasar otomatis hanya mendukung image dasar buildpack Google Cloud. Anda tidak dapat menggunakan image dasar Anda sendiri.
Aplikasi yang menggunakan bahasa yang dikompilasi tidak akan dikompilasi ulang sebagai akibat dari update image dasar otomatis.
Pemindaian keamanan pada image aplikasi Anda mungkin tidak lengkap. Karena image aplikasi Anda kini dibangun di
scratch, pemindai keamanan hanya akan memindai bagian aplikasi dari image Anda. Untuk mendapatkan gambaran yang lebih lengkap tentang keamanan container Anda, Anda juga harus menjalankan pemindaian pada image dasar yang disediakan Google yang sesuai. Anda dapat mendownload image dasar dan menggunakan alat open source untuk menjalankan pemindaian.