문제 개요
- 환경: Kubernetes 클러스터, CRI-O 컨테이너 런타임
- 증상 1: 컨테이너 내부에서 Podman 실행 불가
- 증상 2: Ping 명령어 실행 시 권한 오류 발생
- 증상 3: Audit 관련 기능 미작동 및 sudo 사용 시 경고 메시지 출력
원인 분석
CRI-O는 containerd에 비해 기본적으로 더 제한된 capabilities를 제공한다.
이에 따라 capabilities 부족으로 권한 오류가 발생해 위와 같은 증상들이 나타나게 된다.
아래 명령어를 통해 컨테이너에 적용된 Linux capabilities를 확인할 수 있다. 이를 통해 containerd와 CRI-O의 capabilities 차이를 분석했다.
capsh --print
ontainerd와 비교할 때 CRI-O에는 아래의 5가지 capabilities가 기본 제공되지 않았다.
- cap_net_raw : ping 등의 네트워크 진단 도구 사용 가능
- cap_sys_chroot : 프로세스의 루트 디렉토리 변경 가능
- cap_mknod : 장치 파일 등의 특수 파일 생성 가능
- cap_audit_write : 시스템 감사 기능 사용 가능
- cap_setfcap : 파일 단위의 세밀한 권한 제어 가능
해결 방법
모든 노드의 CRI-O 설정 파일 수정하고, CRI-O를 재시작한다.
CRI-O 설정파일 `/etc/crio/crio.conf`을 열고 default_capabilities 섹션을 찾아 다음과 같이 수정한다.
default_capabilities = [
"CHOWN",
"DAC_OVERRIDE",
"FSETID",
"FOWNER",
"SETGID",
"SETUID",
"SETPCAP",
"NET_BIND_SERVICE",
"KILL",
"NET_RAW",
"SYS_CHROOT",
"MKNOD",
"AUDIT_WRITE",
"SETFCAP"
]
기존 설정에 다음 5가지 capabilities를 추가했다.
- NET_RAW
- SYS_CHROOT
- MKNOD
- AUDIT_WRITE
- SETFCAP
설정 파일을 수정한 후 모든 노드의 CRI-O를 재시작하면 문제가 해결된다.
sudo systemctl restart crio
'kubenetes' 카테고리의 다른 글
KServe를 이용한 scikit-learn 모델 배포 및 사용 가이드 (1) | 2024.09.26 |
---|---|
kserve 사용 및 설정 가이드 (0) | 2024.09.24 |
Kubernetes에서 Spark 사용하기: spark operator를 이용한 spark on kubernetes 설정 및 사용 방법 (0) | 2024.09.09 |
Argocd mail notification 설정: Multiple Sources (0) | 2024.09.08 |
Kubernetes 환경에서 ArgoCD를 활용한 MLflow Helm 차트 배포: GitOps 및 Private Harbor 활용 (1) | 2024.09.05 |
댓글