Azure Kubernetes Service (AKS) kümenizde güvenlik açığı bulunan eski görüntüleri temizlemek için Görüntü Temizleyici'yi kullanma
Azure Kubernetes Service (AKS) kümelerinde görüntü oluşturmak ve dağıtmak için işlem hatlarını kullanmak yaygın bir durumdır. Görüntü oluşturmak için harika olsa da, bu işlem genellikle geride kalan eski görüntüleri hesaba katıp küme düğümlerinde görüntü şişirmesine yol açabilir. Bu görüntüler güvenlik açıkları içerebilir ve bu da güvenlik sorunları oluşturabilir. Kümelerinizdeki güvenlik risklerini kaldırmak için bu başvurulmayan görüntüleri temizleyebilirsiniz. Görüntüleri el ile temizlemek zaman alabilir. Görüntü Temizleyici, eski görüntü riskini azaltan ve bunları temizlemek için gereken süreyi azaltan otomatik görüntü tanımlama ve kaldırma işlemlerini gerçekleştirir.
Not
Görüntü Temizleyici, Silgiyi temel alan bir özelliktir.
AKS kümesinde özellik adı ve özellik adı olurken Image Cleaner
, ilgili Görüntü Temizleyici podlarının adları içerir Eraser
.
Önkoşullar
- Azure aboneliği. Azure aboneliğiniz yoksa ücretsiz hesap oluşturabilirsiniz.
- Azure CLI sürüm 2.49.0 veya üzeri. Sürümünüzü bulmak için komutunu çalıştırın
az --version
. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
Sınırlamalar
Görüntü Temizleyici henüz Windows düğüm havuzlarını veya AKS sanal düğümlerini desteklemez.
Görüntü Temizleyici nasıl çalışır?
Görüntü Temizleyici'yi etkinleştirdikten sonra kümenize dağıtılan adlı eraser-controller-manager
bir denetleyici yöneticisi podu olacaktır.
Görüntü Temizleyici ile el ile ve otomatik mod ile aşağıdaki yapılandırma seçenekleri arasında seçim yapabilirsiniz:
Yapılandırma seçenekleri
Veri Akışı Adı | Açıklama | Gerekli |
---|---|---|
--enable-image-cleaner |
AKS kümesi için Görüntü Temizleyici özelliğini etkinleştirme | Evet, devre dışı bırak belirtilmediği sürece |
--disable-image-cleaner |
AKS kümesi için Görüntü Temizleyici özelliğini devre dışı bırakma | Evet, etkinleştirme belirtilmediği sürece |
--image-cleaner-interval-hours |
Bu parametre, Görüntü Temizleyici'nin çalıştırmak için kullandığı aralık süresini (saat cinsinden) belirler. Azure CLI için varsayılan değer bir hafta, en düşük değer 24 saat ve en fazla üç aydır. | Azure CLI için gerekli değildir, ARM şablonu veya diğer istemciler için gereklidir |
Otomatik mod
Dağıtıldıktan sonra eraser-controller-manager
aşağıdaki adımlar otomatik olarak izlenir:
- Temizleme işlemini hemen başlatır ve her düğüm için çalışan podları oluşturur
eraser-aks-xxxxx
. - Her çalışan podunda üç kapsayıcı vardır:
- Kullanılmayan görüntüleri toplayan bir toplayıcı.
- Görüntü güvenlik açıklarını taramak için trivy tarayıcı.
- Güvenlik açıkları olan kullanılmayan görüntüleri kaldıran bir kaldırıcı.
- Temizleme işlemi tamamlandıktan sonra çalışan podu silinir ve bir sonraki zamanlanmış temizleme sizin tanımladığınıza
--image-cleaner-interval-hours
göre gerçekleşir.
El ile mod
Bir CRD nesnesi tanımlayarak temizlemeyi el ile tetikleyebilirsiniz.ImageList
Bu, her düğüm için çalışan podları oluşturmak eraser-aks-xxxxx
ve el ile kaldırma işlemini tamamlamak için öğesini tetiklereraser-contoller-manager
.
Not
Görüntü Temizleyici devre dışı bırakıldıktan sonra eski yapılandırma hala var olur. Bu, yapılandırmayı açıkça geçirmeden özelliği yeniden etkinleştirirseniz varsayılan değer yerine mevcut değerin kullanıldığı anlamına gelir.
AKS kümenizde Görüntü Temizleyici'yi etkinleştirme
Yeni bir kümede Görüntü Temizleyici'yi etkinleştirme
parametresiyle komutunu kullanarak yeni bir AKS kümesinde
az aks create
Görüntü Temizleyici'yi--enable-image-cleaner
etkinleştirin.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Mevcut bir kümede Görüntü Temizleyici'yi etkinleştirme
komutunu kullanarak mevcut aks kümesinde Görüntü Temizleyici'yi
az aks update
etkinleştirin.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Yeni veya mevcut bir kümede Görüntü Temizleyici aralığını güncelleştirme
parametresini kullanarak yeni veya mevcut bir AKS kümesinde Görüntü Temizleyici aralığını güncelleştirin
--image-cleaner-interval-hours
.# 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
Görüntü Temizleyici'yi kullanarak görüntüleri el ile kaldırma
Önemli
name
, imagelist
olarak ayarlanmalıdır.
Aşağıdaki
kubectl apply
komutu kullanarak görüntüyü el ile kaldırın. Bu örnek, kullanılmayan görüntüyü kaldırırdocker.io/library/alpine:3.7.3
.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
El ile temizleme tek seferlik bir işlemdir ve yalnızca yeni imagelist
bir oluşturulduğunda veya var olan imagelist
içinde değişiklik yapıldığında tetiklenir. Görüntü silindikten sonra otomatik imagelist
olarak silinmez.
Başka bir el ile temizleme tetiklemeniz gerekiyorsa, yeni imagelist
bir tane oluşturmanız veya var olan bir temizlemede değişiklik yapmanız gerekir. Aynı görüntüyü yeniden kaldırmak istiyorsanız, yeni imagelist
bir oluşturmanız gerekir.
Mevcut ImageList'i silme ve yeni bir tane oluşturma
komutunu kullanarak eskisini
imagelist
kubectl delete
silin.kubectl delete ImageList imagelist
Aynı resim adına sahip yeni
imagelist
bir oluşturun. Aşağıdaki örnek, önceki örnekle aynı görüntüyü kullanır.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Mevcut ImageList'i değiştirme
komutunu kullanarak mevcut
imagelist
olanıkubectl edit
değiştirin.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
El ile modu kullanırken pod, eraser-aks-xxxxx
çalışma tamamlandıktan sonra 10 dakika içinde silinir.
Görüntü dışlama listesi
Dışlama listesinde belirtilen görüntüler kümeden kaldırılmaz. Görüntü Temizleyici, sistem ve kullanıcı tanımlı dışlama listelerini destekler. Sistem dışlama listesini düzenlemek desteklenmez.
Sistem dışlama listesini denetleyin
Aşağıdaki
kubectl get
komutu kullanarak sistem dışlama listesini denetleyin.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Kullanıcı tanımlı dışlama listesi oluşturma
Dışlanan görüntüleri içerecek örnek bir JSON dosyası oluşturun.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOF
Aşağıdaki
kubectl create
vekubectl label
komutunu kullanarak örnek JSON dosyasını kullanarak birconfigmap
oluşturun.kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Görüntü Temizleyiciyi Devre Dışı Bırak
parametresiyle komutunu kullanarak kümenizde Görüntü Temizleyici'yi
az aks update
--disable-image-cleaner
devre dışı bırakın.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
SSS
Görüntü Temizleyici'nin hangi sürümü kullandığını nasıl denetleyebilirim?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Görüntü Temizleyici, trivy-scanner dışında diğer güvenlik açığı tarayıcılarını destekliyor mu?
Hayır
Görüntülerin temizlenmesi için güvenlik açığı düzeylerini belirtebilir miyim?
Hayır Güvenlik açığı düzeyleri için varsayılan ayarlar şunlardır:
LOW
,MEDIUM
,HIGH
veCRITICAL
Varsayılan ayarları özelleştiremezsiniz.
Görüntü Temizleyicisi tarafından temizlenen görüntüleri gözden geçirme
Görüntü günlükleri çalışan podunda eraser-aks-xxxxx
depolanır. Etkin olduğunda eraser-aks-xxxxx
, silme günlüklerini görüntülemek için aşağıdaki komutları çalıştırabilirsiniz:
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
çalışma tamamlandıktan sonra 10 dakika içinde silinir. Azure İzleyici eklentisini etkinleştirmek ve Container Insights pod günlük tablosunu kullanmak için bu adımları izleyebilirsiniz. Bundan sonra, geçmiş günlükler depolanır ve bunları gözden geçirebilirsiniz hatta eraser-aks-xxxxx
silinir.
Kümenizde Azure İzleme'nin etkinleştirildiğinden emin olun. Ayrıntılı adımlar için bkz . AKS kümelerinde Container Insights'ı etkinleştirme.
komutunu kullanarak
az aks show
Log Analytics kaynak kimliğini alın.az aks show --resource-group myResourceGroup --name myManagedCluster
Birkaç dakika sonra komut, çalışma alanı kaynak kimliği de dahil olmak üzere çözümle ilgili JSON biçimli bilgileri döndürür:
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }
Azure portalında çalışma alanı kaynak kimliğini arayın ve Günlükler'i seçin.
Aşağıdaki sorguyu (çalışan pod adı) ile
eraser-aks-xxxxx
değiştirerekname
tabloya kopyalayın: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
Çalıştır seçin. Silinen görüntü günlükleri Sonuçlar alanında görünür.
Azure Kubernetes Service