Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы обезопасить и защитить рабочие нагрузки контейнера от ненадежного или потенциально вредоносного кода, AKS теперь включает механизм под названием Pod Sandboxing. Песочница Pod обеспечивает границу изоляции между приложением контейнера и общим ядром и вычислительными ресурсами узла контейнера, такими как ЦП, память и сеть. Приложения разворачиваются в изолированных легковесных pod виртуальных машинах (VM). Pod Sandboxing дополняет другие меры безопасности или средства управления защитой данных в вашей общей архитектуре, чтобы помочь вам соответствовать требованиям регуляторов, отраслевых стандартов или норм управления для защиты конфиденциальной информации.
Эта статья поможет вам понять эту новую функцию и как ее реализовать.
Предварительные условия
Azure CLI версии 2.80.0 или более поздней. Выполните
az --version, чтобы узнать версию Azure CLI, иaz upgrade, чтобы обновить. Дополнительные сведения см. в шагах по установке Azure CLI.AKS поддерживает песочницу Pod в Kubernetes версии 1.27.0 и более поздней.
Чтобы управлять кластером Kubernetes, используйте клиент командной строки Kubernetes kubectl. Azure Cloud Shell поставляется с
kubectl. Kubectl можно установить локально с помощью команды az aks install-cli .
Ограничения
Ниже приведены ограничения, применимые к песочнице Pod:
Контейнеры Kata могут не достигать максимальной производительности операций ввода-вывода в секунду, которые традиционные контейнеры могут демонстрировать при работе с Azure Files и высокопроизводительными локальными SSD.
Microsoft Defender для контейнеров не поддерживает оценку pod среды выполнения Kata.
Доступ к сети узла Kata не поддерживается. Невозможно напрямую получить доступ к конфигурации сети узла из виртуальной машины.
Выделение ЦП и памяти в условиях песочницы Pod имеет другие аспекты по сравнению с
runc. Ссылка на разделы управления памятью на странице рекомендаций.
Принцип работы
Песочница Pod в AKS строится на основе проекта Kata Containers с открытым исходным кодом. Контейнеры Kata, работающие на узле контейнеров Linux для AKS, предоставляют изоляцию на основе виртуальных машин и отдельное ядро для каждого модуля pod. Изоляция pod позволяет пользователям выделять ресурсы для каждого pod и не делиться ими с другими контейнерами Kata или контейнерами в пространстве имен, работающими на том же узле.
Архитектура решения основана на следующих основных компонентах:
- Узел контейнера Azure Linux для AKS
- Гипервизор Microsoft Hyper-V
- Монитор виртуальных машин с открытым исходным кодом Cloud-Hypervisor (VMM)
- Интеграция с контейнером Kata для среды выполнения
Развертывание песочницы Pod с помощью контейнеров Kata аналогично стандартному containerd рабочему процессу для развертывания контейнеров. Кластеры с поддержкой песочницы Pod включают определенный класс среды выполнения, на который можно ссылаться в манифесте pod (runtimeClassName: kata-vm-isolation).
Чтобы использовать эту функцию с pod, единственное отличие заключается в добавлении runtimeClassName в спецификацию pod. Когда pod использует kata-vm-isolation runtimeClass, гипервизор запускает легковесную виртуальную машину с собственным ядром для выполнения рабочей нагрузки.
Развертывание нового кластера
Выполните следующие действия, чтобы развернуть кластер Azure Linux AKS с помощью Azure CLI.
Создайте кластер AKS с помощью команды az aks create и укажите следующие параметры:
- --workload-runtime: укажите KataVmIsolation , чтобы включить функцию песочницы Pod в пуле узлов. При использовании этого параметра эти другие параметры должны соответствовать следующим требованиям. В противном случае команда выполняется с ошибкой и сообщает о проблеме с параметрами.
- --os-sku: AzureLinux. Эта функция поддерживается только в варианте ОС Azure Linux.
- --node-vm-size: любой размер виртуальной машины Azure, который является виртуальной машиной поколения 2 и поддерживает вложенную виртуализацию. Например, виртуальные машины Dsv3.
В следующем примере создается кластер с именем myAKSCluster с одним узлом в myResourceGroup:
az aks create --name myAKSCluster \ --resource-group myResourceGroup \ --os-sku AzureLinux \ --workload-runtime KataVmIsolation \ --node-vm-size Standard_D4s_v3 \ --node-count 3 \ --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, необходимо выполнить следующие требования:
- Убедитесь, что кластер работает под управлением Kubernetes версии 1.27.0 и выше.
Используйте следующую команду, чтобы включить Pod-сандбоксинг, создав пул узлов для его размещения.
Добавьте пул узлов в кластер AKS с помощью команды az aks nodepool add . Укажите следующие параметры:
- --resource-group: введите имя существующей группы ресурсов, чтобы создать кластер AKS в.
- --cluster-name: введите уникальное имя кластера AKS, например myAKSCluster.
- --name: введите уникальное имя для пула узлов кластеров, например nodepool2.
-
--workload-runtime: укажите KataVmIsolation , чтобы включить функцию песочницы Pod в пуле узлов. Наряду с параметром
--workload-runtimeэти другие параметры должны соответствовать следующим требованиям. В противном случае команда завершается ошибкой и сообщает о проблеме с соответствующим параметром.- --os-sku: AzureLinux. Эта функция поддерживается только в варианте ОС Azure Linux.
- --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 KataVmIsolation --node-vm-size Standard_D4s_v3Выполните команду az aks update, чтобы включить песочницу для pod в кластере.
az aks update --name myAKSCluster --resource-group myResourceGroup
Развертывание приложений
С помощью песочницы Pod можно развернуть сочетание "обычных" модулей pod, которые не используют среду выполнения Kata вместе с модулями Pod Kata, которые используют среду выполнения. Основное различие между ними заключается в том, как они развёртываются: в спецификации Kata pod присутствует строка runtimeClassName: kata-vm-isolation.
Развертывание приложения с помощью среды выполнения Kata
Чтобы развернуть pod с средой выполнения Kata в кластере AKS, выполните следующие действия.
Создайте файл с именем kata-app.yaml для описания вашего kata pod, а затем вставьте следующий манифест.
kind: Pod apiVersion: v1 metadata: name: isolated-pod spec: runtimeClassName: kata-vm-isolation containers: - name: kata image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]Значением для runtimeClassNameSpec является
kata-vm-isolation.Разверните модуль pod Kubernetes, выполнив команду kubectl apply и укажите файл kata-app.yaml :
kubectl apply -f kata-app.yamlВыходные данные команды будут выглядеть примерно так:
pod/isolated-pod created
(Необязательно) Проверка конфигурации изоляции ядра
Если вы хотите проверить разницу между ядром подов с Kata и без Kata, вы можете развернуть другую задачу, которая не использует среду выполнения Kata.
kind: Pod
apiVersion: v1
metadata:
name: normal-pod
spec:
containers:
- name: non-kata
image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Чтобы получить доступ к контейнеру в кластере AKS, запустите сеанс оболочки, выполнив команду kubectl exec . В этом примере вы получите доступ к контейнеру внутри kata-pod.
kubectl exec -it isolated-pod -- /bin/shKubectl подключается к вашему кластеру, выполняет
/bin/shвнутри первого контейнера вisolated-pod, и передает входные и выходные потоки вашего терминала в процесс контейнера. Вы также можете запустить сеанс оболочки для контейнера, на котором размещен модуль pod, отличный от Kata, чтобы увидеть различия.После запуска сессии командной оболочки в контейнере из kata-pod, можно выполнить команды, чтобы убедиться, что контейнер kata запущен в песочнице Pod. Обратите внимание, что он имеет другую версию ядра по сравнению с контейнером без Kata за пределами песочницы.
Чтобы просмотреть версию ядра, выполните следующую команду:
uname -rСледующий пример напоминает выходные данные из ядра песочницы pod:
[user]/# uname -r 6.6.96.mshv1Запустите сеанс командной оболочки в контейнере из normal-pod, чтобы проверить выходные данные ядра.
kubectl exec -it normal-pod -- /bin/bashЧтобы просмотреть версию ядра, выполните следующую команду:
uname -rСледующий пример показывает выходные данные виртуальной машины, на которой запущен normal-pod, ядро которой отличается от ядра Kata pod, работающего в песочнице pod.
6.6.100.mshv1-1.azl3
Очистка
После завершения оценки этой функции, чтобы избежать расходов Azure, очистите ненужные ресурсы. Если вы развернули новый кластер в рамках оценки или тестирования, можно удалить кластер с помощью команды az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Если вы развернули песочницу Pod на существующем кластере, вы можете удалить поды с помощью команды kubectl delete pod.
kubectl get pods
kubectl delete pod <kata-pod-name>
Следующие шаги
- Дополнительные сведения о выделенных узлах Azure для узлов с кластером AKS для использования аппаратной изоляции и контроля за событиями обслуживания платформы Azure.
- Для дальнейшего изучения изоляции песочницы Pod и исследования сценариев рабочих нагрузок, попробуйте лаборатории песочницы Pod.