Использование контейнеров Windows HostProcess

Контейнеры HostProcess и Privileged расширяют модель контейнеров Windows, чтобы обеспечить поддержку более широкого набора сценариев управления кластером Kubernetes. Контейнеры HostProcess выполняются непосредственно на узле и поддерживают поведение и доступ, аналогичный обычному процессу. С помощью контейнеров HostProcess пользователи могут упаковывать и распространять операции и функции управления, требующие доступа к хосту, при этом сохраняя методы управления версиями и развертывания, предоставляемые контейнерами.

Привилегированный DaemonSet может выполнять изменения или отслеживать узел Linux в Kubernetes, но не узлы Windows. Контейнеры HostProcess являются эквивалентом повышения прав узла в Windows.

Ограничения

  • Для контейнеров HostProcess требуется Kubernetes версии 1.23 или более поздней.
  • Для контейнеров HostProcess требуется среда выполнения контейнера containerd версии 1.6 или более поздней.
  • Модули pod HostProcess могут содержать только контейнеры HostProcess из-за ограничений операционной системы Windows. Контейнеры, не являющиеся привилегированными контейнерами Windows, не могут совместно использовать виртуальную сетевую карту с пространством имен IP-адресов узла.
  • Контейнеры HostProcess выполняются как процесс на узле. Единственная изоляция этих контейнеров от узла — ограничения ресурсов, введенные для учетной записи пользователя HostProcess.
  • Изоляция файловой системы и изоляция Hyper-V не поддерживаются для контейнеров HostProcess.
  • Подключения томов поддерживаются и подключаются к тому контейнера. См. "Подключения томов".
  • Ограниченный набор учетных записей пользователей узла по умолчанию доступен для контейнеров хост-процессов. См. "Выбор учетной записи пользователя".
  • Ограничения ресурсов, такие как количество дисков, памяти и ЦП, работают так же, как и процессы на узле.
  • Подключения именованных каналов и сокеты домена Unix не поддерживаются напрямую, но их можно получить по пути узла, например \\.\pipe\*.

Запуск рабочей нагрузки HostProcess

Чтобы использовать функции HostProcess в развертывании, задайте hostProcess: true и hostNetwork: true:

    spec:
      ...
      securityContext:
         windowsOptions:
           hostProcess: true
           ...
      hostNetwork: true
      containers:
      ...

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

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: privileged-daemonset
  namespace: kube-system
  labels:
    app: privileged-daemonset
spec:
  selector:
    matchLabels:
      app: privileged-daemonset
  template:
    metadata:
      labels:
        app: privileged-daemonset
    spec:
      nodeSelector:
        kubernetes.io/os: windows
      securityContext:
        windowsOptions:
          hostProcess: true
          runAsUserName: "NT AUTHORITY\\SYSTEM"
      hostNetwork: true
      containers:
        - name: powershell
          image: mcr.microsoft.com/powershell:lts-nanoserver-1809 # or lts-nanoserver-ltsc2022
          command:
            - powershell.exe
            - -Command
            - Start-Sleep -Seconds 2147483
      terminationGracePeriodSeconds: 0

Используйте kubectl для запуска примера рабочей нагрузки:

kubectl apply -f hostprocess.yaml

Вы должны увидеть следующий результат.

$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created

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

Используйте kubectl для поиска имени модуля pod в пространстве имен kube-system.

$ kubectl get pods --namespace kube-system

NAME                                  READY   STATUS    RESTARTS   AGE
...
privileged-daemonset-12345            1/1     Running   0          2m13s

Используйте kubectl log для просмотра журналов модуля pod и проверки наличия у модуля pod прав администратора:

$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:

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

Дополнительные сведения о контейнерах HostProcess и вкладе Корпорации Майкрософт в вышестоящий поток Kubernetes см. в статье Альфа в версии 1.22: Контейнеры Windows HostProcess.