Использование Image Clean для очистки уязвимых устаревших образов в кластере Служба Azure Kubernetes (AKS)
Обычно конвейеры используются для создания и развертывания образов в кластерах Службы Azure Kubernetes (AKS). Такой процесс хорошо подходит для создания образов, но при этом часто не учитываются оставленные устаревшие образы. Это может привести к раздуванию числа образов в узлах кластера. Эти образы могут содержать уязвимости, которые могут создавать проблемы с безопасностью. Чтобы удалить риски безопасности в кластерах, вы можете очистить эти неуправляемые образы. Очистка изображений вручную может быть интенсивной. Image Clean выполняет автоматическую идентификацию и удаление изображений, что снижает риск устаревших изображений и сокращает время, необходимое для их очистки.
Примечание.
Image Cleaner — это функция на основе ластика.
В кластере AKS имя функции и имя свойства — Image Cleaner
в то время как соответствующие имена модулей pod Image Cleaner содержатся Eraser
.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, вы можете создать бесплатную учетную запись.
- Azure CLI версии 2.49.0 или более поздней. Чтобы узнать, какая версия используется, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Ограничения
Image Cleaner пока не поддерживает пулы узлов Windows или виртуальные узлы AKS.
Принцип работы Image Cleaner
После включения Image Cleaner в кластере будет развернут диспетчер eraser-controller-manager
контроллеров.
С помощью Image Cleaner можно выбрать между ручным и автоматическим режимом и следующими параметрами конфигурации:
Варианты конфигурации
Имя | Описание | Обязательное поле |
---|---|---|
--enable-image-cleaner |
Включение функции "Очистка образов" для кластера AKS | Да, если не указан параметр отключения |
--disable-image-cleaner |
Отключение функции "Очистка образов" для кластера AKS | Да, если не указан параметр включения |
--image-cleaner-interval-hours |
Этот параметр определяет время (в часах) Очистка образа, используемого для выполнения. Значение по умолчанию для Azure CLI — одна неделя, минимальное значение — 24 часа, а максимальное — три месяца. | Не требуется для Azure CLI, необходимого для шаблона ARM или других клиентов |
Автоматический режим
После eraser-controller-manager
развертывания следующие действия будут выполняться автоматически.
- Он немедленно запускает процесс очистки и создает
eraser-aks-xxxxx
рабочие модули pod для каждого узла. - В каждом рабочем модуле pod существует три контейнера:
- Сборщик, который собирает неиспользуемые изображения.
- Триви-сканер, который использует триви для сканирования уязвимостей образа.
- Удаление, которое удаляет неиспользуемые образы с уязвимостями.
- После завершения процесса очистки рабочий модуль pod удаляется, а следующая запланированная очистка происходит в соответствии с заданным вами процессом
--image-cleaner-interval-hours
.
Режим вручную
Очистку можно активировать вручную, определив объект CRD.ImageList
Это активирует eraser-contoller-manager
создание eraser-aks-xxxxx
рабочих модулей pod для каждого узла и завершение процесса удаления вручную.
Примечание.
После отключения Очистки образа старая конфигурация по-прежнему существует. Это означает, что если функция снова включена без явной передачи конфигурации, существующее значение используется вместо значения по умолчанию.
Включение Очистки изображений в кластере AKS
Включение Image Cleaner в новом кластере
Включите Image Cleaner в новом кластере
az aks create
AKS с помощью команды с параметром--enable-image-cleaner
.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Включение Очистки образов в существующем кластере
Включите Image Cleaner в существующем кластере
az aks update
AKS с помощью команды.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Обновление интервала "Очистка образов" в новом или существующем кластере
Обновите интервал Очистки изображений в новом или существующем кластере
--image-cleaner-interval-hours
AKS с помощью параметра.# 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
Удаление изображений вручную с помощью Image Cleaner
Внимание
Для name
должно быть установлено значение imagelist
.
Вручную удалите изображение с помощью следующей
kubectl apply
команды. В этом примере изображение удаляетсяdocker.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
Очистка вручную — это одноразовая операция, которая активируется только при создании или imagelist
изменении существующего imagelist
. После удаления imagelist
образа не будет автоматически удалено.
Если необходимо активировать другую ручную очистку, необходимо создать новую imagelist
или внести изменения в существующую. Если вы хотите удалить тот же образ еще раз, необходимо создать новый imagelist
.
Удаление существующего объекта ImageList и создание нового
Удалите старый
imagelist
kubectl delete
с помощью команды.kubectl delete ImageList imagelist
Создайте новое имя
imagelist
с тем же именем образа. В следующем примере используется тот же образ, что и в предыдущем примере.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Изменение существующего списка образов
Измените существующую
imagelist
с помощьюkubectl edit
команды.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
При использовании режима eraser-aks-xxxxx
вручную модуль pod удаляется в течение 10 минут после завершения работы.
Список исключений изображений
Изображения, указанные в списке исключений, не удаляются из кластера. Image Cleaner поддерживает системные и пользовательские списки исключений. Не поддерживается изменение списка исключений системы.
Проверка списка исключений системы
Проверьте список исключений системы с помощью следующей
kubectl get
команды.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Создание определяемого пользователем списка исключений
Создайте пример JSON-файла для хранения исключенных изображений.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOF
configmap
Создайте образец JSON-файла с помощью следующейkubectl create
команды иkubectl label
команды.kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Отключение очистки образа
Отключите Image Cleaner в кластере
az aks update
с помощью команды с параметром--disable-image-cleaner
.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
Вопросы и ответы
Как проверить, какая версия Image Cleaner используется?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Поддерживает ли Image Cleaner другие сканеры уязвимостей помимо триви-сканера?
№
Можно ли указать уровни уязвимостей для очистки изображений?
№ Параметры по умолчанию для уровней уязвимостей:
LOW
,MEDIUM
,HIGH
иCRITICAL
Невозможно настроить параметры по умолчанию.
Как просмотреть изображения были удалены с помощью Image Clean?
Журналы образов хранятся в рабочем модуле eraser-aks-xxxxx
pod. Когда eraser-aks-xxxxx
он жив, можно выполнить следующие команды для просмотра журналов удаления:
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
Модуль eraser-aks-xxxxx
pod удаляется в течение 10 минут после завершения работы. Эти действия можно выполнить, чтобы включить надстройку Azure Monitor и использовать таблицу журналов pod Container Insights. После этого журналы будут сохранены, и их можно просмотреть даже eraser-aks-xxxxx
.
Убедитесь, что в кластере включен мониторинг Azure. Подробные инструкции см. в разделе "Включение Аналитики контейнеров" в кластерах AKS.
Получите идентификатор ресурса Log Analytics с помощью
az aks show
команды.az aks show --resource-group myResourceGroup --name myManagedCluster
Через несколько минут команда возвращает сведения о решении в формате JSON, включая идентификатор ресурса рабочей области:
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }
В портал Azure найдите идентификатор ресурса рабочей области, а затем выберите журналы.
Скопируйте следующий запрос в таблицу, заменив
name
наeraser-aks-xxxxx
(имя рабочего модуля pod):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
Выберите Выполнить. Все удаленные журналы изображений отображаются в области результатов .
Azure Kubernetes Service