Usar contêineres do Windows HostProcess

Os contêineres do HostProcess/Privileged estendem o modelo de contêiner do Windows para permitir uma maior variedade de cenários de gerenciamento de cluster do Kubernetes. Os contêineres HostProcess são executados diretamente no host e mantêm o comportamento e o acesso semelhantes aos de um processo regular. Com eles, os usuários podem empacotar e distribuir operações de gerenciamento e funcionalidades que exigem acesso ao host e manter os métodos de controle de versão e de implantação fornecidos pelos contêineres.

Um DaemonSet privilegiado pode realizar alterações ou monitorar um host Linux no Kubernetes, mas não hosts Windows. Os contêineres HostProcess são o equivalente do Windows à elevação de host.

Limitações

  • Os contêineres HostProcess exigem o Kubernetes 1.23 ou superior.
  • Eles também exigem um runtime de contêiner containerd 1.6 ou superior.
  • Os pods de HostProcess só podem conter contêineres HostProcess devido a uma limitação no sistema operacional Windows. Contêineres Windows não privilegiados não podem compartilhar uma vNIC com o namespace de IP do host.
  • Os contêineres HostProcess são executados como um processo no host. O único isolamento que esses contêineres têm do host são as restrições de recurso impostas à conta de usuário do HostProcess.
  • O isolamento do sistema de arquivos e do Hyper-V não têm suporte para os contêineres do HostProcess.
  • As montagens de volume têm suporte e são feitas sob o volume do contêiner. Veja Montagens de volume.
  • Um conjunto limitado de contas de usuário de host está disponível para contêineres HostProcess por padrão. Veja Como escolher uma conta de usuário.
  • Os limites de recursos, como disco, memória e contagem de CPU, funcionam como os processos no host.
  • Não há suporte direto para montagens de pipe nomeado e soquetes de domínio Unix, mas podem ser acessados em seu respectivo caminho do host, por exemplo \\.\pipe\*.

Executar uma carga de trabalho do HostProcess

Para usar os recursos HostProcess com sua implantação, defina hostProcess: verdadeiro e hostNetwork: verdadeiro:

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

Para executar uma carga de trabalho de exemplo que usa recursos HostProcess em um cluster existente do AKS com nós do Windows, crie hostprocess.yaml com os seguintes conteúdos:

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

Use kubectl para executar a carga de trabalho de exemplo:

kubectl apply -f hostprocess.yaml

A seguinte saída deve ser exibida:

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

Verifique se sua carga de trabalho usa os recursos dos contêineres HostProcess, exibindo os logs do pod.

Use kubectl para localizar o nome do pod no namespace kube-system.

$ kubectl get pods --namespace kube-system

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

Use kubectl log para exibir os logs do pod e verificar se ele tem direitos de administrador:

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

Próximas etapas

Para mais informações sobre os contêineres HostProcess e a contribuição da Microsoft para o upstream do Kubernetes, consulte Alpha v1.22: contêineres HostProcess do Windows.