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
.
- 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.
Image Cleaner belum mendukung kumpulan simpul Windows atau simpul virtual AKS.
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:
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 |
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.
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.
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
Aktifkan Image Cleaner pada kluster AKS yang ada menggunakan
az aks update
perintah .az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
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
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
.
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
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.
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 menggunakan perintah berikut
kubectl get
.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
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 pada kluster Anda menggunakan
az aks update
perintah dengan--disable-image-cleaner
parameter .az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Tidak.
Tidak. Pengaturan default untuk tingkat kerentanan meliputi:
LOW
,MEDIUM
,HIGH
, danCRITICAL
Anda tidak dapat menyesuaikan pengaturan default.
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.
Log untuk kontainer yang berjalan di
kube-system
namespace tidak dikumpulkan secara default.kube-system
Hapus namespace dariexclude_namespaces
dalam peta konfigurasi dan terapkan peta konfigurasi untuk mengaktifkan pengumpulan log ini. Lihat Mengonfigurasi pengumpulan data wawasan Kontainer untuk detailnya.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 salah satu kueri berikut dan tempelkan ke jendela kueri.
Gunakan kueri berikut jika kluster Anda menggunakan skema ContainerLogV2. Jika Anda masih menggunakan
ContainerLog
, Anda harus meningkatkan ke ContainerlogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSource
Jika Anda ingin terus menggunakan
ContainerLog
, gunakan kueri berikut:let startTimestamp = ago(1h); KubePodInventory | where TimeGenerated > startTimestamp | project ContainerID, PodName=Name, Namespace | where PodName startswith "eraser-aks-" and Namespace == "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 .
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: