2.14. Linux 사용자 네임스페이스에서 포드 실행


Linux 사용자 네임스페이스를 사용하면 관리자가 컨테이너 사용자 및 그룹 식별자(UID 및 GID)를 분리하여 컨테이너가 실행 중인 호스트 시스템과는 다른 사용자 네임스페이스에서 다른 권한 집합을 가질 수 있습니다. 이를 통해 컨테이너는 사용자 네임스페이스 내에서 모든 권한을 가지고 프로세스를 실행할 수 있지만, 해당 프로세스는 호스트 머신의 작업에 대해서는 권한이 없을 수 있습니다.

기본적으로 컨테이너는 호스트 시스템의 루트 사용자 네임스페이스에서 실행됩니다. 호스트 사용자 네임스페이스에서 컨테이너를 실행하는 것은 해당 사용자 네임스페이스에서만 사용할 수 있는 기능이 컨테이너에 필요한 경우 유용할 수 있습니다. 그러나 이 방법을 사용하면 컨테이너 탈주가 발생할 가능성 등 보안 문제가 발생할 수 있습니다. 컨테이너 탈주란 컨테이너 내부의 프로세스가 호스트로 탈주하여 해당 프로세스가 호스트나 다른 컨테이너의 파일에 액세스하거나 수정할 수 있는 상황을 말합니다.

개별 사용자 네임스페이스에서 컨테이너를 실행하면 컨테이너 분리 및 손상된 컨테이너가 다른 포드와 노드 자체에 가할 수 있는 여러 가지 취약점을 완화할 수 있습니다.

다음 절차에 표시된 대로 Pod 사양에서 hostUsers 매개변수를 false 로 설정하여 Linux 사용자 네임스페이스 사용을 구성할 수 있습니다.

중요

Linux 사용자 네임스페이스에 대한 지원은 Technology Preview 기능에 불과합니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

2.14.1. Linux 사용자 네임스페이스 지원 구성

사전 요구 사항

  • 클러스터에 필요한 기술 미리 보기 기능을 활성화하려면 FeatureGate CR인 cluster를 편집해야 합니다.

    $ oc edit featuregate cluster
    Copy to Clipboard Toggle word wrap

    FeatureGate CR 예시

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade 
    1
    Copy to Clipboard Toggle word wrap

    1
    필수 UserNamespacesSupportProcMountType 기능을 활성화합니다.
    주의

    클러스터에서 TechPreviewNoUpgrade 기능 세트를 활성화하면 실행 취소할 수 없으며 사소한 버전 업데이트가 방지됩니다. 이 기능 세트를 사용하면 테스트 클러스터에서 이러한 기술 미리 보기 기능을 활성화하여 전체적으로 테스트할 수 있습니다. 프로덕션 클러스터에서 이 기능 세트를 활성화하지 마십시오.

    변경 사항을 저장하면 새로운 머신 구성이 생성되고, 머신 구성 풀이 업데이트되며, 변경 사항이 적용되는 동안 각 노드의 스케줄링이 비활성화됩니다.

  • crun 컨테이너 런타임은 워커 노드에 있습니다. crun은 현재 사용자 네임스페이스를 지원하는 OpenShift Container Platform과 함께 패키지된 유일한 OCI 런타임입니다. crun은 기본적으로 활성화되어 있습니다.

    apiVersion: machineconfiguration.openshift.io/v1
    kind: ContainerRuntimeConfig
    metadata:
     name: enable-crun-worker
    spec:
     machineConfigPoolSelector:
       matchLabels:
         pools.operator.machineconfiguration.openshift.io/worker: "" 
    1
    
     containerRuntimeConfig:
       defaultRuntime: crun 
    2
    Copy to Clipboard Toggle word wrap
    1
    머신 구성 풀 레이블을 지정합니다.
    2
    배포할 컨테이너 런타임을 지정합니다.

프로세스

  1. 다음 명령을 실행하여 Pod가 배포된 OpenShift Container Platform 네임스페이스의 기본 사용자 ID(UID) 및 그룹 ID(GID) 범위를 편집합니다.

    $ oc edit ns/<namespace_name>
    Copy to Clipboard Toggle word wrap

    예제 네임스페이스

    apiVersion: v1
    kind: Namespace
    metadata:
      annotations:
        openshift.io/description: ""
        openshift.io/display-name: ""
        openshift.io/requester: system:admin
        openshift.io/sa.scc.mcs: s0:c27,c24
        openshift.io/sa.scc.supplemental-groups: 1000/10000 
    1
    
        openshift.io/sa.scc.uid-range: 1000/10000 
    2
    
    # ...
    name: userns
    # ...
    Copy to Clipboard Toggle word wrap

    1
    Pod 사양에서 지정한 값과 일치하도록 기본 GID를 편집합니다. Linux 사용자 네임스페이스의 범위는 65,535보다 작아야 합니다. 기본값은 1000000000/10000 입니다.
    2
    Pod 사양에서 지정한 값과 일치하도록 기본 UID를 편집합니다. Linux 사용자 네임스페이스의 범위는 65,535보다 작아야 합니다. 기본값은 1000000000/10000 입니다.
    참고

    1000/10000 범위는 ID 1000으로 시작하는 10,000개의 값을 의미하므로 1000에서 10,999까지의 ID 범위를 지정합니다.

  2. 제한된 프로필로 실행되도록 구성된 Pod를 만들고 hostUsers 매개변수를 false 로 설정하여 Linux 사용자 네임스페이스를 사용할 수 있도록 합니다.

    1. 다음과 유사한 YAML 파일을 생성합니다.

      포드 사양 예시

      apiVersion: v1
      kind: Pod
      metadata:
        name: userns-pod
      
      # ...
      
      spec:
        containers:
        - name: userns-container
          image: registry.access.redhat.com/ubi9
          command: ["sleep", "1000"]
          securityContext:
            capabilities:
              drop: ["ALL"]
            allowPrivilegeEscalation: false 
      1
      
            runAsNonRoot: true 
      2
      
            seccompProfile:
              type: RuntimeDefault
            runAsUser: 1000 
      3
      
            runAsGroup: 1000 
      4
      
        hostUsers: false 
      5
      
      
      # ...
      Copy to Clipboard Toggle word wrap

      1
      포드가 권한 상승을 요청할 수 없도록 지정합니다. 이는 제한된 v2 보안 컨텍스트 제약 조건(SCC)에 필요합니다.
      2
      컨테이너가 0이 아닌 다른 UID를 가진 사용자로 실행되도록 지정합니다.
      3
      컨테이너가 실행되는 UID를 지정합니다.
      4
      컨테이너가 실행되는 기본 GID를 지정합니다.
      5
      Pod가 사용자 네임스페이스에서 실행되도록 요청합니다. true인 경우 Pod는 호스트 사용자 네임스페이스에서 실행됩니다. false인 경우, Pod는 해당 Pod에 대해 생성된 새 사용자 네임스페이스에서 실행됩니다. 기본값은 true입니다.
    2. 다음 명령을 실행하여 Pod를 생성합니다.

      $ oc create -f <file_name>.yaml
      Copy to Clipboard Toggle word wrap

검증

  1. 생성한 Pod 컨테이너에서 사용 중인 Pod 사용자 및 그룹 ID를 확인하세요. 포드는 Linux 사용자 네임스페이스 내부에 있습니다.

    1. 포드의 컨테이너로 셸 세션을 시작합니다.

      $ oc rsh -c <container_name> pod/<pod_name>
      Copy to Clipboard Toggle word wrap

      명령 예

      $ oc rsh -c userns-container_name pod/userns-pod
      Copy to Clipboard Toggle word wrap

    2. 컨테이너 내부에서 사용되는 사용자 및 그룹 ID를 표시합니다.

      sh-5.1$ id
      Copy to Clipboard Toggle word wrap

      출력 예

      uid=1000(1000) gid=1000(1000) groups=1000(1000)
      Copy to Clipboard Toggle word wrap

    3. 컨테이너 사용자 네임스페이스에서 사용되는 사용자 ID를 표시합니다.

      sh-5.1$ lsns -t user
      Copy to Clipboard Toggle word wrap

      출력 예

              NS TYPE  NPROCS PID USER COMMAND
      4026532447 user       3   1 1000 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1000 
      1
      Copy to Clipboard Toggle word wrap

      1
      프로세스의 UID는 1000 이며, 이는 Pod 사양에서 설정한 것과 동일합니다.
  2. Pod가 생성된 노드에서 사용 중인 Pod 사용자 ID를 확인하세요. 노드가 Linux 사용자 네임스페이스 외부에 있습니다. 이 사용자 ID는 컨테이너에서 사용되는 UID와 달라야 합니다.

    1. 해당 노드에 대한 디버그 세션을 시작합니다.

      $ oc debug node/ci-ln-z5vppzb-72292-8zp2b-worker-c-q8sh9
      Copy to Clipboard Toggle word wrap

      명령 예

      $ oc debug node/ci-ln-z5vppzb-72292-8zp2b-worker-c-q8sh9
      Copy to Clipboard Toggle word wrap

    2. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다.

      sh-5.1# chroot /host
      Copy to Clipboard Toggle word wrap
    3. 노드 사용자 네임스페이스에서 사용되는 사용자 ID를 표시합니다.

      sh-5.1#  lsns -t user
      Copy to Clipboard Toggle word wrap

      명령 예

              NS TYPE  NPROCS   PID USER       COMMAND
      4026531837 user     233     1 root       /usr/lib/systemd/systemd --switched-root --system --deserialize 28
      4026532447 user       1  4767 2908816384 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1000 
      1
      Copy to Clipboard Toggle word wrap

      1
      해당 프로세스의 UID는 2908816384 로, Pod 사양에서 설정한 것과 다릅니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat