피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Non-privileged Kata microVM 내 Nested Container 구현
Running a container inside a non-privileged microVM, on an Apple Silicon Mac
AI 요약
Context
AI Agent의 임의 코드 실행을 위한 격리 환경 구축 시 Shared-kernel Container의 보안 한계 노출. tenant 간 완전한 격리를 위해 VM 기반 경계가 필요하나, 내부에서 Docker build 등 Container 실행을 위한 Nested 가상화 요구사항과 보안 정책(privileged: false)이 충돌하는 구조적 모순 발생.
Technical Solution
- Apple Silicon의 Nested Virtualization 기능을 활용해 Host VM 내 KVM-accelerated microVM 환경 구축
- Host Device Passthrough 위험을 제거하기 위해 privileged: true 대신 세부 Linux Capabilities(SYS_ADMIN, NET_ADMIN 등)를 명시적으로 부여한 격리 모델 설계
- QEMU의 Nested Virt 행(hang) 현상을 해결하기 위해 Cloud Hypervisor로 하이퍼바이저 교체
- Cgroup2의 Read-only 제약과 'No internal process' 규칙 해결을 위해 프로세스를 /init으로 대피시킨 후 subtree_control을 통해 제어권을 위임하는 Bootstrap 로직 구현
- OCI Runtime의 Cgroup2 초기화 실패를 방지하기 위해 runc 대신 crun을 채택하고 cgroupfs 매니저 사용
- Storage Driver의 호환성 문제 해결을 위해 Loopback/OverlayFS 대신 Real Block Device 기반의 devmapper Snapshotter 적용
실천 포인트
- Nested 가상화 환경에서 Cgroup2 위임 시 현재 프로세스 위치와 subtree_control 설정 순서 확인 - 보안 경계 확보를 위해 Privileged 모드 대신 필요한 최소한의 Linux Capabilities 조합 검토 - 하이퍼바이저 선택 시 Nested Virtualization 지원 여부 및 QMP Loop 안정성 검증 - OCI Runtime 선택 시 OS 커널 버전 및 Cgroup 관리 방식(systemd vs cgroupfs) 일치 여부 확인