프로젝트 소개
debux는 Docker 및 Kubernetes 환경을 위해 설계된 오픈소스 컨테이너 디버거입니다. 이 도구는 셸이나 패키지 관리자가 없는 프로덕션 스타일 컨테이너(예: distroless, scratch, 최소 이미지)를 디버깅할 때의 일반적인 문제를 해결합니다. 대상 이미지 내부에 도구와 셸이 필요한 `docker exec`와 달리, debux는 대상에 연결하고 유용한 네임스페이스(네트워크, 프로세스)를 공유하며 대상 파일시스템을 `$DEBUX_TARGET_ROOT`(보통 `/proc/1/root`)에 노출하는 별도의 디버그 툴박스 컨테이너를 시작합니다.
주요 기능은 다음과 같습니다:
- **모든 컨테이너와 호환**: 셸이나 패키지 관리자가 없는 컨테이너를 포함하여 실행 중, 중지됨, 종료됨, 크래시 루프 컨테이너를 디버깅합니다.
- **Docker 및 Kubernetes 지원**: 로컬 Docker 컨테이너, Docker Compose 서비스, Podman 컨테이너, Kubernetes 파드에 대한 통합 워크플로우를 제공합니다. 호스트 네임스페이스 액세스로 Kubernetes 노드 디버깅도 지원합니다.
- **즉시 사용 가능한 툴박스**: 사전 설치된 도구로는 curl, wget, dig, nmap, tcpdump, strace, ltrace, gdb, htop, vim, jq, git, openssh, zsh, tmux 등이 있습니다. 툴박스는 Wolfi 기반이며 패키지 관리를 위해 mise를 사용합니다.
- **주문형 도구 설치**: `dctl` 명령은 디버그 세션 중 mise를 사용하여 추가 도구를 설치합니다. 도구는 `--tools`로 세션 시작 시 미리 로드할 수 있습니다.
- **대상 인식 셸**: 대상 루트로 이동하고, 대상 프로세스를 검사하며, 대상 네트워크 네임스페이스를 재사용하고, 툴박스에 없는 경우 chroot를 통해 대상의 자체 바이너리를 실행합니다.
- **포트 포워딩 및 파일 복사**: `-p` 없이 시작된 컨테이너와 `kubectl cp`가 실패하는 distroless 파드를 포함하여 모든 대상에서 파일에 도달하고 가져올 수 있습니다.
- **Kubernetes 복사 모드**: 임시 컨테이너가 RBAC 또는 허용 정책으로 차단된 경우, `--copy`는 디버깅을 위한 임시 복제 파드를 생성합니다. TTL, Karpenter 보호, 재연결 기능이 있는 장기 복사 세션을 지원합니다.
- **노드 디버깅**: `debux node`는 Kubernetes 노드에 호스트 네임스페이스 툴박스 파드를 스케줄링하여 노드 루트 파일시스템을 마운트하고 PID, 네트워크, IPC 네임스페이스를 공유합니다.
- **이미지 디버깅**: 이미지를 시작하지 않고 디버깅하며, 이미지 자체가 부팅할 수 없을 때 유용합니다.
- **TUI 인터페이스**: Docker, Kubernetes 컨텍스트/네임스페이스 탐색, 활성 세션 재연결, 최근 세션, 옵션 토글이 있는 전체 화면 대상 브라우저를 제공합니다.
- **셸 완성**: 생성된 완성에는 하위 문자열 일치가 있는 실시간 Docker 및 Kubernetes 대상이 포함됩니다.
이 도구는 Linux 및 macOS(amd64/arm64)를 지원하는 설치 스크립트가 있는 단일 바이너리로 배포됩니다. 릴리스 자산은 체크섬으로 검증되며 선택적 cosign 서명 검증이 지원됩니다. 프로젝트는 MIT 라이선스로 제공됩니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.