본문 바로가기
kubenetes

CRI-O 환경에서 Podman, Ping, Audit 관련 이슈 해결 가이드

by kyeongseo.oh 2024. 9. 19.

문제 개요

  • 환경: 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

 

 

댓글