볼륨 권한 문제 식별
이 단계에서는 Kubernetes 에서 흔히 발생하는 볼륨 권한 문제를 보여주는 시나리오를 생성합니다. 이러한 문제는 일반적으로 HostPath 볼륨 또는 파일 시스템 권한이 컨테이너에서 실행되는 사용자 ID 와 일치하지 않는 영구 볼륨을 사용할 때 발생합니다.
문제 이해
컨테이너가 root 가 아닌 사용자로 실행되지만 root(또는 다른 사용자) 가 소유한 볼륨에 접근하려고 할 때 권한 거부 오류가 발생할 수 있습니다. 이는 컨테이너를 root 가 아닌 사용자로 실행하는 것이 보안 모범 사례인 프로덕션 환경에서 흔히 발생하는 문제입니다.
권한 문제가 있는 HostPath 볼륨 생성
root 소유권으로 HostPath 볼륨에 접근하려는 Pod 를 생성해 보겠습니다.
- Pod 구성을 위한 YAML 파일을 생성합니다.
cd ~/project/k8s-volume-demo
nano hostpath-pod.yaml
- 다음 내용을 파일에 복사합니다.
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
containers:
- name: container-1
image: ubuntu:22.04
command:
[
"/bin/bash",
"-c",
"while true; do echo 'Trying to write' >> /data/output.txt; sleep 10; done"
]
volumeMounts:
- name: host-data
mountPath: /data
securityContext:
runAsUser: 1000 ## Run as non-root user
volumes:
- name: host-data
hostPath:
path: /home/labex/project/k8s-volume-demo/data
type: Directory
-
파일을 저장합니다 (Ctrl+X, Y, Enter).
-
Kubernetes 클러스터에서 Pod 를 생성합니다.
kubectl apply -f hostpath-pod.yaml
- 잠시 기다린 다음 Pod 상태를 확인합니다.
kubectl get pods
- Pod 가 실행 중인 것을 볼 수 있지만, 로그를 확인하면 오류가 표시될 수 있습니다.
kubectl logs hostpath-pod
다음과 같은 권한 거부 오류가 표시될 수 있습니다.
bash: /data/output.txt: Permission denied
- 호스트 디렉토리의 권한을 확인하여 문제를 확인해 보겠습니다.
ls -la ~/project/k8s-volume-demo/data
다음과 같은 출력이 표시되어야 합니다.
total 12
drwxr-xr-x 2 root root 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw-r--r-- 1 root root 19 Jan 1 12:00 test.txt
디렉토리와 파일은 root가 소유하고 있지만, 컨테이너는 사용자 ID 1000으로 실행됩니다. 이러한 불일치로 인해 권한 거부 오류가 발생합니다.
컨테이너의 사용자 및 그룹 ID 이해
Kubernetes 에서 컨테이너는 securityContext 구성을 통해 특정 사용자 ID 로 실행될 수 있습니다. 이 예에서:
securityContext:
runAsUser: 1000 ## Run as non-root user
이는 Kubernetes 에 컨테이너 프로세스를 사용자 ID 1000 으로 실행하도록 지시합니다. 이 사용자는 root 가 소유한 파일에 쓸 권한이 없습니다.
정리
다음 단계로 넘어가기 전에 Pod 를 삭제해 보겠습니다.
kubectl delete pod hostpath-pod
다음 단계에서는 이러한 권한 문제에 대한 솔루션을 살펴보겠습니다.