[SK shieldus Rookies 16기][클라우드 보안 컨설팅 실무] 하이퍼바이저, 가상화, 가상머신과 컨테이너, 쿠버네티스, 도커

Jina·2024년 1월 22일
0

SK shieldus Rookies 16기

목록 보기
57/59
post-custom-banner

1. 하이퍼바이저(Hypervisor)

1.1. 정의

  • 호스트 컴퓨터에서 다수의 게스트 OS를 동시에 실행하기 위한 논리적 플랫폼
  • 가상머신을 생성하고 구동하는 소프트웨어로 물리적 서버를 여러 가상 서버로 나눔.
  • Virtual Machine을 모니터링하는 중간 관리 VMM(Virtual Machine Monitor) 라고도 부름

1.2. 특징

주로 IaaS(Infrastructure as a Service) 모델에서 퍼블릭 클라우드 환경에서 사용

1.3. 종류

  1. Type1 하이퍼바이저 : 베어메탈(Bare-metal) 기반
    • 하드웨어 바로 위에서 설치되어 실행되는 방식
    • 하드웨어를 제어하는 운영체제 역할과 가상머신들을 관리하는 역할을 담당
    • gkemdnp
  2. Type2 하이퍼바이저 : 호스트(Hosted) 기반
    • 일반적으로 사용하는 가상화 방식
    • 호스트 OS 위에 설치되어 실행되는 방식

2. 가상화 vs 클라우드 컴퓨팅

2.1. 가상화(Virtualization)

  • 정의 : 기술
  • 목적 : 한 대의 물리적 시스템 하드웨어(CPU, Disk, Network 등)를 논리적으로 분할하여 다수의 실행환경(테넌트)이 공유하여 자원을 효율적으로 사용할 수 있게 해주는 기술
  • 용도 : 특정 용도의 패키징된 리소스를 특정 사용자에게 제공
  • 설정 : 이미지 기반
  • 비용 : CAPEX(자본 지출) ↑, OPEX(운영 비용) ↓
  • 평균 수명 : 연 단위
  • 확장성 : Scale Up 방식으로 확장
  • 워크로드 : 스테이트풀(Stateful)
  • 테넌시 : 싱글 테넌트(하나의 사용자만 소프트웨어 인스턴스나 서비스 사용 가능)

2.2. 클라우드 컴퓨팅(Cloud Computing)

  • 정의 : 방식
  • 목적 : 온디맨드 사용을 위한 가상 리소스 풀링과 자동화
  • 용도 : 다양한 용도의 리소스를 사용자 그룹에게 제공
  • 설정 : 템플릿 기반
  • 비용 :
    • 프라이빗 클라우드 : 높은 CAPEX(자본 지출), 낮은 OPEX(운영 비용)
    • 퍼블릭 클라우드 : 낮은 CAPEX(자본 지출), 높은 OPEX(운영 비용)
  • 평균 수명 : 시간/월 단위
  • 확장성 : Scale Out 방식으로 확장
  • 워크로드 : 스테이트리스(Stateless)
  • 테넌시 : 멀티 테넌트(여러 사용자가 동일한 소프트웨어 인스턴스나 서비스를 공유)

💡 워크로드란? 컴퓨팅 리소스와 시간의 양. 클라우드 리소스에서 실행되는 애플리케이션, 서비스, 컴퓨팅 또는 기능을 의미. 워크로드는 애플리케이션 및 애플리케이션과의 상호작용을 지원하는 프로세스와 리소스로 구성.

💡 워크로드 상태 Stateless와 Stateful

  • Stateless
    • 클라이언트 요청을 처리하는 동안 어떠한 상태 정보도 저장 X
    • 각각의 요청은 독립적으로 처리됨
    • 서버는 클라이언트의 과거 상태를 추적 X
    • 독립적이기 때문에 부하 분산 가능
  • Stateful
    • 클라이언트의 상태 정보를 유지하고 저장
    • 각각의 요청은 이전 요청과의 상태 의존성을 가짐
    • 서버는 클라이언트의 상태를 지속적으로 추적
    • 상태 공유, 세션 유지 등의 기능을 지원

3. 인스턴스

3.1. 정의

컴퓨팅 리소스에 대한 가상 엑세스를 인스턴스(Instance)라는 형태로 제공

3.2. 특징

  1. 확장성 :
    • CPU, 메모리, 스토리지 및 네트워크 리소스를 특정 인스턴스로 늘려 클라우드 리소스를 수평적으로 조정할 수 있음
  2. 내결합성 :
    • 백업을 위해 여러 중복 인스턴스를 사용하여 중복성을 만듦
    • 데이터 처리와 같은 메모리 집약적인 워크로드를 관리하는데 유용

3.3. 종류

  1. 범용 목적 인스턴스(General Purpose)
  2. 컴퓨팅 최적화 인스턴스(Compute Optimized)
    • 데이터 분석, 빠른 처리를 원하는 애플리케이션에 사용
  3. 메모리 최적화 인스턴스(Memory Optimized)
    • 관계형/비관계형 데이터베이스에 사용
  4. 가속화된 컴퓨팅 인스턴스(Accelerated Computing)
    • 동적/정적 그래픽 처리에 사용
  5. 스토리지 최적화 인스턴스(Storage Optimized)
    • IOPS(Input/Output Operations Per Second) 속도를 위해 사용

4. 가상머신 vs 컨테이너

4.1. 가상머신(Virtual Machine)

  • 정의 :
    • 물리적 시스템 하드웨어(CPU, Disk, Network 등)와 동일한 기능을 제공하는 소프트웨어 컴퓨터로
  • 장점 :
    • 가상머신은 가상 하드웨어를 직접 제어할 수 있기 때문에 높은 수준의 자원 격리와 쿼터 제한을 수행할 수 있음
  • 단점 :
    • 대량의 메모리 必
    • CPU 자원 경쟁에 따른 성능 저하
  • 특징 :
    • 하이퍼바이저 有

4.2. 컨테이너(Container)

  • 정의 :
    • 애플리케이션 코드와 이 애플리케이션을 실행하기 위한 라이브러리, 환경 설정 등을 하나로 묶어 패키징한 소프트웨어 실행 단위 ⇒ 애플리케이션보다 크거나 실행하는 데 필수적인 모든 파일이 컨테이너에 패키징되는 것은 아니고, 특정 작업을 수행하는 단일 기능(마이크로서비스)이 컨테이너에 패키징됨
  • 장점 :
    • 빠른 부팅
    • 적은 메모리 사용량
  • 단점 :
    • 호스트 운영체제에 실행 환경이 묶임
  • 특징 :
    • 각각의 독립적인 실행환경(테넌트)를 가지고 있지만 호스트 운영체제의 리소스와 기능을 공유
    • 하이퍼바이저 대신 컨테이너 엔진(ex. Docker) 有

💡 구성 레이어가 적을수록 부팅 시작이 빠르다.

5. 도커(docker)

5.1. 정의

  • 항만에서 일하는 '부두 노동자'를 의미하는 말로 항만에서 규격화되어 있는 컨테이너를 옮기고, 관리하는 직업을 도커라고 함. 컴퓨팅에서 도커도 동일한 일을 함.
  • 컨테이너 기반의 오픈소스 가상화 플랫폼

5.2. 구성요소

  • Docker API :

    • TCP 소켓을 이용해 도커 엔진에 명령어를 이용하여 도커를 제어하기 위한 인터페이스
  • Docker CLI :

    • 도커 엔진에 사용하는 명령어
    # 컨테이너 생성
    $ docker build
    
    # 이미지 가져오기
    $ docker pull
    
    # 컨테이너 실행
    $ docker run
  • Distribution :

    • 도커 이미지를 저장하고 배포 기능을 가진 레지스터리
  • Orchestration :

    • 컨테이너를 프로비저닝하고 관리하는 시스템
  • Volumes :

    • 컨테이너에서 생성된 데이터를 영구적으로 보관하기 위해 사용하는 것으로 데이터를 보존하고 컨테이너 간에 파일 시스템을 쉽게 공유할 수 있게 해줌
  • Containerd :

    • 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일시스템
  • Docker Build(BuildKit) :

    • 도커의 빌드 엔진으로 도커 파일의 빌드 단계를 해결하여 컨테이너 이미지나 다른 아티팩트 생성
  • Networking :

    • 컨테이너가 서로 또는 비-도커 작업과 연결하고 통신할 수 있는 기능

5.3. 도커의 이미지

  • 컨테이너를 생성하기 위한 설계도나 템플릿
  • 이미지는 애플리케이션을 실행하는데 필요한 모든 것을 포함(운영체제, 애플리케이션 코드, 라이브러리, 환경변수 등)
  • 한 번 생성된 이미지는 변경되지 않는 불변성을 갖고 있음
  • 이미지를 바탕으로 여러 개 컨테이너 생성 가능

💡 프로비저닝이란? 컨테이너의 생성과 관리를 자동화하는 과정을 의미

6. 쿠버네티스(Kubernetes)

6.1. 정의

  • 배의 조타수라는 그리스 단어에서 유래
  • 2014년 구글에서 사용하던 컨테이너 오케스트레이션 시스템 보그를 오픈 소스 소프트웨어로 공개한 것
  • Kubernetes → K와 S 사이 8글자가 있어서 k8s 라고도 함

💡 AWS에서 쿠버네티스 관리형 서비스인 EKS 출시

6.2. 특징

  1. 선언적 API :
    • 컨테이너가 어떤 상태이길 워하는지만 쿠버네티스에 설정하면 지속해서 컨테이너 상태를 체크한다. 그리고 컨테이너가 설정한 상태가 아니라면 그것에 맞춘다는 개념
  2. 사용 컴포넌트 구현 단순
  3. 워크로드 분리
  4. 어디서나 실행 가능
  5. 활성화된 커뮤니티

6.3. 클러스터 기본구성

  • 클러스터 (Cluster) : 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
  • 마스터 노드 (Master Node) : 클러스터를 관리
    • kube-apiserver : 클러스터의 API를 사용할 수 있도록 하고, 클러스터에 들어온 요청을 가장 먼저 접수해 해당 요청이 유효한지 검증하는 역할을 하는 컴포넌트
    • kube-contorller-manager : 클러스터의 전반적인 상태 관리 및 필요 조치를 취하는 컴포넌트
    • kube-scheduler : 자원 할당이 가능한 노드에 포드를 배치하는 결정을 하는 역할로 이 결정은 kube-apiserver에 전달(바인딩)
    • kube-proxy : 쿠버네티스는 클러스터 안에 별도의 가상 네트워크를 설정하고 관리하는데 이 가상 네트워크의 동작(네트워크 프록시, 네트워크 설정, 서비스 모니터링)을 관리하는 컴포넌트
    • etcd : 모든 클러스터의 데이터를 키-값 형태로 저장하는 저장소로 일종의 데이터베이스
  • 워커 노드 (Worker Node) : 실제 컨테이너를 실행시키는 노드
    • kubelet : 워커 노드의 kubelet은 마스터의 kube-apiserver와 통신하면서 포드의 생성, 관리, 삭제를 담당
    • Pod : 하나 이상의 컨테이너 그룹
      • container
    • container runtime : 컨테이너를 실행시키는 엔진
    • kube-proxy : 포드 간의 통신이 가능하게 해주는 컴포넌트

7. 컨테이너 보안이슈

  1. 컨테이너 애플리케이션 접근
  2. 컨테이너 이미지 보안
  3. 루트 권한으로 이용하는 컨테이너 동작
  4. 사용자 권한
  5. 포드 통신 구간 암호화
  6. 중요 데이터 보안
  7. etcd 보안
  8. 컨테이너 데이터, 이미지 백업 및 복구
  9. 컨테이너 보안정책 구성
  10. 컨테이너 재해 복구 계획
profile
공부 기록
post-custom-banner

0개의 댓글