Journey to Security/가상화 48

[VMware] 가상머신 템플릿 만들기: OVF, OVA

가상화 환경을 운영하다 보면 사용 중인 가상 머신(VM)을 다른 서버로 옮기거나, 백업용으로 소장해야 할 일이 생긴다.이때 가장 많이 사용하는 기능이 바로 'Export to OVF/OVA'다.1. OVF와 OVA의 차이점OVF (Open Virtualization Format): 여러 개의 파일이 하나의 폴더에 담긴 형태다. 설정 파일(.ovf), 가상 디스크 파일(.vmdk), 무결성 검사 파일(.mf) 등이 각각 존재한다.OVA (Open Virtualization Archive): OVF의 여러 파일들을 하나로 묶은 '단일 아카이브' 파일이다. 쉽게 말해 OVF 폴더를 하나의 파일로 압축해 놓은 것이다.2. OVF보다 OVA를 권장하는 이유마이그레이션이나 템플릿 배포 시 OVA 형식이 많이 쓰이는..

VMware workstation 가상머신 설치 및 삭제 - 디스크 용량 관리 팁

VMware에서 가상머신을 정리할 때 : Remove 옵션으로 정리하면 VMware workstation 내부에서만 삭제되므로 디스크에는 여전히 남아있게 된다. 따라서 하드디스크에서 완전히 삭제하려면 해당 머신이 poweroff 된 상태에서 Manage > Delete from Disk 를 선택해야 한다. 가상머신을 설정할 때 최대 디스크 용량을 선택하게 되어 있다.최대 용량은 말 그대로 "최대" 용량이다.따라서 100GB를 설정하더라도 실제로 사용한 만큼만 호스트 PC의 용량을 차지하게 된다.오라클 데이터베이스를 구축하게 되면 기본 17GB 정도 소모되기 때문에 가상머신의 최대 디스크 사이즈를 넉넉하게 잡는 것이 좋다. (100GB 정도) VMware는 디스크 생성 시 별도의 옵션을 선택하지 않는 ..

[k8s] 멀티 컨테이너 파드 - 네임스페이스(Namespace) 공유 구조와 사이드카(Sidecar) 패턴

쿠버네티스(Kubernetes)의 가장 기본적인 배포 단위인 파드(Pod)는 일반적으로 하나의 컨테이너를 포함하지만, 용도에 따라 여러 개의 컨테이너를 하나의 파드 안에 묶어서 운영할 수 있다.이를 '멀티 컨테이너 파드'라고 하며, 컨테이너 간 긴밀한 협업이 필요한 경우 매우 효율적이다. 1. 멀티 컨테이너 파드의 개념과 구조파드는 쿠버네티스에서 생성하고 관리할 수 있는 가장 작은 배포 단위다. 원칙적으로는 '1 파드 1 컨테이너' 모델이 권장되지만, 주 프로세스를 돕는 보조 프로세스(로그 수집, 프록시 등)가 필요할 때 멀티 컨테이너 구조를 사용한다.이 구조의 핵심은 네임스페이스(Namespace) 공유다. 아래 그림은 하나의 파드 안에 Nginx 컨테이너와 Ubuntu 컨테이너가 실행되는 경우의 파드..

[k8s] Deployment 배포와 파드 간 통신 테스트

이번 포스팅에서는 쿠버네티스 클러스터의 상태 점검부터 배포, 그리고 내부 네트워크 확인까지 알아본다. 1. 클러스터 초기 상태 및 구성 요소 점검작업 전, 마스터 노드에서 클러스터가 정상적으로 통신하고 있는지, 제어부(Control Plane)의 주요 컴포넌트들이 건강한지 확인해야 한다.# 클러스터 마스터 및 서비스(CoreDNS) 정보 확인kubectl cluster-info Control Plane: 클러스터의 두뇌 역할을 하며, kubectl cluster-info를 통해 API 서버의 엔드포인트를 확인할 수 있다. Kubernetes control plane is running at... :쿠버네티스의 핵심부인 컨트롤 플레인(특히 API 서버)이 192.168.57.100이라는 IP의 6443번..

[k8s] Vagrant 설정파일 분석

Vagrantfile은 VirtualBox를 기반으로 쿠버네티스(Kubernetes) 클러스터 환경을 자동으로 구축하기 위한 설정 파일이다.파일의 내용은 변수 정의, 공통 설정, 마스터 노드 설정, 그리고 워커 노드 설정의 4단계로 구성된다. 1. 전역 변수 설정파일의 최상단에는 클러스터 구축에 필요한 핵심 정보들이 변수로 선언되어 있다.# [1] 전역 변수 설정 구역domain = "kubernetes.lab"control_plane_endpoint = "k8s-master." + domain + ":6443"pod_network_cidr = "10.244.0.0/16"master_node_ip = "192.168.57.100"version = "v1.29" 네트워크 및 도메인: 클러스터 내부에서 사용..

[k8s] 내 파드는 잘 연결되었을까? 쿠버네티스 서비스(Service) 상태 확인

쿠버네티스에서 서비스(Service)는 유동적인 파드 IP들을 하나의 고정된 가상 IP(VIP)로 묶어주는 핵심 역할을 한다.디플로이먼트로 배포한 파드들이 서비스에 올바르게 매핑되었는지, 그리고 로드 밸런싱이 정상적으로 작동하는지 확인하는 명령어를 정리해보자.1. 서비스 리소스 및 가상 IP 확인가장 먼저 클러스터 내의 서비스 목록과 할당된 ClusterIP를 확인한다.이 IP는 외부나 내부 클라이언트가 파드 그룹에 접근하기 위한 단일 진입점이 된다.# 서비스 목록과 할당된 가상 IP, 포트 정보 조회kubectl get svc -o wideCLUSTER-IP: 서비스의 고정 IP다.SELECTOR: 서비스가 파드를 식별하는 기준(Label)을 보여준다. 이 라벨이 파드의 라벨과 일치해야 연결이 성립된다..

[k8s] Vagrant와 VirtualBox를 사용해서 쿠버네티스 클러스터 구축하기

가상화 도구인 Vagrant와 VirtualBox를 사용하여 로컬 환경에 쿠버네티스(Kubernetes, K8s) 클러스터를 구성해보자.1. 가상화 도구 이해하기 - Vagrant, VirtualBox쿠버네티스 클러스터를 자동화된 방식으로 구축하기 위해 아래 도구들이 로컬 머신에 미리 설치되어 있어야 한다.VirtualBox: 가상 머신(VM)을 생성하고 실행하는 하이퍼바이저Vagrant: 설정 파일을 통해 가상 머신 환경을 자동으로 생성하고 배포하는 도구Vagrantfile: 마스터 노드와 워커 노드의 사양, 네트워크 IP, 호스트네임 등이 정의된 파일먼저 Vagrant와 VirtualBox 두 도구의 관계를 이해해야 한다. Vagrant : 가상 머신을 제어하는 관리 도구다. 가상 머신을 직접 생성하..

[k8s] VMware 우분투 머신 세 대로 쿠버네티스 클러스터 구축하기 (+트러블 슈팅)

쿠버네티스를 처음 공부할 때 가장 큰 장벽은 설치 그 자체다. 특히 VMware와 같은 가상화 환경에서 여러 노드를 띄워 클러스터를 구성할 때는 가상 네트워크와 쿠버네티스 내부 통신 구조가 복잡하게 얽히면서 예상치 못한 에러가 계속 뜨곤 한다. 사실 도커 데스크톱 앱을 이용하면 설치 과정이 없이도 편하게 쿠버네티스를 실습할 수 있다. 클릭 몇번만 하면 쿠버네티스 환경이 뚝딱 만들어지는데 왜 굳이 직접 설치를 해야 할까?도커 데스크톱은 쿠버네티스 환경을 추상화하여 제공하므로 내부 동작 원리를 파악하기 어렵다.반면 우분투 머신을 활용해 클러스터를 직접 구축하면 컨트롤 플레인 구성 요소(etcd, API 서버 등)를 개별적으로 설정하며 시스템 아키텍처를 명확히 이해하게 된다.특히 CNI(Container N..

[Docker Swarm] 도커 스택(Stack)을 배포해보자

이전 글에서 준비한 보안 데이터와 설정 객체를 사용하여 스택을 배포해보자.3개의 노드에 서비스를 분산하고, 장애 발생 시 시스템이 어떻게 스스로를 복구하는지도 살펴본다.1. Docker Compose와 Docker Stack의 차이점먼저 도커 컴포즈와 도커 스택의 차이를 알아야 한다.두 도구는 YAML 문법을 공유하지만, 설계 목적과 동작 환경에서 큰 차이가 있다. Docker Compose: 단일 호스트 환경을 위한 도구다. build 지시어를 통해 이미지를 직접 생성할 수 있으나, 여러 노드에 걸친 스케줄링이나 셀프 힐링 기능은 제공하지 않는다.Docker Stack: 도커 스웜 모드의 멀티 노드 환경을 위한 도구다. 사용자가 "목표 상태(Desired State)"를 선언하면, 매니저가 클러스터 전..

[Docker Swarm] 데이터 관리: 시크릿(secret)과 컨피그(config)

도커 스웜 모드에서 애플리케이션을 운영할 때, 가장 먼저 보안 데이터와 설정 파일을 어떻게 관리할 것인지 고려해야 한다.소스 코드에 포함해서는 안 되는 민감한 정보(비밀번호, API 키)와 환경에 따라 변하는 설정 파일(yml, txt)을 안전하고 효율적으로 관리하기 위해 도커는 Secret과 Config라는 객체를 제공한다.1. Docker Secret: 민감 정보의 암호화 저장데이터베이스 패스워드나 API 키와 같은 민감 정보는 docker secret을 통해 스웜 클러스터 내부에 안전하게 저장한다.# 1. 시크릿 생성echo "pswd1234" | docker secret create my_mysql_password - # 2. 시크릿 목록 확인docker secret ls# 3. 시크릿 상세 정보..

1 2 3 4 5