Использование средств защиты развертывания для применения рекомендаций в Служба Azure Kubernetes (AKS) (предварительная версия)
В этой статье показано, как использовать средства защиты развертывания для применения рекомендаций в кластере Служба Azure Kubernetes (AKS).
Обзор
На протяжении всего жизненного цикла разработки часто возникают ошибки, проблемы и другие проблемы, если первоначальное развертывание ресурсов Kubernetes включает неправильные настройки. Чтобы облегчить бремя разработки Kubernetes, Служба Azure Kubernetes (AKS) предлагает средства защиты развертывания (предварительная версия). Средства защиты развертывания применяют рекомендации Kubernetes в кластере AKS с помощью элементов управления Политика Azure.
Средства защиты развертывания обеспечивают два уровня конфигурации:
Warning
: отображает предупреждающие сообщения в терминале кода, чтобы предупредить вас о любых несоответствующих конфигурациях кластера, но по-прежнему позволяет выполнять запрос.Enforcement
: применяет соответствующие конфигурации, запрещая и изменяя развертывания, если они не соответствуют рекомендациям.
После настройки защиты развертывания для предупреждения или принудительного применения развертывание защищает кластеры программным образом при создании или обновлении для соответствия требованиям. Средства защиты развертывания также отображают агрегированные сведения о соответствии для рабочих нагрузок на уровне ресурсов с помощью панели мониторинга соответствия Политика Azure в портал Azure или в интерфейсе командной строки или терминале. Выполнение несоответствующей рабочей нагрузки указывает, что кластер не соответствует рекомендациям и что рабочие нагрузки в кластере подвержены риску возникновения проблем, вызванных конфигурацией кластера.
Внимание
Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Необходимые компоненты
Необходимо включить надстройку Политика Azure для AKS. Дополнительные сведения см. в разделе "Включить Политика Azure" в кластере AKS.
Чтобы настроить защиту развертывания, необходимо иметь версию или более позднюю версию
2.0.0b1
aks-preview
расширения. Чтобы установить расширение, ознакомьтесь с расширением CLI aks-preview. Мы также рекомендуем обновить Azure CLI, чтобы убедиться, что установлена последняя версия.Чтобы создать и изменить конфигурацию для защиты развертывания, вам потребуется подписка со следующими разрешениями в кластере AKS:
- Microsoft.Authorization/policyAssignments/write
- Microsoft.Authorization/policyAssignments/read
Необходимо зарегистрировать флаг компонента защиты развертывания. Сведения о регистрации флага функции см. в разделе "Регистрация флага функции" для защиты развертывания.
Установка расширения интерфейса командной строки предварительной версии AKS
aks-preview
Установите расширение CLI с помощьюaz extension add
команды.az extension add --name aks-preview
Обновите расширение, чтобы убедиться, что установлена последняя версия с помощью
az extension update
команды.az extension update --name aks-preview
Регистрация флага функции защиты развертывания
SafeguardsPreview
Зарегистрируйте флаг компонента с помощьюaz feature register
команды.az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
Через несколько минут отобразится состояние Registered (Зарегистрировано).
Проверьте состояние регистрации с помощью
az feature show
команды.az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider register
команды.az provider register --namespace Microsoft.ContainerService
Политики защиты развертывания
Примечание.
RootfilesystemInitContainers
В настоящее время политики ReadOnlyRootFilesystem
доступны только в Linux.
В следующей таблице перечислены политики, которые становятся активными и целевыми ресурсами Kubernetes при включении защиты развертывания. В настоящее время доступные средства защиты развертывания можно просмотреть в портал Azure как определение Политика Azure или встроенные определения Политика Azure для Служба Azure Kubernetes. Цель этой коллекции — создать общий и универсальный список рекомендаций, применимых к большинству пользователей и вариантов использования.
Политика защиты развертывания | Целевой ресурс Kubernetes | Результат мутации при наличии |
---|---|---|
[предварительная версия]: не удается изменить отдельные узлы | Узел | Н/П |
Ограничения ресурсов ЦП и памяти контейнеров кластера Kubernetes не должны превышать указанные ограничения. | Объект pod | Задает ограничения ресурсов ЦП на 500 млн, если не задано и не устанавливает ограничения памяти на 500Mi, если путь отсутствует |
[предварительная версия]: должен иметь набор правил защиты от сходства | Развертывание, StatefulSet, ReplicationController, ReplicaSet | Н/П |
[предварительная версия]: нет конкретных меток AKS | Развертывание, StatefulSet, набор реплик | Н/П |
Контейнеры в кластере Kubernetes должны использовать только разрешенные образы | Объект pod | Н/П |
[предварительная версия]: зарезервированный пул системных фрагментов | Узел | Удаляет CriticalAddonsOnly фрагмент из пула узлов пользователя, если он не задан. AKS использует запятую CriticalAddonsOnly , чтобы сохранить модули pod клиента от системного пула. Эта конфигурация обеспечивает четкое разделение между компонентами AKS и клиентскими модулями pod и предотвращает вытеснение модулей pod клиентов, которые не допускают CriticalAddonsOnly их. |
Убедитесь, что в контейнерах кластера настроены пробы проверки готовности или активности | Объект pod | Н/П |
Кластеры Kubernetes должны использовать драйвер StorageClass для интерфейса хранилища контейнеров (CSI) | StorageClass | Н/П |
[Предварительная версия]. Контейнеры кластеров Kubernetes должны извлекать изображения только при наличии секретов извлечения образа. | Объект pod | Н/П |
[предварительная версия]: кластер Kubernetes должен реализовать точные бюджеты нарушений pod | Развертывание, Реплика, StatefulSet | Задает maxUnavailable для ресурса PodDisruptionBudget значение 1. |
[Предварительная версия]: службы кластеров Kubernetes должны использовать уникальные селекторы | Service | Н/П |
[предварительная версия]: ReadOnlyRootFilesystem в спецификации Pod задано значение true |
Объект pod | Задает readOnlyRootFilesystem в спецификации Pod значение, true если оно не задано. Эта конфигурация предотвращает запись контейнеров в корневая файловая система. |
[предварительная версия]: RootfilesystemInitContainers в спецификации Pod задано значение true |
Объект pod | Задает rootFilesystemInitContainers в спецификации Pod значение, true если оно не задано. |
[предварительная версия]: образы контейнеров кластера Kubernetes не должны содержать последний тег образа | Развертывание, StatefulSet, ReplicationController, ReplicaSet | Н/П |
[предварительная версия]: образы контейнеров кластера Kubernetes должны включать престопный перехватчик | Развертывание, StatefulSet, ReplicationController, ReplicaSet | Н/П |
Если вы хотите отправить идею или запрос на защиту развертывания, откройте проблему в репозитории AKS GitHub и добавьте [deployment safeguards request]
в начало заголовка.
Включение защиты развертывания
Примечание.
Если вы впервые включили Политика Azure использовать средства защиты развертывания, может потребоваться ждать до 20 минут, пока Политика Azure вступают в силу.
Использование уровня защиты Enforcement
развертывания означает, что вы выбираете развертывания, которые блокируются и мутируются. Прежде чем включить Enforcement
эти политики, рассмотрите, как эти политики могут работать с кластером AKS.
Включение защиты развертывания в новом кластере
Включите защиту развертывания в новом кластере с помощью az aks create
команды с --safeguards-level
флагами и --safeguards-version
флагами.
Если вы хотите получать предупреждения о несоответствии, задайте для --safeguards-level
нее значение Warning
. Если вы хотите запретить или изменить все несоответствующие развертывания, задайте для него значение Enforcement
. Чтобы получить предупреждения, задайте для параметра --safeguards-level
"Предупреждение". Чтобы запретить или изменить все развертывания, которые не соответствуют гарантиям развертывания, задайте --safeguards-level
для параметра "Принудительное применение". Чтобы задать версию защиты развертывания, используйте --safeguards-version
флаг. В настоящее время версия 2.0.0 — это последняя версия средств защиты развертывания.
az aks create \
--name myAKSCluster \
--resource-group myResourceGroup \
--enable-addons azure-policy \
--safeguards-level Warning \
--safeguards-version v2.0.0 \
--generate-ssh-keys
Включение защиты развертывания в существующем кластере
Включите защиту развертывания в существующем кластере с включенным Политика Azure надстройкой с помощью az aks update
команды с --safeguards-level
флагами и --safeguards-version
флагами. Если вы хотите получать предупреждения о несоответствии, задайте для --safeguards-level
нее значение Warning
. Если вы хотите запретить или изменить все несоответствующие развертывания, задайте для него значение Enforcement
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0
Если вы хотите обновить уровень защиты развертывания существующего кластера, используйте az aks update
команду с установленным флагом --safeguards-level
Warning
или Enforcement
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement
Исключение пространств имен
Вы также можете исключить определенные пространства имен из средств защиты развертывания. При исключении пространства имен действие в этом пространстве имен не влияет на предупреждения или принудительное применение.
Например, чтобы исключить пространства имен и ns2
использовать разделенный запятыми список пространств ns1
имен с --safeguards-excluded-ns
флагом, как показано в следующем примере:
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2
Обновление версии защиты развертывания
Примечание.
версия 2.0.0 — это последняя версия защиты развертывания.
Обновите версию развертывания, используя az aks update
команду с флагом --safeguards-version
, установленным для новой версии. В следующем примере обновляется существующий кластер для использования версии 2.0.0.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0
Проверка соответствия между кластерами
После развертывания манифеста Kubernetes вы увидите предупреждения или потенциальное сообщение об отказе в интерфейсе командной строки или терминале, если кластер не соответствует гарантиям развертывания, как показано в следующих примерах:
Предупреждения
$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created
Принуждение
При изменении безопасности Enforcement
развертывания уровень мутирует ресурсы Kubernetes при необходимости. Однако ресурсы Kubernetes по-прежнему должны передавать все меры безопасности для успешного развертывания. Если какие-либо политики защиты завершаются ошибкой, ресурс запрещен и не будет развернут.
$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
Если ресурсы Kubernetes соответствуют применимым гарантиям изменения и соответствуют всем другим требованиям защиты, они будут успешно развернуты, как показано в следующем примере:
$ kubectl apply -f pod.yml
pod/my-pod created
Проверка соответствия между кластерами с помощью панели мониторинга Политика Azure
Чтобы проверить, применены ли гарантии развертывания и проверить соответствие кластера, перейдите на страницу портал Azure кластера и выберите политики, а затем выберите пункт Политика Azure.
В списке политик и инициатив выберите инициативу, связанную с защитой развертывания. Отображается панель мониторинга, показывающая состояние соответствия в кластере AKS.
Примечание.
Чтобы правильно оценить соответствие в кластере AKS, Политика Azure инициатива должна быть ограничена группой ресурсов кластера.
Отключение защиты развертывания
Отключите защиту развертывания в кластере az aks update
с помощью команды и задайте для нее --safeguards-level
значение Off
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off
--
Вопросы и ответы
Впервые включена защита развертывания с помощью Политика Azure. Почему я не вижу никаких предупреждений? Почему мои модули pod не отклоняются?
Политика Azure может занять до 35 минут, чтобы синхронизироваться с кластером после первого включения.
Я только что переключился с предупреждения на принудительное применение. Будет ли это в силу немедленно?
При переключении уровней защиты развертывания может потребоваться ждать до 15 минут, пока новый уровень вступит в силу.
Можно ли создать собственные мутации?
№ Если у вас есть идея о защите, откройте проблему в репозитории AKS GitHub и добавьте [deployment safeguards request]
в начало заголовка.
Можно ли выбрать и выбрать изменения, которые я хочу в принудительном применении?
№ Защита развертывания — это все или ничего. После включения предупреждения или принудительного применения все меры защиты будут активными.
Почему мой ресурс развертывания признался, несмотря на то, что он не следует рекомендациям?
Средства защиты развертывания применяют стандарты рекомендаций с помощью Политика Azure элементов управления и имеют политики, которые проверяют ресурсы Kubernetes. Чтобы оценить и применить компоненты кластера, Политика Azure расширяет Gatekeeper. Принудительное применение gatekeeper также в настоящее время работает в fail-open
модели. Так как нет никакой гарантии, что Gatekeeper будет отвечать на наш сетевой вызов, мы убедимся, что в этом случае проверка пропускается, чтобы запрет не блокировал развертывания.
Дополнительные сведения см. в статье "Проверка рабочей нагрузки" в Gatekeeper.
Следующие шаги
- Узнайте больше о рекомендациях по работе с кластером AKS.
Azure Kubernetes Service