Gunakan Image Cleaner untuk membersihkan gambar basi yang rentan pada kluster Azure Kubernetes Service (AKS)
Adalah hal yang umum untuk menggunakan alur untuk membuat dan menyebarkan citra pada kluster Azure Kubernetes Service (AKS). Meskipun bagus untuk pembuatan citra, proses ini sering tidak mempertanggungjawabkan citra kedaluwarsa yang tertinggal dan dapat menyebabkan citra membengkak pada node kluster. Gambar-gambar ini mungkin berisi kerentanan, yang mungkin membuat masalah keamanan. Untuk menghapus risiko keamanan di kluster, Anda dapat membersihkan gambar yang tidak direferensikan ini. Membersihkan gambar secara manual dapat memakan waktu intensif. Image Cleaner melakukan identifikasi dan penghapusan gambar otomatis, yang mengurangi risiko gambar kedaluarsa dan mengurangi waktu yang diperlukan untuk membersihkannya.
Catatan
Image Cleaner adalah fitur berdasarkan Eraser.
Pada kluster AKS, nama fitur dan nama properti adalah Image Cleaner
, sementara nama pod Image Cleaner yang relevan berisi Eraser
.
Prasyarat
- Langganan Azure. Jika Anda tidak memiliki langganan Azure, Anda dapat membuat akun gratis.
- Azure CLI versi 2.49.0 atau yang lebih baru. Jalankan
az --version
untuk menemukan versi Anda. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
Batasan
Image Cleaner belum mendukung kumpulan simpul Windows atau simpul virtual AKS.
Cara kerja Image Cleaner
Setelah Anda mengaktifkan Image Cleaner, akan ada pod manajer pengontrol bernama eraser-controller-manager
yang disebarkan ke kluster Anda.
Dengan Image Cleaner, Anda dapat memilih antara mode manual dan otomatis dan opsi konfigurasi berikut:
Opsi konfigurasi
Nama | Deskripsi | Wajib diisi |
---|---|---|
--enable-image-cleaner |
Mengaktifkan fitur Image Cleaner untuk kluster AKS | Ya, kecuali ditentukan dinonaktifkan |
--disable-image-cleaner |
Menonaktifkan fitur Image Cleaner untuk kluster AKS | Ya, kecuali ditentukan dinonaktifkan |
--image-cleaner-interval-hours |
Parameter ini menentukan waktu interval (dalam jam) yang digunakan Image Cleaner untuk dijalankan. Nilai default untuk Azure CLI adalah satu minggu, nilai minimumnya adalah 24 jam dan maksimumnya adalah tiga bulan. | Tidak diperlukan untuk Azure CLI, diperlukan untuk templat ARM atau klien lain |
Mode otomatis
Setelah eraser-controller-manager
disebarkan, langkah-langkah berikut akan diambil secara otomatis:
- Ini segera memulai proses pembersihan dan membuat
eraser-aks-xxxxx
pod pekerja untuk setiap simpul. - Ada tiga kontainer di setiap pod pekerja:
- Kolektor, yang mengumpulkan gambar yang tidak digunakan.
- Pemindai trivy, yang memanfaatkan trivy untuk memindai kerentanan gambar.
- Penghapus, yang menghapus gambar yang tidak digunakan dengan kerentanan.
- Setelah proses pembersihan selesai, pod pekerja dihapus dan pembersihan terjadwal berikutnya terjadi sesuai dengan yang
--image-cleaner-interval-hours
Anda tentukan.
Mode manual
Anda dapat memicu pembersihan secara manual dengan menentukan objek CRD,ImageList
. Ini memicu eraser-contoller-manager
untuk membuat eraser-aks-xxxxx
pod pekerja untuk setiap simpul dan menyelesaikan proses penghapusan manual.
Catatan
Setelah menonaktifkan Image Cleaner, konfigurasi lama masih ada. Ini berarti jika Anda mengaktifkan fitur lagi tanpa meneruskan konfigurasi secara eksplisit, nilai yang ada digunakan alih-alih default.
Mengaktifkan Image Cleaner pada kluster AKS Anda
Mengaktifkan Image Cleaner pada kluster baru
Aktifkan Image Cleaner pada kluster AKS baru menggunakan
az aks create
perintah dengan--enable-image-cleaner
parameter .az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Mengaktifkan Image Cleaner pada kluster yang ada
Aktifkan Image Cleaner pada kluster AKS yang ada menggunakan
az aks update
perintah .az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Memperbarui interval Image Cleaner pada kluster baru atau yang sudah ada
Perbarui interval Image Cleaner pada kluster AKS baru atau yang sudah ada menggunakan
--image-cleaner-interval-hours
parameter .# Create a new cluster with specifying the interval az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --image-cleaner-interval-hours 48 \ --generate-ssh-keys # Update the interval on an existing cluster az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --image-cleaner-interval-hours 48
Menghapus gambar secara manual menggunakan Image Cleaner
Penting
name
harus diatur ke imagelist
.
Hapus gambar secara manual menggunakan perintah berikut
kubectl apply
. Contoh ini menghapusdocker.io/library/alpine:3.7.3
gambar jika tidak digunakan.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Pembersihan manual adalah operasi satu kali dan hanya dipicu ketika baru imagelist
dibuat atau perubahan dilakukan pada imagelist
. Setelah gambar dihapus, imagelist
tidak akan dihapus secara otomatis.
Jika Anda perlu memicu pembersihan manual lain, Anda harus membuat perubahan baru imagelist
atau membuat perubahan pada yang sudah ada. Jika Anda ingin menghapus gambar yang sama lagi, Anda perlu membuat baru imagelist
.
Menghapus ImageList yang sudah ada dan membuat yang baru
Hapus yang lama
imagelist
menggunakankubectl delete
perintah .kubectl delete ImageList imagelist
Buat baru
imagelist
dengan nama gambar yang sama. Contoh berikut menggunakan gambar yang sama dengan contoh sebelumnya.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Mengubah ImageList yang sudah ada
Ubah yang sudah ada
imagelist
menggunakankubectl edit
perintah .kubectl edit ImageList imagelist # Add a new image to the list apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: docker.io/library/python:alpine3.18
Saat menggunakan mode manual, eraser-aks-xxxxx
pod akan dihapus dalam waktu 10 menit setelah penyelesaian pekerjaan.
Daftar pengecualian gambar
Gambar yang ditentukan dalam daftar pengecualian tidak dihapus dari kluster. Image Cleaner mendukung sistem dan daftar pengecualian yang ditentukan pengguna. Tidak didukung untuk mengedit daftar pengecualian sistem.
Periksa daftar pengecualian sistem
Periksa daftar pengecualian sistem menggunakan perintah berikut
kubectl get
.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Membuat daftar pengecualian yang ditentukan pengguna
Buat sampel file JSON untuk berisi gambar yang dikecualikan.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOF
configmap
Buat menggunakan sampel file JSON menggunakan perintah dankubectl label
berikut.kubectl create
kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Nonaktifkan Image Cleaner
Nonaktifkan Image Cleaner pada kluster Anda menggunakan
az aks update
perintah dengan--disable-image-cleaner
parameter .az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
FAQ
Bagaimana cara memeriksa versi mana yang digunakan Image Cleaner?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Apakah Image Cleaner mendukung pemindai kerentanan lainnya selain trivy-scanner?
Tidak.
Dapatkah saya menentukan tingkat kerentanan gambar untuk dibersihkan?
Tidak. Pengaturan default untuk tingkat kerentanan meliputi:
LOW
,MEDIUM
,HIGH
, danCRITICAL
Anda tidak dapat menyesuaikan pengaturan default.
Bagaimana cara meninjau gambar yang dibersihkan oleh Image Cleaner?
Log gambar disimpan di eraser-aks-xxxxx
pod pekerja. Saat eraser-aks-xxxxx
masih hidup, Anda dapat menjalankan perintah berikut untuk melihat log penghapusan:
kubectl logs -n kube-system <worker-pod-name> -c collector
kubectl logs -n kube-system <worker-pod-name> -c trivy-scanner
kubectl logs -n kube-system <worker-pod-name> -c remover
Pod eraser-aks-xxxxx
akan dihapus dalam waktu 10 menit setelah penyelesaian pekerjaan. Anda dapat mengikuti langkah-langkah ini untuk mengaktifkan add-on Azure Monitor dan menggunakan tabel log pod Container Insights. Setelah itu, log historis akan disimpan dan Anda dapat meninjaunya bahkan eraser-aks-xxxxx
dihapus.
Pastikan Azure Monitoring diaktifkan di kluster Anda. Untuk langkah-langkah terperinci, lihat Mengaktifkan Container Insights pada kluster AKS.
Dapatkan ID sumber daya Analitik Log menggunakan
az aks show
perintah .az aks show --resource-group myResourceGroup --name myManagedCluster
Setelah beberapa menit, perintah mengembalikan informasi berformat JSON tentang solusi, termasuk ID sumber daya ruang kerja:
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }
Di portal Azure, cari ID sumber daya ruang kerja, lalu pilih Log.
Salin kueri berikut ke dalam tabel, ganti
name
denganeraser-aks-xxxxx
(nama pod pekerja):let startTimestamp = ago(1h); KubePodInventory | where TimeGenerated > startTimestamp | project ContainerID, PodName=Name, Namespace | where PodName contains "name" and Namespace startswith "kube-system" | distinct ContainerID, PodName | join ( ContainerLog | where TimeGenerated > startTimestamp ) on ContainerID // at this point before the next pipe, columns from both tables are available to be "projected". Due to both // tables having a "Name" column, we assign an alias as PodName to one column which we actually want | project TimeGenerated, PodName, LogEntry, LogEntrySource | summarize by TimeGenerated, LogEntry | order by TimeGenerated desc
Pilih Jalankan. Setiap log gambar yang dihapus muncul di area Hasil .
Azure Kubernetes Service