Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обычно конвейеры используются для создания и развертывания образов в кластерах Службы 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 в новом кластере
В новом кластере AKS включите Image Cleaner, используя команду
az aks createс параметром--enable-image-cleaner.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Включение Очистки образов в существующем кластере
Включите Image Cleaner в существующем кластере
az aks updateAKS с помощью команды.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Обновите интервал очистки образов на новом или существующем кластере
** Обновите интервал очистки образов в кластере AKS, будь то новый или существующий, с помощью параметра
--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
Удаление изображений вручную с помощью 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 Cleaner?
Журналы образов хранятся в рабочем модуле 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 add-on и использовать таблицу журналов pod Container Insights. После этого журналы будут сохранены, и их можно просмотреть, даже если eraser-aks-xxxxx будет удалён.
Убедитесь, что в кластере включен мониторинг Azure. Подробные инструкции см. в разделе "Включение Аналитики контейнеров" в кластерах AKS.
По умолчанию журналы контейнеров, работающих в
kube-systemпространстве имен, не собираются. Удалите пространство именkube-systemизexclude_namespacesв ConfigMap и примените ConfigMap, чтобы включить сбор этих журналов. Дополнительные сведения см. в статье "Настройка сбора данных аналитики контейнеров".Получите идентификатор ресурса 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 найдите идентификатор ресурса рабочей области, а затем выберите журналы.
Скопируйте один из следующих запросов и вставьте его в окно запроса.
Используйте следующий запрос, если кластер использует схему ContainerLogV2. Если вы по-прежнему используете
ContainerLog, необходимо обновить до ContainerlogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSourceЕсли вы хотите продолжить использовать
ContainerLog, используйте следующий запрос: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
Выберите Выполнить. Все удаленные журналы изображений отображаются в области результатов .