Поделиться через


Использование средств защиты развертывания для применения рекомендаций в Служба 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

  1. aks-preview Установите расширение CLI с помощью az extension add команды.

    az extension add --name aks-preview
    
  2. Обновите расширение, чтобы убедиться, что установлена последняя версия с помощью az extension update команды.

    az extension update --name aks-preview
    

Регистрация флага функции защиты развертывания

  1. SafeguardsPreview Зарегистрируйте флаг компонента с помощью az feature register команды.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Через несколько минут отобразится состояние Registered (Зарегистрировано).

  2. Проверьте состояние регистрации с помощью az feature show команды.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов 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.

Следующие шаги