"Kubernetes" 태그와 연관된 8개의 게시물이 있습니다.
모든 태그 보기이제 디지털 트랜스포메이션과 소프트웨어 도입은 모든 산업에서 필수가 됐습니다. IT, DevOps 환경은 실시간으로 변화하고 있고요. 이에 발맞춰 다양한 기술, 도구, 방법론도 새롭게 나오고 있죠. 아울러 소프트웨어가 기하급수적으로 늘어나면서 운영 환경은 갈수록 복잡해지고 있는데요. 조직에서 이를 관리할 때 어려움이 많습니다. 특히 자원 접근 관리, 권한 관리가 제대로 이뤄지지 않으면 보안 취약점이 발생하고요. 시스템 변조와 데이터 유출 등 위험도 생길 수 있죠.
인프라 접근 관리 도구인 Teleport는 이러한 문제점을 손쉽게 해결하는 수단으로 요즘 주목받습니다. Teleport를 사용하면 SSH, Windows 접속, Kubernetes 클러스터, DBMS(데이터베이스 관리 시스템) 접속, 웹 애플리케이션에 더 쉽게 접근하도록 설정할 수 있는데요. 조직에서 멤버 관리, 인프라 자산 관리, 권한 관리, 보안 준수 등의 복잡성을 해소하고, 시간을 아끼고 싶다면 이 도구를 사용해볼만 합니다.
인포그랩에서는 사내에 Teleport를 도입해 인프라 접근 관리의 안전성과 효율성을 높였고요. 서버를 증설하거나, 팀별 또는 멤버별로 작업 수행 범위가 바뀌더라도 최소 권한을 유지하고, 서버와 환경을 설정하기 더 편리해졌습니다. 이 글에서는 Teleport 기능과 동작 방식, 활용 방법, 인포그랩의 도입 사례를 자세히 소개하겠습니다.
DevOps 개발자들은 쿠버네티스를 설정하고 사용할 때 주로 매니페스트로 작업합니다. YAML 파일이나 Helm 파일을 이용해서 쿠버네티스를 설정하는데요. 오늘은 GUI를 이용하여 쿠버네티스를 설정하고, Node.js의 서버 프레임워크인 NestJS로 개발한 백엔드 애플리케이션을 배포하는 방법을 알아보겠습니다. 클라우드 플랫폼은 GCP를 이용하겠습니다. 우선 클러스터 생성, DB 생성, 클러스터와 DB를 연결함으로써 쿠버네티스 환경을 세팅하고, 세팅 이후에는 배포하고 싶은 애플리케이션을 쿠버네티스 환경에 배포함으로써 외부에서도 접근이 가능하도록 진행하겠습니다.
1. 쿠버네티스 사용 환경 세팅하기
1.1 클러스터 만들기
GCP에서 Kubernetes Engine > 클러스터
로 들어갑니다. 그 다음 만들기
를 클릭한 후 AutoPilot
을 선택합니다. 쿠버네티스를 잘 알거나, ‘이 클러스터를 생성할 때 메모리, CPU가 얼마나 필요한지’ 알아서 아키텍처를 잘 설계할 수 있다면 ‘Standard’로 선택해도 됩니다. 하지만 쿠버네티스가 처음이라면 AutoPilot
을 사용하는 걸 추천합니다. AutoPilot
을 선택한 이후 이름과 리전(서울 : asia-northeast3
)을 선택한 뒤 클러스터를 생성합니다.
‘AutoPilot’은 유저 접속량에 따라 노드 개수를 자동으로 늘리는 기능입니다. 접속자가 없으면 리소스를 낭비하지 않도록 필요없는 노드를 줄이고, 접속자가 많으면 노드를 자동으로 필요한 만큼 늘립니다.
1.2 CloudSQL를 이용한 데이터베이스 생성
클러스터를 생성했으니 이제는 SQL을 이용해 데이터베이스를 생성합니다. 먼저 SQL
대시보드에 접속합니다. 그다음 인스턴스 만들기
를 클릭합니다. 여기서 사용하고 싶은 데이터베이스를 선택합니다. 또 인스턴스 ID
와 비밀번호
를 설정합니다. 시작할 구성 선택
에서는 Development
를 선택합니다. 만약 Production
을 선택하면 컴퓨터가 2대이기 때문에 요금이 2배로 부과됩니다. 리전
은 asia-northeast3
, 영역가용성
은 단일영역
을 선택합니다. 많은 차이가 나지는 않지만, 비용을 절약하려면 머신유형
에서 CPU를 줄여서 선택합니다. DB이므로 공개가 되면 안 되기 때문에 연결
에서는 비공개IP
를 선택합니다. 네트워크
는 default
를 선택합니다. 그다음 인스턴스 만들기
클릭하면 DB 생성이 완료됩니다.
DB를 생성했다면 DB의 데이터베이스를 생성합니다. 데이터베이스 이름
은 쿠버네티스 작업부하
에서 배포했던 환경변수에 입력한 데이터베이스 이름으로 변경하면 됩니다. 만약 작업부하
에서 배포했던 환경변수에 입력한 데이터베이스 이름이 기억나지 않는다면 쿠버네티스의 Kubernetes Engine > 보안 비밀 및 ConfigMap
에 들어가서 확인할 수 있습니다. 구성 맵 세부정보
에 들어가 보면 데이터
부분에서 데이터베이스 이름(=DATABASE_DATABASE
)을 찾을 수 있습니다.
1.3 DB와 클러스터 연결
클러스터와 DB를 생성했으니, 이제는 이 둘을 연결하는 작업을 할 것입니다. SQL과 애플리케이션을 연결하려면 쿠버네티스의 보안 비밀 및 ConfigMap > 데이터
에 gcloudSQL의 DB HOST를 적어야 합니다. 만약 DB HOST가 기억나지 않는다면 SQL 대시보드에서 확인할 수 있습니다. SQL > 개요 > 이 인스턴스에 연결 > 비공개IP 주소
안의 주소를 복사한 뒤 보안 비밀 및 ConfigMap
의 환경변수에 붙여넣기합니다. DB를 생성할 때 DB를 비공개 설정했기 때문에 비공개IP주소
로 공개됩니다. 이렇게 확인한 HOST와 PASSWORD 등 DB 연결 정보를 입력하여 애플리케이션과 DB를 대응합니다. (또한 만약 환경변수를 수정해야 한다면 이곳에서 수정하면 됩니다)
1.4 Container Registry
쿠버네티스에서 도커 이미지를 사용하기 위해서는 도커 이미지를 생성 후 Container Registry에 해당 이미지를 업로드 해야합니다. 업로드 방법은 아래와 같습니다.
docker build .
: 현재 경로에서 이미지 빌드docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
: 도커이미지 경로/태그변경docker push REGISTRY/PROJECT-ID/IMAGE:TAG
: 레지스트리에 이미지 올리기
[TAG]
는 변경된 코드가 있을 때마다 버전을 다르게 해서 업로드 해야 합니다. 태그를 다르게 해야 GCP가 변경을 감지하기 때문입니다.
Kubernetes Engine 클러스터에서 Container Registry 이미지를 등록시키기 위해 image의 경로를 작성한 뒤 코드를 Push 합니다. Push가 완료되면 image: HOSTNAME/PROJECT-ID/IMAGE:TAG
경로를 찾아 해당 태그의 이미지가 Container Registry에 업로드됩니다. Push를 위한 명령어는 아래와 같습니다.
docker-compose -f docker-compose.prod.yaml build
docker-compose -f docker-compose.prod.yaml push
생성된 이미지를 Container Registry에서 확인하실 수 있습니다.