Udostępnij za pośrednictwem


Korzystanie z kontenerów Windows HostProcess

Kontenery HostProcess/Privileged rozszerzają model kontenera systemu Windows, aby umożliwić szerszy zakres scenariuszy zarządzania klastrami Kubernetes. Kontenery HostProcess działają bezpośrednio na hoście i charakteryzują się działaniem oraz dostępem zbliżonym do zwykłego procesu. Kontenery HostProcess umożliwiają użytkownikom pakowanie i dystrybuowanie operacji zarządzania oraz funkcji wymagających dostępu do hosta przy zachowaniu metod przechowywania wersji i wdrażania udostępnianych przez kontenery.

Uprzywilejowany zestaw DaemonSet może przeprowadzać zmiany lub monitorować hosta systemu Linux na platformie Kubernetes, ale nie na hostach z systemem Windows. Kontenery HostProcess są odpowiednikiem podniesienia uprawnień hosta w systemie Windows.

Ograniczenia

  • Kontenery HostProcess wymagają platformy Kubernetes w wersji 1.23 lub nowszej.
  • Kontenery HostProcess wymagają containerd środowiska uruchomieniowego kontenera w wersji 1.6 lub nowszej.
  • Zasobniki HostProcess mogą zawierać tylko kontenery HostProcess z powodu ograniczenia systemu operacyjnego Windows. Kontenery systemu Windows bez uprawnień nie mogą współużytkować wirtualnej karty sieciowej z przestrzenią nazw ip hosta.
  • Kontenery HostProcess są uruchamiane jako proces na hoście. Jedyną izolacją tych kontenerów z hosta są ograniczenia zasobów nałożone na konto użytkownika HostProcess.
  • Izolacja systemu plików i izolacja funkcji Hyper-V nie są obsługiwane w przypadku kontenerów HostProcess.
  • Instalacja woluminów jest obsługiwana i instalowana w ramach woluminu kontenera. Zobacz Instalowanie woluminów.
  • Ograniczony zestaw kont użytkowników hosta jest domyślnie dostępny dla kontenerów procesów hosta. Zobacz Wybieranie konta użytkownika.
  • Limity zasobów, takie jak dysk, pamięć i liczba procesorów, działają tak samo jak procesy na hoście.
  • Nazwane instalacja potoku i gniazda domeny systemu Unix nie są bezpośrednio obsługiwane, ale można uzyskać dostęp do ich ścieżki hosta, na przykład \\.\pipe\*.

Uruchamianie obciążenia HostProcess

Aby używać funkcji HostProcess we wdrożeniu, ustaw hostProcess: true i hostNetwork: true:

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

Aby uruchomić przykładowe obciążenie korzystające z funkcji HostProcess w istniejącym klastrze usługi AKS z węzłami systemu Windows, utwórz hostprocess.yaml z następującą zawartością:

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

Użyj kubectl polecenia , aby uruchomić przykładowe obciążenie:

kubectl apply -f hostprocess.yaml

Powinny zostać wyświetlone następujące dane wyjściowe:

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

Sprawdź, czy obciążenie korzysta z funkcji kontenerów HostProcess, wyświetlając dzienniki zasobnika.

Użyj polecenia kubectl , aby znaleźć nazwę zasobnika w kube-system przestrzeni nazw.

$ kubectl get pods --namespace kube-system

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

Użyj kubectl log polecenia , aby wyświetlić dzienniki zasobnika i sprawdzić, czy zasobnik ma uprawnienia administratora:

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

Następne kroki

Aby uzyskać więcej informacji na temat kontenerów HostProcess i współtworzenia usługi Kubernetes przez firmę Microsoft, zobacz alpha in v1.22: Windows HostProcess Containers (Alfa w wersji 1.22: Kontenery hostów systemu Windows).