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
.
- 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.
Görüntü Temizleyici henüz Windows düğüm havuzlarını veya AKS sanal düğümlerini desteklemez.
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:
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 |
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.
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.
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
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
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
Ö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.
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
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.
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.
Aşağıdaki
kubectl get
komutu kullanarak sistem dışlama listesini denetleyin.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
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
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
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Hayır
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ü 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.
Ad alanında
kube-system
çalışan kapsayıcıların günlükleri varsayılan olarak toplanmaz. Bu günlüklerinkube-system
toplanmasını sağlamak için yapılandırma haritasındaki ad alanınıexclude_namespaces
kaldırın ve yapılandırma eşlemesini uygulayın. Ayrıntılar için bkz . Kapsayıcı içgörüleri veri toplamayı yapılandırma.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 sorgulardan birini kopyalayın ve sorgu penceresine yapıştırın.
Kümeniz ContainerLogV2 şemasını kullanıyorsa aşağıdaki sorguyu kullanın. kullanmaya devam
ContainerLog
ediyorsanız ContainerlogV2'ye yükseltmeniz gerekir.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSource
kullanmaya
ContainerLog
devam etmek istiyorsanız, bunun yerine aşağıdaki sorguyu kullanın: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
Çalıştır seçin. Silinen görüntü günlükleri Sonuçlar alanında görünür.
Azure Kubernetes Service geri bildirimi
Azure Kubernetes Service, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin: