Windows 파드와 컨테이너용 RunAsUserName 구성하기

Windows 파드와 컨테이너용 RunAsUserName 구성하기

이 페이지는 Windows 노드에서 실행될 파드와 컨테이너에 대해 runAsUserName 설정을 사용하는 방법을 보여줘요. 이것은 Linux 전용 runAsUser 설정과 대략적으로 동등한 것으로, 기본 사용자 이름이 아닌 다른 사용자 이름으로 컨테이너 안에서 애플리케이션을 실행할 수 있게 해줘요.

출처: 문서

본문

시작하기 전에

Kubernetes 클러스터가 있어야 하고 kubectl 명령줄 도구가 클러스터와 통신하도록 구성되어 있어야 해요. 클러스터에 Windows 워크로드를 실행하는 컨테이너가 있는 파드가 스케줄링될 Windows 워커 노드가 있어야 해요.

파드의 사용자 이름 설정

파드의 컨테이너 프로세스를 실행할 사용자 이름을 지정하려면, Pod 사양에 PodSecurityContextsecurityContext 필드를 포함하고, 그 안에 runAsUserName 필드를 담은 WindowsSecurityContextOptionswindowsOptions 필드를 넣어요.

파드에 지정하는 Windows 보안 컨텍스트 옵션은 파드의 모든 컨테이너와 init 컨테이너에 적용돼요.

다음은 runAsUserName 필드가 설정된 Windows 파드의 구성 파일이에요.

apiVersion: v1
kind: Pod
metadata:
  name: run-as-username-pod-demo
spec:
  securityContext:
    windowsOptions:
      runAsUserName: "ContainerUser"
  containers:
  - name: run-as-username-demo
    image: mcr.microsoft.com/windows/servercore:ltsc2019
    command: ["ping", "-t", "localhost"]
  nodeSelector:
    kubernetes.io/os: windows

파드를 생성해요.

kubectl apply -f https://k8s.io/examples/windows/run-as-username-pod.yaml

파드의 컨테이너가 실행 중인지 확인해요.

kubectl get pod run-as-username-pod-demo

실행 중인 컨테이너에 셸로 들어가요.

kubectl exec -it run-as-username-pod-demo -- powershell

셸이 올바른 사용자 이름으로 실행 중인지 확인해요.

echo $env:USERNAME

출력은 다음과 같아야 해요.

ContainerUser

컨테이너의 사용자 이름 설정

컨테이너의 프로세스를 실행할 사용자 이름을 지정하려면, Container 매니페스트에 SecurityContextsecurityContext 필드를 포함하고, 그 안에 runAsUserName 필드를 담은 windowsOptions 필드를 넣어요.

컨테이너에 지정하는 Windows 보안 컨텍스트 옵션은 그 개별 컨테이너에만 적용되며, 파드 수준에서 한 설정을 덮어써요.

다음은 컨테이너가 하나인 파드의 구성 파일로, runAsUserName 필드가 파드 수준과 컨테이너 수준 모두에 설정되어 있어요.

apiVersion: v1
kind: Pod
metadata:
  name: run-as-username-container-demo
spec:
  securityContext:
    windowsOptions:
      runAsUserName: "ContainerUser"
  containers:
  - name: run-as-username-demo
    image: mcr.microsoft.com/windows/servercore:ltsc2019
    command: ["ping", "-t", "localhost"]
    securityContext:
        windowsOptions:
            runAsUserName: "ContainerAdministrator"
  nodeSelector:
    kubernetes.io/os: windows

파드를 생성해요.

kubectl apply -f https://k8s.io/examples/windows/run-as-username-container.yaml

파드의 컨테이너가 실행 중인지 확인해요.

kubectl get pod run-as-username-container-demo

실행 중인 컨테이너에 셸로 들어가요.

kubectl exec -it run-as-username-container-demo -- powershell

셸이 올바른 사용자 이름(컨테이너 수준에서 설정된 이름)으로 실행 중인지 확인해요.

echo $env:USERNAME

출력은 다음과 같아야 해요.

ContainerAdministrator

Windows 사용자 이름 제한 사항

이 기능을 사용하려면 runAsUserName 필드에 설정된 값이 유효한 사용자 이름이어야 해요. 다음 형식이어야 해요: DOMAIN\USER, 여기서 DOMAIN\은 선택 사항이에요. Windows 사용자 이름은 대소문자를 구분하지 않아요. 또한 DOMAINUSER에 대해 몇 가지 제한이 있어요.

  • runAsUserName 필드는 비어 있으면 안 되고 제어 문자(ASCII 값: 0x00-0x1F, 0x7F)를 포함할 수 없어요.
  • DOMAIN은 NetBios 이름 또는 DNS 이름이어야 하며, 각각 제한이 있어요. NetBios 이름: 최대 15자, .(점)으로 시작할 수 없고, \ / : * ? " < > | 문자를 포함할 수 없음. DNS 이름: 최대 255자, 영숫자·점·대시만 포함하고, .(점) 또는 -(대시)로 시작하거나 끝날 수 없음.
  • USER는 최대 20자이고, 점이나 공백만으로 구성될 수 없으며, " / \ [ ] : ; | = , + * ? < > @ 문자를 포함할 수 없어요.

runAsUserName 필드의 허용 가능한 값 예시: ContainerAdministrator, ContainerUser, NT AUTHORITY\NETWORK SERVICE, NT AUTHORITY\LOCAL SERVICE.

이 제한에 대한 더 많은 정보는 여기여기에서 확인해요.

다음 단계

더 알아보기 (Learn more)