Песочница Pod (предварительная версия) с Служба Azure Kubernetes (AKS)
Чтобы защитить и защитить рабочие нагрузки контейнера от ненадежного или потенциально вредоносного кода, AKS теперь включает механизм под названием Песочница Pod (предварительная версия). Песочница Pod обеспечивает границу изоляции между приложением контейнера и общим ядром и вычислительными ресурсами узла контейнера. Например, ЦП, память и сеть. Песочница Pod дополняет другие меры безопасности или средства управления защитой данных с помощью общей архитектуры, чтобы обеспечить соответствие нормативным требованиям, отраслевым или нормативным требованиям к управлению для защиты конфиденциальной информации.
Эта статья поможет вам понять эту новую функцию и как ее реализовать.
Необходимые компоненты
Azure CLI версии 2.44.1 или более поздней версии. Запустите
az --version
, чтобы определить версию и запуститеaz upgrade
для обновления версии. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.Расширение
aks-preview
Azure CLI версии 0.5.123 или более поздней.Зарегистрируйте функцию в подписке
KataVMIsolationPreview
Azure.AKS поддерживает песочницу Pod (предварительная версия) в версии 1.24.0 и более поздних версий со всеми подключаемыми модулями сети AKS.
Чтобы управлять кластером Kubernetes, используйте клиент командной строки Kubernetes kubectl. Azure Cloud Shell поставляется с
kubectl
. Kubectl можно установить локально с помощью команды az aks install-cli .
Установка расширения Azure CLI для aks-preview
Внимание
Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Чтобы установить расширение aks-preview, выполните следующую команду:
az extension add --name aks-preview
Выполните следующую команду, чтобы обновить до последней версии выпущенного расширения:
az extension update --name aks-preview
Регистрация флага функции KataVMIsolationPreview
Зарегистрируйте флаг компонента KataVMIsolationPreview
, используя команду az feature register, как показано в указанном ниже примере.
az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Через несколько минут отобразится состояние Registered (Зарегистрировано). Проверьте состояние регистрации с помощью команды az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью команды az provider register:
az provider register --namespace "Microsoft.ContainerService"
Ограничения
Ниже приведены ограничения для этой предварительной версии песочницы Pod (предварительная версия):
Контейнеры Kata могут не достичь ограничений производительности операций ввода-вывода в секунду, которые традиционные контейнеры могут достигать Файлы Azure и высокопроизводительных локальных SSD.
Microsoft Defender для контейнеров не поддерживает оценку модулей pod среды выполнения Kata.
Сеть узла Kata не поддерживается.
AKS не поддерживает драйверы интерфейса хранилища контейнеров и драйвер CSI хранилища секретов в этом предварительном выпуске.
Принцип работы
Чтобы обеспечить эту функциональность в AKS, контейнеры Kata, работающие на узле контейнеров Linux Azure для стека AKS, обеспечивают изоляцию, применяемую оборудованием. Песочница pod расширяет преимущества изоляции оборудования, например отдельного ядра для каждого модуля Kata pod. Изоляция оборудования выделяет ресурсы для каждого модуля pod и не предоставляет им общий доступ к другим контейнерам Ката или пространства имен, работающим на одном узле.
Архитектура решения основана на следующих компонентах:
- Узел контейнера Azure Linux для AKS
- Гипервизор Microsoft Hyper-V
- Ядро Linux с настройкой Azure
- Монитор виртуальных машин с открытым исходным кодом (VMM)
- Интеграция с платформой контейнеров Kata
Развертывание песочницы Pod с помощью контейнеров Kata похоже на стандартный контейнерный рабочий процесс для развертывания контейнеров. Развертывание включает параметры kata-runtime, которые можно определить в шаблоне pod.
Чтобы использовать эту функцию с модулем pod, единственное различие заключается в добавлении runtimeClassName kata-mshv-vm-isolation в спецификацию pod.
Когда модуль pod использует среду выполнения изоляции kata-mshv-vm-isolationClass , он создает виртуальную машину для размещения контейнеров в качестве песочницы pod. Память виртуальной машины по умолчанию составляет 2 ГБ, а ЦП по умолчанию является одним ядром, если манифест ресурса контейнера (containers[].resources.limits
) не задает ограничение для ЦП и памяти. При указании ограничения для ЦП или памяти в манифесте ресурса контейнера виртуальная машина имеет containers[].resources.limits.cpu
1
аргумент для использования одного и xCPU и containers[].resources.limits.memory
с 2
аргументом, чтобы указать 2 ГБ + yMemory. Контейнеры могут использовать только ЦП и память для ограничений контейнеров. Они containers[].resources.requests
игнорируются в этой предварительной версии, пока мы работаем над сокращением нагрузки на ЦП и память.
Развертывание нового кластера
Выполните следующие действия, чтобы развернуть кластер Azure Linux AKS с помощью Azure CLI.
Создайте кластер AKS с помощью команды az aks create и укажите следующие параметры:
- --workload-runtime: укажите KataMshvVmIsolation , чтобы включить функцию песочницы Pod в пуле узлов. При использовании этого параметра эти другие параметры должны соответствовать следующим требованиям. В противном случае команда завершается ошибкой и сообщает о проблеме с соответствующими параметрами.
- --os-sku: AzureLinux. В этом предварительном выпуске поддерживается только os-sku Linux для Azure.
- --node-vm-size: любой размер виртуальной машины Azure, который является виртуальной машиной поколения 2 и поддерживает вложенную виртуализацию. Например, виртуальные машины Dsv3 .
В следующем примере создается кластер с именем myAKSCluster с одним узлом в myResourceGroup:
az aks create --name myAKSCluster \ --resource-group myResourceGroup \ --os-sku AzureLinux \ --workload-runtime KataMshvVmIsolation \ --node-vm-size Standard_D4s_v3 \ --node-count 1 \ --generate-ssh-keys
Выполните следующую команду, чтобы получить учетные данные для кластера Kubernetes. Используйте команду az aks get-credentials и замените значения для имени кластера и имени группы ресурсов.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Вывод списка всех модулей Pod во всех пространствах имен с помощью команды kubectl get pods .
kubectl get pods --all-namespaces
Развертывание в существующем кластере
Чтобы использовать эту функцию с существующим кластером AKS, необходимо выполнить следующие требования:
- Выполните действия, чтобы зарегистрировать флаг компонента KataVMIsolationPreview .
- Убедитесь, что кластер работает под управлением Kubernetes версии 1.24.0 и выше.
Используйте следующую команду, чтобы включить песочницу Pod (предварительная версия), создав пул узлов для размещения.
Добавьте пул узлов в кластер AKS с помощью команды az aks nodepool add . Укажите следующие параметры:
- --resource-group: введите имя существующей группы ресурсов, чтобы создать кластер AKS в.
- --cluster-name: введите уникальное имя кластера AKS, например myAKSCluster.
- --name: введите уникальное имя для пула узлов кластеров, например nodepool2.
- --workload-runtime: укажите KataMshvVmIsolation , чтобы включить функцию песочницы Pod в пуле узлов. Наряду с параметром
--workload-runtime
эти другие параметры должны соответствовать следующим требованиям. В противном случае команда завершается ошибкой и сообщает о проблеме с соответствующими параметрами.- --os-sku: AzureLinux. В предварительной версии поддерживается только ос-sku Ос Linux Azure.
- --node-vm-size: любой размер виртуальной машины Azure, который является виртуальной машиной поколения 2 и поддерживает вложенную виртуализацию. Например, виртуальные машины Dsv3 .
В следующем примере пул узлов добавляется в myAKSCluster с одним узлом в nodepool2 в myResourceGroup:
az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataMshvVmIsolation --node-vm-size Standard_D4s_v3
Выполните команду az aks update, чтобы включить песочницу pod (предварительная версия) в кластере.
az aks update --name myAKSCluster --resource-group myResourceGroup
Развертывание доверенного приложения
Чтобы продемонстрировать развертывание доверенного приложения в общем ядре в кластере AKS, выполните следующие действия.
Создайте файл с именем trusted-app.yaml , чтобы описать доверенный модуль pod, а затем вставьте следующий манифест.
kind: Pod apiVersion: v1 metadata: name: trusted spec: containers: - name: trusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Разверните модуль pod Kubernetes, выполнив команду kubectl apply и укажите файл trusted-app.yaml :
kubectl apply -f trusted-app.yaml
Выходные данные команды будут выглядеть примерно так:
pod/trusted created
Развертывание ненадежного приложения
Чтобы продемонстрировать развертывание ненадежного приложения в песочницу pod в кластере AKS, выполните следующие действия.
Создайте файл с именем untrusted-app.yaml , чтобы описать ненадежный pod, а затем вставьте следующий манифест.
kind: Pod apiVersion: v1 metadata: name: untrusted spec: runtimeClassName: kata-mshv-vm-isolation containers: - name: untrusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Значением для runtimeClassNameSpec является
kata-mhsv-vm-isolation
.Разверните модуль pod Kubernetes, выполнив команду kubectl apply и указав файл untrusted-app.yaml :
kubectl apply -f untrusted-app.yaml
Выходные данные команды будут выглядеть примерно так:
pod/untrusted created
Проверка конфигурации изоляции ядра
Чтобы получить доступ к контейнеру в кластере AKS, запустите сеанс оболочки, выполнив команду kubectl exec . В этом примере вы обращаетесь к контейнеру внутри недоверенного модуля pod.
kubectl exec -it untrusted -- /bin/bash
Kubectl подключается к кластеру, выполняется внутри первого контейнера в ненадежном модуле pod и перенаправляет
/bin/sh
входные и выходные потоки терминала в процесс контейнера. Вы также можете запустить сеанс оболочки для контейнера, на котором размещен доверенный модуль pod.После запуска сеанса оболочки в контейнер недоверенного модуля pod можно выполнить команды, чтобы убедиться, что ненадежный контейнер выполняется в песочнице pod. Вы заметите, что он имеет другую версию ядра по сравнению с доверенным контейнером за пределами песочницы.
Чтобы просмотреть версию ядра, выполните следующую команду:
uname -r
Следующий пример напоминает выходные данные из ядра песочницы pod:
root@untrusted:/# uname -r 5.15.48.1-8.cm2
Запустите сеанс оболочки в контейнер доверенного модуля pod, чтобы проверить выходные данные ядра:
kubectl exec -it trusted -- /bin/bash
Чтобы просмотреть версию ядра, выполните следующую команду:
uname -r
Следующий пример похож на выходные данные виртуальной машины, работающей под доверенным модулем, который отличается от недоверенного модуля pod, работающего в песочнице pod:
5.15.80.mshv2-hvl1.m2
Очистка
После завершения оценки этой функции, чтобы избежать расходов Azure, очистите ненужные ресурсы. Если вы развернули новый кластер в рамках оценки или тестирования, можно удалить кластер с помощью команды az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Если вы включили песочницу Pod (предварительная версия) в существующем кластере, можно удалить модули pod с помощью команды kubectl delete pod .
kubectl delete pod pod-name
Следующие шаги
Дополнительные сведения о выделенных узлах Azure для узлов с кластером AKS для использования аппаратной изоляции и контроля за событиями обслуживания платформы Azure.
Azure Kubernetes Service