볼륨 마운트에 바인드 마운트 옵션 설정하기
볼륨 마운트에 바인드 마운트 옵션 설정하기 (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 비트가 무시되도록 noexec와 nosuid로 /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
출력에는 마운트 옵션에 noexec와 nosuid가 포함되어야 해요.
마운트에서 바이너리 실행이 실패하는지 확인해요.
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)
- 볼륨의 바인드 마운트 옵션에 대해 더 배우기