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: true 및 hostNetwork: 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 컨테이너를 참조하세요.
Azure Kubernetes Service