Skip to main content

컨테이너 기술의 이해


POD는 가장 작은 논리적 리소스이자 자원의 최소단위이기도 하다.

하나의 pod에 하나의 container (app)가 담기는 것이 권장 사양이긴 하나, 하나의 pod 안에 여러 개의 컨테이너가 포함되는 경우도 있다.

제목 없는 다이어그램.drawio.png


APP 구동에 있어 컨테이너와 전통적인 OS를 사용하는 방식의 비교

containers and Traditional OS.png


종래의 방식은 호스트 OS에 탑재된 라이브러리를 각 앱이 공유하여 사용하였다. 때문에 종종 APP 1과 APP 2가 서로 다른 버전의 라이브러리를 요구할 때 의존성 문제가 발생하곤 했다.

또한 APP이 보안상 취약점이 있을 때 호스트 OS의 제어권에 영향을 줄수 있는 위험이 상대적으로 큰 편이기도 했다.


이에 반해 컨테이너 방식은 각각의 APP이 컨테이너(POD) 안에 사용할 라이브러리를 들고 독립적으로 사용하기 때문의 의존성 문제를 해결함과 동시에 보안적 관점에서도 상대적으로 호스트 OS의 제어권에 영향을 줄 위험도 줄여준다.


Virtualization과 containerization의 비교

컨테이너 기술은 종래의 방식보다는 약간의 오버헤드가 있으나, VM을 사용하는 방식에 비해서는 훨씬 적은 오버헤드를 생성하기 때문에 VM을 밀어내고 대세로 자리 잡았다. 이를 컨테이너가 호스트 OS의 커널과 메모리 주소를 그대로 이용하는데 반하여 VM의 경우에는 게스트 OS의 커널과 별도의 메모리 주소를 이용하기 때문이다.

 

Rootful 컨테이너와 rootless 컨테이너의 이해

컨테이너는 보통 root 계정으로 실행 되나, 보안 상의 이유로 root가 아닌 계정으로 실행할 것을 권장하기도 한다.

보안 상의 이점도 있는데, 만약 APP의 제어권이 탈취당하여 이를 통해 호스트 OS에 접근하는 경우에도 공격자는 일반 사용자 계정의 권한을 가질 뿐이므로 피해를 줄일 수 있다.

  • POD 기동 계정이 root면 rootful container 모드로, 그 외의 경우는 rootless 모드로 기동
  • HOST OS의 1~1023 포트를 사용 가능한 것은 rootful 컨테이너만 가능
  • POD 네트워크는 rootful 컨테이너만 가능