Бөлісу құралы:


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

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

Развертывание песочницы 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.

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

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

  1. Добавьте пул узлов в кластер 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
    
  2. Выполните команду az aks update, чтобы включить песочницу pod (предварительная версия) в кластере.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    

Развертывание доверенного приложения

Чтобы продемонстрировать развертывание доверенного приложения в общем ядре в кластере AKS, выполните следующие действия.

  1. Создайте файл с именем 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"]
    
  2. Разверните модуль pod Kubernetes, выполнив команду kubectl apply и укажите файл trusted-app.yaml :

    kubectl apply -f trusted-app.yaml
    

    Выходные данные команды будут выглядеть примерно так:

    pod/trusted created
    

Развертывание ненадежного приложения

Чтобы продемонстрировать развертывание ненадежного приложения в песочницу pod в кластере AKS, выполните следующие действия.

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

  2. Разверните модуль pod Kubernetes, выполнив команду kubectl apply и указав файл untrusted-app.yaml :

    kubectl apply -f untrusted-app.yaml
    

    Выходные данные команды будут выглядеть примерно так:

    pod/untrusted created
    

Проверка конфигурации изоляции ядра

  1. Чтобы получить доступ к контейнеру в кластере AKS, запустите сеанс оболочки, выполнив команду kubectl exec . В этом примере вы обращаетесь к контейнеру внутри недоверенного модуля pod.

    kubectl exec -it untrusted -- /bin/bash
    

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

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

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

    uname -r
    

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

    root@untrusted:/# uname -r
    5.15.48.1-8.cm2
    
  3. Запустите сеанс оболочки в контейнер доверенного модуля 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.