Použití kontejnerů Windows HostProcess

Kontejnery HostProcess / Privilegované kontejnery rozšiřují model kontejnerů Windows tak, aby umožňovaly širší škálu scénářů správy clusterů Kubernetes. Kontejnery HostProcess běží přímo na hostiteli a udržují chování a přístup podobné normálnímu procesu. Kontejnery HostProcess umožňují uživatelům zabalit a distribuovat operace správy a funkce, které vyžadují přístup k hostiteli, a přitom zachovat metody správy verzí a nasazení poskytované kontejnery.

Privilegovaný daemonSet může provádět změny nebo monitorovat hostitele s Linuxem v Kubernetes, ale ne na hostitelích s Windows. Kontejnery HostProcess jsou ekvivalentem windows ke zvýšení oprávnění hostitele.

Omezení

  • Kontejnery HostProcess vyžadují Kubernetes verze 1.23 nebo vyšší.
  • Kontejnery HostProcess vyžadují containerd modul runtime kontejneru 1.6 nebo vyšší.
  • Pody HostProcess můžou kvůli omezení operačního systému Windows obsahovat pouze kontejnery HostProcess. Neprivilegované kontejnery Windows nemůžou sdílet virtuální síťovou kartu s oborem názvů IP adresy hostitele.
  • Kontejnery HostProcess se na hostiteli spouští jako proces. Jedinou izolací, kterou mají tyto kontejnery od hostitele, jsou omezení prostředků vynucená uživatelským účtem HostProcess.
  • Izolace systému souborů a izolace Hyper-V se pro kontejnery HostProcess nepodporují.
  • Připojení svazků jsou podporovaná a připojují se pod svazek kontejneru. Viz Připojení svazků.
  • Ve výchozím nastavení je pro kontejnery hostitelských procesů k dispozici omezená sada uživatelských účtů hostitele. Viz Volba uživatelského účtu.
  • Omezení prostředků, jako jsou disky, paměť a počet procesorů, fungují stejně jako procesy na hostiteli.
  • Připojení pojmenovaných kanálů a sokety domény Unix nejsou přímo podporované, ale jsou přístupné z cesty hostitele, například \\.\pipe\*.

Spuštění úlohy HostProcess

Pokud chcete ve svém nasazení používat funkce HostProcess, nastavte hostProcess: true a hostNetwork: true:

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

Pokud chcete spustit ukázkovou úlohu, která používá funkce HostProcess v existujícím clusteru AKS s uzly Windows, vytvořte hostprocess.yaml s následujícím obsahem:

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

Použijte kubectl ke spuštění ukázkové úlohy:

kubectl apply -f hostprocess.yaml

Měl by se zobrazit následující výstup:

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

Zobrazením protokolů podu ověřte, že vaše úloha používá funkce kontejnerů HostProcess.

Slouží kubectl k vyhledání názvu podu v kube-system oboru názvů.

$ kubectl get pods --namespace kube-system

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

Pomocí příkazu zobrazte kubectl log protokoly podu a ověřte, že má pod práva správce:

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

Další kroky

Další informace o kontejnerech HostProcess a příspěvku Microsoftu k upstreamu Kubernetes najdete v tématu Alfa ve verzi 1.22: Kontejnery Windows HostProcess.