볼륨 마운트에 바인드 마운트 옵션 설정하기

볼륨 마운트에 바인드 마운트 옵션 설정하기 (Set Bind Mount Options on Volume Mounts)

기능 상태: Kubernetes v1.37부터 Alpha; 기본적으로 비활성화.

이 기능을 사용하려면 여러분(또는 클러스터 관리자)이 클러스터의 모든 관련 컴포넌트에 대해 VolumeBindMountOptions 기능 게이트를 활성화해야 해요. 기능 게이트 활성화/비활성화에 대한 자세한 내용은 참고하세요.

이 페이지는 보안 관련 바인드 마운트 옵션(noexec, nodev, nosuid)을 Pod의 볼륨 마운트에 적용하는 방법을 보여드려요.

출처: 문서

본문

시작하기 전에 (Before you begin)

쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성돼 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 두 개 이상 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube로 만들거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있어요.

  • iximiuz Labs
  • Killercoda
  • KodeKloud

쿠버네티스 서버가 v1.37 버전이어야 해요. 버전을 확인하려면 kubectl version을 입력하세요. API 서버와 kubelet에 VolumeBindMountOptions 기능 게이트가 활성화돼 있어야 해요. 컨테이너 런타임도 CRI Mount 메시지의 mount_options 필드를 지원해야 해요.

바인드 마운트 옵션이 있는 Pod 만들기 (Create a Pod with bind mount options)

.spec.containers[*].volumeMounts[*].bindMountOptions 필드는 바인드 마운트 플래그 목록을 받아요. 허용되는 값은 noexec, nodev, nosuid예요.

예를 들어 바이너리가 실행될 수 없고 set-user-ID 비트가 무시되도록 noexecnosuid/tmp에 emptyDir 볼륨을 마운트하려면:

apiVersion: v1
kind: Pod
metadata:
  name: bind-mount-options-demo
spec:
  containers:
  - image: registry.k8s.io/busybox
    name: test-container
    command: ["sleep", "3600"]
    volumeMounts:
    - mountPath: /tmp
      name: tmp-volume
      bindMountOptions:
      - noexec
      - nosuid
  volumes:
  - name: tmp-volume
    emptyDir: {}

pods/bind-mount-options.yaml — 클러스터에 파드를 생성해요.

kubectl apply -f https://k8s.io/examples/pods/bind-mount-options.yaml

파드가 실행 중인지 확인해요.

kubectl get pod bind-mount-options-demo

볼륨의 마운트 옵션을 확인해요.

kubectl exec bind-mount-options-demo -- mount | grep /tmp

출력에는 마운트 옵션에 noexecnosuid가 포함되어야 해요.

마운트에서 바이너리 실행이 실패하는지 확인해요.

kubectl exec bind-mount-options-demo -- sh -c 'cp /bin/ls /tmp/ls && /tmp/ls'

출력은 다음과 비슷해요.

sh: /tmp/ls: Permission denied

이 실습에서 만든 Pod를 삭제해요.

kubectl delete pod bind-mount-options-demo

다음 단계 (What's next)

  • 볼륨의 바인드 마운트 옵션에 대해 더 배우기

더 알아보기 (Learn more)