상세 컨텐츠

본문 제목

쿠버네티스 기본 개념

IT 보안/지식플러스+

by 신시웨이 공식 블로그 2020. 9. 4. 00:10

본문

최근 컨테이너 가상화 기술이 발달하면서 DB보안 또한 컨테이너 기술에 맞는 환경 구축을 요구하는 고객사자 점차 증가하고 있고, 최근 고객사 환경이 AKS(Azure Kubernetes Service) 기반 Docker Container에 Weblogic이 설치된 MS Azure Cloud 환경에서 DB 접근 제어 솔루션을 gateway 방식으로 접속하여 DB에 접속하는 방식으로 구성해야 한다는 요구사항이 있었습니다.

 

해당 요구사항의 출발점은 WAS가 여러 곳에서 DB로 접속되는 포인트를 Gateway를 통하여 하나의 IP에서 DB로 접속해야 된다는 요구사항이었고 WAS의 가용성을 최대한 보장하라는 것이었습니다. 위 요구사항을 충족하기 위해서 다음과 같은 시스템 구성을 했습니다.

 

그림에서 보는 바와 같이 App1-App4가 Container 위에 올라간 WAS Service라고 보시면 되고 해당 WAS Service들은 AKS(Azure Kubernetes Service)에 의해 컨트롤 되는 환경입니다. 따라서 위와 같은 환경에서의 효과적인 DB 보안 구축 방법을 알아보기에 앞서 쿠버네티스 개념을 먼저 알아보도록 하겠습니다.

 

현대 산업 사회는 과거보다 수많은 데이터를 저장하는 데이터 사회입니다. 그러므로 많은 데이터를 저장하기 위해서는 저장 공간과 다양한 프로세스들을 구동할 수 있는 자원을 필요로 합니다. 과거에는 물리적인 서버를 증설하였다면 현대 사회에는 자원을 유동적으로 혹은 효율적으로 사용해야 합니다. 즉 관리는 효율적이면서 자원에 대한 비용은 효과적이어야 합니다. 따라서 서버 자원을 효율적으로 쓰기 위해서는 가상화 기술에 대해 관심을 가질 수밖에 없는데, 쿠버네티스를 좀 더 잘 이해하려면 가상화 기술들에 대한 역사를 알 필요가 있습니다.

 

가상화 기술의 히스토리를 크게 4분류로 나눠본다면 아래의 단계로 나눠볼 수 있습니다.

 

1. 리눅스의 자원 격리 기술

2. VM의 가상화 기술

3. Container의 가상화 기술

4. Container를 관리하는 오케스트레이터 기술

 

1. 리눅스의 자원 격리 기술

리눅스의 자원 격리 기술은 현재 컨테이너로 서비스를 가상화하여 배포하는 형태인 Container 기술의 시초라고 볼 수 있습니다. 하지만 최초 리눅스에서 프로세스들이 독립적인 환경에서 동작하도록 하는 자원 격리 기술은 사용자들이 사용하기 어려워 잘 활용되지 못하였습니다.

 

2. VM의 가상화 기술

최초 자원 격리 기술 이후 VM 가상화가 나오게 되고 VM 가상화에서는 단일 물리 서버에 여러 대의 가상 시스템을 실행할 수 있게 하였습니다. 따라서 물리 서버에서 자원을 활용하던 것보다 효율적으로 활용할 수 있게 되었고 하드웨어의 비용을 절감할 수 있었습니다. 하지만 VM 가상화는 OS를 띄워야만 한다는 단점이 있어 작은 서비스를 제공하기 위해서도 OS를 띄워야 하여 효율이 낮다는 단점을 가지고 있었습니다.

 

3. Container의 가상화 기술

VM의 가상화 기술이 나온 후 dotCloud(현 docker)사에서 예전 리눅스의 자원 격리기술을 컨테이너라는 개념으로 사용자들이 사용하기 쉽게 만들게 되었습니다. 즉 서비스를 가상화시켜 배포를 할 수 있도록 만든 것이었습니다. VM에 비해 강점으로 컨테이너 기술은 VM처럼 각 서비스별로 OS를 띄워야 하는 것이 아니라 OS를 공유하는 개념으로 서비스마다 OS를 띄우지 않아도 된다는 장점이 있어 자동화 시에 빠르고 자원효율이 매우 높았습니다. 그리고 컨테이너 또한 VM과 마찬가지로 자체 파일 시스템, CPU, 메모리, 프로세스 공간 등이 있지만, 기존 인프라와의 종속성을 끊었기 때문에 클라우드나 OS 배포본에 모두 이식할 수 있다는 장점이 있었습니다. 따라서 컨테이너를 통한 서비스의 제공이 인기를 끌게 되었습니다.

 

4. Container를 관리하는 오케스트레이터 기술

컨테이너 기술은 서비스를 가상화시켜 배포는 해주지만 운영할 때 그것 자체를 일일이 배포하고 운영하는 역할은 해주지 않습니다. 따라서 배포된 컨테이너들이 정상적으로 동작하는지 관리해주는 기술이 필요하게 되는데 이것을 ‘오케스트레이터’ 라는 솔루션으로 부르게 됩니다. 쿠버네티스는 이 오케스트레이터 중의 하나입니다.

 

오케스트레이터는 도커, 아마존, 쿠버네티스 등 여러 오케스트레이터가 있지만 쿠버네티스가 가장 인기가 있는 이유는 구글에서 쿠버네티스를 개발할 때 구글을 제외하고도 여러 기업이 쿠버네티스 개발에 참여하여 각 기업의 시스템 운영에 관한 기술들이 쿠버네티스에 들어가게 되었고, 이로 인해 타 오케스트레이터 보다 더 기술력 있는 오케스트레이터를 제공하여 사용자들에게 높은 기대와 평가를 받았기 때문입니다.

 

가상화 기술의 히스토리를 알았으니 쿠버네티스를 이해하고 쿠버네티스의 기능에 대해서 알아보고자 합니다. 쿠버네티스를 이해하기 위해서는 가장 크게 마스터와 노드의 관계, 그리고 기본 오브젝트들(POD, Volume, Service, Namespace, Controller)을 이해해야 합니다. 쿠버네티스의 기본 오브젝트들과 Master-Node 구조를 살펴본 후 쿠버네티스의 기능에 대해 살펴보겠습니다.

 

* Default Objects

POD 쿠버네티스에서 가장 기본적인 배포 단위이고 컨테이너를 포함하는 단위로 2가지의 특징이 있음
- POD 내의 컨테이너는 IP와 PORT를 공유
- POD 내의 배포된 컨테이너간에는 디스크 볼륨을 공유
Volumn POD가 기동할 때 디폴트로 컨테이너에 생성되는 디스크는 내용이 유실되는 반면 영구적으로 파일을 저장하여 관리하는 스토리지가 있는데 이것을 Volumn이라고 함
Service 여러 개의 POD를 서비스하게 도와주고, 로드밸런서를 통해 부하를 분산시키는 역할
Namespace 쿠버네티스 클러스터 내의 논리적인 분리 단위
Controller 기본 오브젝트들을 생성하고 이를 관리해주는 역할을 함

쿠버네티스는 Master– Node의 관계로서 클러스터라는 개념으로 이루어져 있고, 마스터와 노드를 설명하자면 다음과 같습니다.

 

# Master

클러스터 전체를 관리하는 컨트롤러로서 전반적인 결정을 수행하고 클러스터 이벤트를 감지하고 반응함대표적으로 kube-apiserver, etcd, kube-scheduler, controller-manager 등으로 구성되어 있음

 

kube-apiserver POD, 서비스, 복제 컨트롤러 등을 포함하는 api 개체에 대한 데이터를 검증하고 구성
etcd 클러스터 데이터를 담는 쿠버네티스의 저장소
kube-scheduler 노드가 배정되지 않은 POD를 감지하고 적절한 노드를 선택, 할당
controller-manager 컨트롤러를 구동하게 해주는 역할

# Node

컨테이너가 배포되는 가상머신이나 물리적인 서버머신. 대표적으로 kubelet, kube-proxy, 컨테이너 런타임, DNS 등이 있음

 

kubelet 각 노드에서 실행되는 에이전트로 POD에서 컨테이너가 정상적으로 동작하도록 관리
kube-proxy 네트워크 트래픽을 적절한 컨테이너로 라우팅
container runtime 컨테이너 실행을 담당하는 소프트웨어
DNS 쿠버네티스 서비스를 위해 DNS 레코드를 제공 해주는 DNS 서비스

마지막으로는 쿠버네티스가 제공하는 기능에 대해서 살펴보겠습니다.

자동화된 빈 패킹
가용성을 그대로 유지한 채 자원 요구사항과 제약 조건에 따라 컨테이너를 자동으로 배치

 

자동화된 복구
오류가 발생한 컨테이너를 재시작 혹은 컨테이너를 교체하고, 사용자 정의 상태 체크에 응답하지 않는 컨테이너를 제거하며 서비스를 제공할 준비가 될 때까지 클라이언트에 해당 컨테이너를 알리지 않음

 

서비스 디스커버리와 로드 밸런싱
쿠버네티스는 POD에게 고유한 IP주소와 DNS 명을 부여할 수 있고, 네트워크 트래픽을 로드밸런싱하고 배포하여서 배포가 안정적으로 이루어질 수 있음

 

Secret과 구성 관리
암호나 Oauth 토큰 및 SSH 키 등과 같은 중요 정보를 저장하고 관리하고 컨테이너 이미지를 재구성하지 않고, 애플리케이션 구성을 배포 및 업데이트

 

스토리지 오케스트레이션
로컬 스토리지, 퍼블릭 클라우드 공급자 등 원하는 스토리지 시스템을 자동으로 마운트 

 

자동화된 롤아웃과 롤백
애플리케이션 또는 애플리케이션의 설정 변경시 점진적으로 롤아웃을 하고 문제 발생시 변경 사항을 롤백

위와 같이 쿠버네티스는 다양한 기술을 기반으로 컨테이너화된 서비스를 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다. 그리고 쿠버네티스는 PaaS 시스템에서 제공하는 배포, 스케일링, 로드 밸런싱과 같은 기능들을 제공하지만, PaaS 시스템과 다르게 이런 기본 솔루션이 선택적이며 추가나 제거가 쉽다는 특징이 있어 사용자의 선택권과 유연성을 지켜줍니다.

최근 쿠버네티스가 서비스 배포 운영의 표준으로 자리 잡아 가고 있고 쿠버네티스의 기술을 바탕으로 많은 기업들이 클라우드 서비스를 제공하고 있기 때문에 많은 오케스트레이터 중에서도 쿠버네티스의 중요성은 높아져 있는 상황입니다.


참고 자료

1. Kubernetes hompage

2. 조대협의 블로그(쿠버네티스#2 - 개념이해)

 

기고 | 기술지원1팀 최진우 사원

편집 | 프리세일즈-마케팅팀 박병민 대리

 

'IT 보안 > 지식플러스+' 카테고리의 다른 글

대용량 처리를 위한 Virtual Scrolling  (0) 2020.11.04
REST 살펴보기  (0) 2020.10.07
CORS (Cross-Origin Resource Sharing) 이슈  (0) 2020.08.31

관련글 더보기