다음을 통해 공유


Windows HostProcess 컨테이너 사용

HostProcess/Privileged 컨테이너는 Windows 컨테이너 모델을 확장하여 보다 광범위한 Kubernetes 클러스터 관리 시나리오를 사용할 수 있도록 합니다. HostProcess 컨테이너는 호스트에서 직접 실행되며 일반 프로세스와 유사한 동작 및 액세스를 유지 관리합니다. HostProcess 컨테이너를 사용하면 컨테이너에서 제공하는 버전 관리 및 배포 방법을 유지하면서 호스트 액세스가 필요한 관리 작업 및 기능을 패키지하고 배포할 수 있습니다.

권한 있는 DaemonSet은 Kubernetes에서 변경 내용을 수행하거나 Linux 호스트를 모니터링할 수 있지만 Windows 호스트는 모니터링할 수 없습니다. HostProcess 컨테이너는 호스트 권한 상승에 해당하는 Windows입니다.

제한 사항

  • HostProcess 컨테이너에는 Kubernetes 1.23 이상이 필요합니다.
  • HostProcess 컨테이너에는 containerd 1.6 이상의 컨테이너 런타임이 필요합니다.
  • HostProcess Pod에는 Windows 운영 체제의 제한 사항으로 인해 HostProcess 컨테이너만 포함될 수 있습니다. 권한이 없는 Windows 컨테이너는 호스트 IP 네임스페이스와 vNIC를 공유할 수 없습니다.
  • HostProcess 컨테이너는 호스트에서 프로세스로 실행됩니다. 이러한 컨테이너가 호스트에서 갖는 유일한 격리는 HostProcess 사용자 계정에 적용되는 리소스 제약 조건입니다.
  • HostProcess 컨테이너에는 파일 시스템 격리 및 Hyper-V 격리가 지원되지 않습니다.
  • 볼륨 탑재가 지원되며 컨테이너 볼륨 아래에 탑재됩니다. 볼륨 탑재를 참조하세요.
  • 호스트 사용자 계정의 제한된 세트는 기본적으로 호스트 프로세스 컨테이너에 사용할 수 있습니다. 사용자 계정 선택을 참조하세요.
  • 디스크, 메모리 및 CPU 수와 같은 리소스 제한은 호스트의 프로세스와 동일한 방식으로 작동합니다.
  • 명명된 파이프 탑재 및 Unix 도메인 소켓은 직접 지원되지 않지만 호스트 경로(예: \\.\pipe\*)에서 액세스할 수 있습니다.

HostProcess 워크로드 실행

배포에서 HostProcess 기능을 사용하려면 hostProcess: truehostNetwork: true를 설정합니다.

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

Windows 노드가 있는 기존 AKS 클러스터에서 HostProcess 기능을 사용하는 예제 워크로드를 실행하려면 다음 콘텐츠를 사용하여 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

Pod의 로그를 확인하여 워크로드가 HostProcess 컨테이너의 기능을 사용하는지 확인합니다.

kubectl을 사용하여 kube-system 네임스페이스에서 Pod의 이름을 찾습니다.

$ 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 업스트림에 대한 Microsoft의 기여에 대한 자세한 내용은 v1.22의 Alpha: Windows HostProcess 컨테이너를 참조하세요.