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


Песочница Pod с помощью службы Azure Kubernetes (AKS)

Чтобы обезопасить и защитить рабочие нагрузки контейнера от ненадежного или потенциально вредоносного кода, 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 или контейнерами в пространстве имен, работающими на том же узле.

Архитектура решения основана на следующих основных компонентах:

Развертывание песочницы Pod с помощью контейнеров Kata аналогично стандартному containerd рабочему процессу для развертывания контейнеров. Кластеры с поддержкой песочницы Pod включают определенный класс среды выполнения, на который можно ссылаться в манифесте pod (runtimeClassName: kata-vm-isolation).

Чтобы использовать эту функцию с pod, единственное отличие заключается в добавлении runtimeClassName в спецификацию pod. Когда pod использует kata-vm-isolation runtimeClass, гипервизор запускает легковесную виртуальную машину с собственным ядром для выполнения рабочей нагрузки.

Развертывание нового кластера

Выполните следующие действия, чтобы развернуть кластер Azure Linux AKS с помощью Azure CLI.

  1. Создайте кластер 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
    
  2. Выполните следующую команду, чтобы получить учетные данные для кластера Kubernetes. Используйте команду az aks get-credentials и замените значения для имени кластера и имени группы ресурсов.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Вывод списка всех модулей Pod во всех пространствах имен с помощью команды kubectl get pods .

    kubectl get pods --all-namespaces
    

Развертывание в существующем кластере

Чтобы использовать эту функцию с существующим кластером AKS, необходимо выполнить следующие требования:

  • Убедитесь, что кластер работает под управлением Kubernetes версии 1.27.0 и выше.

Используйте следующую команду, чтобы включить Pod-сандбоксинг, создав пул узлов для его размещения.

  1. Добавьте пул узлов в кластер 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
    
  2. Выполните команду 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, выполните следующие действия.

  1. Создайте файл с именем 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.

  2. Разверните модуль 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"]
  1. Чтобы получить доступ к контейнеру в кластере AKS, запустите сеанс оболочки, выполнив команду kubectl exec . В этом примере вы получите доступ к контейнеру внутри kata-pod.

    kubectl exec -it isolated-pod -- /bin/sh
    

    Kubectl подключается к вашему кластеру, выполняет /bin/sh внутри первого контейнера в isolated-pod, и передает входные и выходные потоки вашего терминала в процесс контейнера. Вы также можете запустить сеанс оболочки для контейнера, на котором размещен модуль pod, отличный от Kata, чтобы увидеть различия.

  2. После запуска сессии командной оболочки в контейнере из kata-pod, можно выполнить команды, чтобы убедиться, что контейнер kata запущен в песочнице Pod. Обратите внимание, что он имеет другую версию ядра по сравнению с контейнером без Kata за пределами песочницы.

    Чтобы просмотреть версию ядра, выполните следующую команду:

    uname -r
    

    Следующий пример напоминает выходные данные из ядра песочницы pod:

    [user]/# uname -r
    6.6.96.mshv1
    
  3. Запустите сеанс командной оболочки в контейнере из 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.