OpenStack을 처음 보면 Nova, Neutron, Cinder, Keystone, Glance… 낯선 이름에 압도됩니다. 하지만 각각이 “클라우드의 한 부품”이라고 생각하면 의외로 명료합니다. 제가 홈랩 랩에서 공부하며 정리한, 핵심 컴포넌트 지도를 공유합니다.
1. 컴포넌트 한눈에
컴포넌트
역할
익숙한 비유
Keystone
인증·권한(Identity)
로그인·출입증
Glance
OS 이미지 저장소
설치 ISO 창고
Nova
컴퓨트(인스턴스 생성)
VM을 찍어내는 공장
Neutron
네트워킹(가상 네트워크)
가상 스위치·라우터
Cinder
블록 스토리지(볼륨)
붙였다 뗐다 하는 디스크
Horizon
웹 대시보드
관리 콘솔
여기에 오브젝트 스토리지 Swift, 오케스트레이션 Heat 등이 더 있지만, 위 6개가 “인스턴스 하나 띄우기”의 핵심입니다.
2. 인스턴스 하나 띄울 때 무슨 일이 벌어지나
컴포넌트가 어떻게 맞물리는지는 “VM 하나 생성” 흐름을 따라가면 단번에 이해됩니다.
1) 사용자 → Keystone 에 로그인 → 토큰 발급 (이후 모든 요청에 사용)
2) Nova 에 "인스턴스 생성" 요청
3) Nova → Glance 에서 OS 이미지 가져옴
4) Nova → Neutron 에 네트워크/포트 요청 (IP 할당)
5) (선택) Nova → Cinder 에서 볼륨 붙임
6) Nova 스케줄러가 적당한 compute 노드 선택 → VM 부팅
7) Horizon 대시보드에서 상태 확인
즉 Keystone(인증)으로 문을 열고 → Nova(컴퓨트)가 지휘하면서 → Glance(이미지)·Neutron(네트워크)·Cinder(볼륨)를 불러다 조립하는 구조입니다. 이 흐름 하나만 머리에 넣으면 나머지가 술술 풀립니다.
컴퓨트 노드: Nova-compute·Neutron 에이전트 — 실제 인스턴스가 여기서 돎
스토리지: Cinder 백엔드(LVM/Ceph 등)
그래서 컨트롤러는 CPU·메모리를, 컴퓨트는 인스턴스용 자원을 더 챙겨줘야 합니다. 제 랩에서 컴퓨트 노드에 RAM을 더 준 이유가 이것입니다.
4. 공부 순서 추천
Keystone부터: 인증이 안 되면 아무것도 안 됩니다. 토큰·프로젝트·롤 개념 먼저.
Glance → Nova: 이미지 올리고 인스턴스 하나 띄워보기(성취감 큼).
Neutron: 가장 어렵습니다. 네트워크가 되면 절반은 끝난 것.
Cinder: 볼륨 붙이기까지 하면 기본은 완성.
5. 정리
OpenStack은 이름이 많아 겁나 보이지만, “인증(Keystone) → 컴퓨트(Nova)가 이미지·네트워크·볼륨을 조립”이라는 큰 그림 하나면 충분히 잡힙니다. 각 컴포넌트를 따로 외우지 말고, 인스턴스 생성 흐름 속에서 이해하세요. 홈랩 랩에서 직접 인스턴스를 한 번 띄워보면 이 모든 게 손에 익습니다.
OpenStack 프로젝트 테넌트 격리는 멀티테넌트 환경에서 가장 먼저 다져야 하는 기본기입니다. 겉으로는 프로젝트만 나누면 끝나 보이지만, 실제 운영에 들어가면 네트워크, 권한, 이미지, 볼륨, 스케줄링까지 같이 봐야 하더라고요. 저도 초반에는 프로젝트만 분리하면 충분하다고 생각했는데, 나중에 보니 공유 네트워크 하나가 경계를 흐리는 경우가 있었습니다.
이번 글에서는 OpenStack 프로젝트 테넌트 격리를 어디까지 논리적으로 나눌지, 어디서부터 물리적 성격의 분리를 추가할지 비교해보겠습니다. 체크리스트만 훑는 글이 아니라, OpenStack 보안 관점에서 무엇을 먼저 적용해야 하는지와 테넌트 분리 수준별 운영 비용까지 같이 정리해보겠습니다.
프로젝트, 네트워크, 하이퍼바이저, 스토리지 계층이 어떻게 분리되는지 한눈에 보여주는 아키텍처 이미지입니다.
왜 OpenStack 프로젝트 테넌트 격리에서 프로젝트만 나누면 끝이 아닐까
쉽게 말해 프로젝트는 행정 구역에 가깝고, 실제 경계는 따로 있습니다. 사용자는 프로젝트 기준으로 자원을 보지만, 패킷 흐름, 이미지 접근 권한, 볼륨 연결, 컴퓨트 노드 배치까지 자동으로 다 분리되지는 않거든요. 그래서 프로젝트 분리는 출발점일 뿐이고, 그 바깥 계층을 같이 설계해야 실전에서 흔들리지 않습니다.
Identity: 누가 어떤 프로젝트에 들어갈 수 있는지 결정합니다.
Network: 테넌트 간 동서 트래픽을 제어하는 핵심 축입니다.
Compute: 같은 하이퍼바이저에 섞을지, 분리할지 정합니다.
Storage: 이미지와 볼륨이 의도치 않게 공유되지 않도록 막아야 합니다.
Policy/RBAC: 운영자 권한이 지나치게 넓으면 격리 설계가 쉽게 무너집니다.
운영해보면 사고는 화려한 기능보다 기본 설정 하나를 공유 상태로 둔 채 지나간 부분에서 더 자주 납니다. 특히 Horizon과 CLI로 만든 리소스가 섞이면 누가 무엇을 어떤 의도로 공유했는지 추적이 꽤 까다롭습니다. 이 지점이 생각보다 중요하더라고요.
OpenStack 프로젝트 테넌트 격리 전략, 4단계로 나눠서 보기
현업에서는 보통 4단계로 나눠 봅니다. 아래 표는 설계 검토할 때 바로 가져다 쓰기 좋은 기준에 가깝습니다.
전략
핵심 방식
격리 강도
운영 복잡도
추천 상황
주의 포인트
기본 논리 분리
프로젝트, 사용자, 보안 그룹 분리
중간
낮음
사내 개발/테스트 환경
공유 네트워크나 공개 이미지가 남아 있으면 경계가 약해집니다.
네트워크 중심 분리
프로젝트별 네트워크, 라우터, RBAC 최소화
높음
중간
팀 간 독립 운영, 고객 분리
외부망 연결 방식과 Floating IP 정책을 같이 봐야 합니다.
컴퓨트 배치 분리
Host Aggregate, Availability Zone 분리
높음
중간~높음
규제 대응, noisy neighbor 완화
스케줄링 정책과 리소스 부족 시 예외 처리 기준이 필요합니다.
스토리지/암호화 포함 강한 분리
볼륨 타입 분리, 암호화, 이미지 접근 제한
매우 높음
높음
민감 데이터, 외부 고객 서비스
키 관리와 백업 경로까지 같이 분리해야 효과가 살아납니다.
핵심은 단순합니다. OpenStack 보안은 기능 하나로 끝나지 않습니다. 프로젝트 분리는 시작이고, 네트워크와 권한 모델을 어떻게 묶느냐가 실제 체감 보안을 좌우합니다.
기본 골격: 프로젝트, 사용자, 권한부터 단단하게
처음 설계할 때는 프로젝트를 조직 단위로만 나누기 쉬운데, 실제로 써보면 환경 단위(dev, stage, prod)까지 별도 프로젝트로 자르는 편이 운영이 훨씬 편합니다. 같은 팀이라도 운영 환경과 개발 환경이 섞이면 이미지 공유나 보안 그룹 재사용이 자연스럽게 생기거든요. 나중에 감사나 장애 대응 때 차이가 꽤 크게 납니다.
프로젝트를 환경 또는 고객 기준으로 분리합니다.
사용자는 최소 권한 원칙에 맞춰 필요한 프로젝트에만 넣습니다.
운영자 계정은 범용 admin 하나로 뭉개지 말고 역할을 나눕니다.
공유 리소스는 허용보다 금지를 기본값으로 잡습니다.
openstack project create prod-team-a
openstack user create --project prod-team-a --password-prompt teama-admin
openstack role add --project prod-team-a --user teama-admin member
openstack project create dev-team-a
openstack user create --project dev-team-a --password-prompt teama-dev
openstack role add --project dev-team-a --user teama-dev member
openstack role assignment list --project prod-team-a --names
openstack quota show prod-team-a
위 명령은 모두 OpenStackClient에서 일반적으로 사용하는 기본 흐름입니다. 다만 수동으로 반복 생성하기 시작하면 프로젝트마다 quota나 역할 구성이 조금씩 달라지기 쉽습니다. 이게 나중에 제일 사람을 힘들게 하더라고요.
판단 기준도 같이 기억해두면 좋습니다.
role assignment list 결과에 예상하지 못한 admin 계열 역할이 보이면 권한 과다를 먼저 의심합니다.
quota show가 비어 있거나 기본값만 따라가면 특정 테넌트의 자원 폭주를 제어하기 어렵습니다.
운영자 공용 계정을 여러 팀이 함께 쓰면 추적성이 크게 떨어집니다.
OpenStack 프로젝트 테넌트 격리에서 실전 차이는 네트워크 분리에서 난다
프로젝트를 나눠도 네트워크가 공유되면 체감상 같은 건물에 문패만 바꿔 다는 수준이 됩니다. 그래서 멀티테넌트 환경에서는 프로젝트별 자체 네트워크와 자체 라우터를 기본값으로 두는 편이 안전합니다. 공유 네트워크나 RBAC 공유는 예외 승인 방식으로 돌리는 게 번거로워 보여도, 사고 예방 효과는 확실합니다.
이 구간에서 자주 나오는 실수도 비슷합니다. 외부 게이트웨이만 다르면 충분하다고 생각하거나, 보안 그룹 규칙을 여러 프로젝트에서 관성적으로 복사해 쓰는 경우죠. 처음엔 편한데 규칙이 커질수록 누가 왜 열었는지 설명이 안 됩니다.
각 프로젝트가 독립된 네트워크와 라우터를 가지며, 외부망은 공용이더라도 내부 통신 경계는 분리되는 구조를 보여주는 이미지입니다.
운영하다 보면 테스트 서버 때문에 0.0.0.0/0로 SSH를 잠깐 열어뒀는데, 비슷한 규칙이 운영 프로젝트에도 따라 들어간 경우가 꼭 생깁니다. 이런 경험 한 번쯤 있으실 겁니다. 그래서 보안 그룹은 템플릿화하되, 프로젝트별 별도 객체로 관리하는 편이 훨씬 낫더라고요.
재현 가능한 시나리오 하나
예를 들어 팀 A와 팀 B가 같은 클라우드를 쓰고 있는데, 운영자가 편의를 위해 하나의 공유 네트워크를 두 프로젝트에 RBAC로 열어뒀다고 가정해보겠습니다. 그 상태에서 두 팀의 인스턴스가 같은 L2 세그먼트에 붙고 보안 그룹 규칙까지 느슨하면, 동서 통신이 예상보다 넓게 열릴 수 있습니다. 이럴 때는 아래 순서로 확인하면 됩니다.
openstack network show <network>로 네트워크 소유자와 공유 상태를 확인합니다.
openstack network rbac list에서 어떤 프로젝트에 접근이 열려 있는지 봅니다.
openstack port list --project <project>로 각 프로젝트 포트가 어느 네트워크에 붙었는지 추적합니다.
여기서 중요한 건 숫자보다 의도하지 않은 연결 관계입니다. 보안 진단은 평균값을 보는 작업이라기보다 예외 케이스를 집요하게 확인하는 작업에 가깝습니다.
한 단계 더: 컴퓨트와 스토리지까지 분리해야 하는 경우
여기서부터는 고객 성격에 따라 판단이 갈립니다. 같은 하이퍼바이저에 다른 고객 워크로드가 같이 올라가도 되는지, 볼륨 백엔드가 완전히 공용이어도 되는지 따져봐야 하거든요. 규제 대응이나 민감한 데이터가 있다면 논리 분리만으로는 설명이 부족한 경우가 많습니다.
Availability Zone: 프로젝트별 또는 업무별 배치 경계를 만듭니다.
Host Aggregate: 특정 컴퓨트 노드 그룹으로 스케줄링합니다.
Volume Type: 성능, 백엔드, 암호화 정책을 나눕니다.
Image 접근 제어: 공개 이미지와 공유 이미지를 최소화합니다.
openstack aggregate create team-a-aggregate
openstack aggregate add host team-a-aggregate compute-01
openstack aggregate add host team-a-aggregate compute-02
openstack aggregate set --zone team-a-az team-a-aggregate
openstack volume type list
openstack image list --public
openstack image list --shared
openstack image show <image-id>
명령 자체는 단순해 보여도 운영 포인트는 따로 있습니다. 스케줄링 실패 로그를 어떻게 해석할지 기준을 정해두지 않으면, 인스턴스 생성 실패를 무조건 리소스 부족으로만 보기 쉽습니다. 실제로는 aggregate 메타데이터나 AZ 선택이 맞지 않아 배치가 막히는 경우도 많습니다.
이미지 공개 설정도 꼭 봐야 합니다. 프로젝트 격리를 열심히 해놨는데 public 또는 shared 이미지 안에 민감한 에이전트 설정이나 초기 계정 스크립트가 들어 있으면 다른 종류의 사고가 됩니다. 그래서 golden image를 쓰더라도 공개 범위는 아주 좁게 잡는 편이 안전합니다.
특정 프로젝트가 전용 컴퓨트 노드 그룹과 가용 영역으로 스케줄링되는 모습을 설명하는 이미지입니다.
자주 봤던 문제와 해결 방법
문서만 보면 구조가 깔끔해 보이지만, 실무에서는 늘 예외가 먼저 튀어나옵니다. 아래 네 가지는 멀티테넌트 환경에서 정말 자주 만나는 문제입니다.
1. 공유 리소스가 남아 있는 경우
가장 흔합니다. 네트워크, 이미지, 보안 그룹 템플릿 운영 방식 중 하나라도 사실상 공유 상태로 굴러가면 경계가 흐려집니다. 해결책은 단순합니다. 기본값을 비공유로 두고, 필요한 경우만 승인 절차로 열기입니다.
2. 운영자 권한이 너무 넓은 경우
도와주려고 준 권한이 나중에는 우회 경로가 됩니다. 도메인 관리자와 클라우드 관리자 역할을 분리하지 않으면 프로젝트 격리의 의미가 금방 약해집니다. 이 부분은 생각보다 체감 차이가 큽니다.
3. 보안 그룹을 방화벽처럼 과신하는 경우
보안 그룹은 중요하지만 전부는 아닙니다. 라우팅, 포트 소유, Floating IP 정책, 메타데이터 서비스 접근 제어까지 같이 봐야 합니다. 보안 그룹 하나로 다 해결하려고 하면 운영이 오히려 꼬입니다.
4. 로그는 있는데 읽는 기준이 없는 경우
이 문제도 꽤 큽니다. 예를 들어 인스턴스가 의도한 AZ에 올라가지 않았다면, 단순 실패로 넘기지 말고 격리 정책이 실제로 작동 중인지 또는 예외 정책이 필요한지를 같이 판단해야 합니다. 장애 대응 문서에는 아래 체크 순서를 넣어두면 도움이 됩니다.
네트워크 문제면 포트 소속 프로젝트와 보안 그룹 규칙부터 확인
배치 문제면 AZ, aggregate, flavor extra spec 사용 여부 확인
스토리지 문제면 volume type과 백엔드 정책 일치 여부 확인
처음엔 체크 항목이 많아 보여도, 순서를 정해두면 대응 속도가 확실히 빨라집니다. 이런 건 실제로 해보면 차이가 바로 느껴집니다.
검증은 이렇게 합니다: 설정 확인보다 경계 확인
OpenStack 프로젝트 테넌트 격리가 잘 됐는지 보려면 리소스가 생성됐는지만 보면 부족합니다. 다른 프로젝트 사용자 입장에서 안 보여야 할 것이 정말 안 보이는지, 붙으면 안 되는 네트워크가 실제로 안 붙는지까지 확인해야 합니다. 결국 중요한 건 설정값이 아니라 경계가 의도대로 작동하는지입니다.
프로젝트 A 계정으로 로그인해 프로젝트 B의 네트워크, 인스턴스, 볼륨이 보이는지 확인합니다.
RBAC 목록에서 예상하지 못한 공유 규칙이 없는지 확인합니다.
공개 이미지와 공유 이미지 목록을 각각 점검합니다.
보안 그룹 규칙에 과도한 Any 규칙이 없는지 확인합니다.
openstack server list --project prod-team-a
openstack network list --project prod-team-a
openstack port list --project prod-team-a
openstack volume list --project prod-team-a
openstack image list --private
openstack image list --public
openstack image list --shared
openstack network rbac list
해석 기준은 이렇습니다.
보이면 안 되는 타 프로젝트 리소스가 보이면 Identity 또는 공유 정책 점검이 먼저입니다.
프로젝트 전용 네트워크가 아닌 공용 네트워크에 포트가 붙어 있으면 설계 예외인지 설정 누락인지 바로 구분해야 합니다.
공개 이미지나 공유 이미지가 과도하게 많으면 이미지 배포 체계를 다시 잡는 편이 좋습니다.
보안 그룹에 광범위한 인바운드 규칙이 있으면 앞단 제어 계층까지 같이 검토하는 게 안전합니다.
프로젝트별 리소스 목록, RBAC 규칙, 공개 이미지 수를 점검하는 운영 검증 화면을 표현한 이미지입니다.
비교해보면, 어떤 전략을 선택해야 할까
이쯤 되면 선택 기준이 조금 선명해집니다. 모든 환경에 최고 강도의 분리를 넣는다고 꼭 좋은 건 아닙니다. 운영 복잡도가 확 올라가거든요. 반대로 고객 서비스나 민감 데이터 환경인데 기본 논리 분리만 두는 것도 위험합니다.
환경
추천 격리 수준
이유
추가 권고
사내 개발/테스트
프로젝트 + 네트워크 분리
운영 부담을 크게 늘리지 않으면서도 사고 범위를 줄일 수 있습니다.
공유 리소스 승인 절차는 반드시 둡니다.
운영 서비스
프로젝트 + 네트워크 + 이미지 통제
서비스 간 영향 최소화와 변경 추적이 중요합니다.
보안 그룹 템플릿과 quota 정책을 같이 표준화합니다.
외부 고객 멀티테넌트
프로젝트 + 네트워크 + 컴퓨트 분리
고객 간 경계와 noisy neighbor 대응이 필요합니다.
AZ, aggregate, 운영자 역할 분리를 같이 적용합니다.
민감 정보/규제 환경
전 계층 분리 + 스토리지 암호화
논리 분리만으로는 설명 책임이 부족할 수 있습니다.
백업, 키 관리, 감사 로그 보존 정책까지 묶어 설계합니다.
이 표는 정답표라기보다, 실제 운영에서 어디까지 해야 충분한지 가늠하는 기준점에 가깝습니다. 저도 가벼운 실험 환경에서는 단순하게 갔지만, 운영 환경으로 갈수록 네트워크와 권한 모델을 먼저 단단히 다지는 쪽이 결과가 좋았습니다.
FAQ: OpenStack 프로젝트 테넌트 격리에서 헷갈리는 포인트
프로젝트만 나누면 테넌트 분리가 끝난 건가요?
아닙니다. 프로젝트는 시작점입니다. 네트워크 공유, 이미지 공개 또는 공유, 운영자 권한 범위가 남아 있으면 경계가 충분하지 않을 수 있습니다.
보안 그룹만 잘 쓰면 되지 않나요?
보안 그룹은 중요하지만 전부가 아닙니다. 라우터, RBAC, 이미지 접근, 컴퓨트 배치까지 같이 봐야 진짜 클라우드 보안이 됩니다.
가용 영역 분리는 언제 필요할까요?
고객별 워크로드 분리, 규제 대응, 성능 간섭 완화가 필요할 때 고려합니다. 다만 운영 복잡도가 올라가니 일반 개발 환경에는 과할 수 있습니다.
현업 기준으로 권고를 딱 정리하면
팀 내부 개발 환경이라면 프로젝트 분리, 프로젝트별 네트워크, 최소 권한 모델까지만 해도 효과가 큽니다. 이 조합이 운영 부담 대비 효율이 가장 좋습니다. 반면 외부 고객이 함께 쓰는 멀티테넌트 클라우드라면 여기서 멈추기 아쉽습니다. 그 경우에는 네트워크 공유 금지, 이미지 공개 최소화, AZ 또는 Host Aggregate 기반 배치 분리까지 넣는 편이 맞습니다.
민감 데이터가 있는 서비스라면 더 분명합니다. 스토리지 암호화와 볼륨 타입 분리까지 포함해 전 계층으로 끌고 가는 게 낫습니다. 운영은 조금 복잡해져도, 사고 이후 설명 비용보다 훨씬 싸게 먹힙니다. 다음 글에서는 Keystone 역할 설계와 서비스 계정 분리 패턴도 다뤄보겠습니다. 이전 글의 보안 그룹 운영 기준과 함께 보면 흐름이 더 잘 잡힐 겁니다.
개발, 운영, 외부 고객, 민감 정보 환경별로 어떤 격리 전략을 선택해야 하는지 요약한 인포그래픽 이미지입니다.
OpenStack 프라이빗 클라우드 보안 이야기는 평소엔 좀 뒤로 밀리기 쉽습니다. 서비스가 잘 돌고 있으면 당장 체감이 안 되거든요. 그런데 클라우드 보안 감사 한 번 들어오면 분위기가 바로 달라집니다. 계정 정책, API TLS, 로그 보관, 이미지 무결성 같은 항목이 한꺼번에 쏟아지니까요. 저도 홈랩과 실무 환경에서 비슷한 점검을 여러 번 겪어봤는데, 처음엔 “이건 설정 파일 몇 개만 손보면 되겠지” 싶었거든요. 근데 막상 들어가 보니 Keystone(키스톤, 인증/인가), Nova(노바, 컴퓨트), Neutron(뉴트론, 네트워크), RabbitMQ(래빗MQ, 메시지 브로커)까지 서로 얽혀 있어서 삽질 좀 했습니다 ㅎㅎ
이번 글은 특정 벤더 보고서 하나를 요약하는 방식보다는, 최근 감사에서 반복적으로 지적되는 OpenStack 보안 항목을 공식 Security Guide와 체크리스트 기준으로 묶어서 정리한 내용입니다. 즉, 보고서가 달라도 결국 자주 걸리는 포인트는 비슷하더라고요. 그래서 오늘은 OpenStack 프라이빗 클라우드 보안을 실제 운영 관점에서 어떻게 강화할지, 제가 실무에서 우선순위를 잡는 방식으로 풀어보겠습니다.
쉽게 말해 감사는 “설정이 있느냐”보다 보안 경계(Security Boundary, 보안 경계)가 실제로 분리되어 있느냐를 봅니다. OpenStack은 컴포넌트가 많아서, 한 군데만 HTTPS를 켰다고 끝나지 않거든요. 예를 들어 Horizon(호라이즌, 대시보드)은 TLS를 쓰는데 서비스 간 내부 통신은 평문으로 남아 있거나, RabbitMQ 인증서는 넣었는데 호스트네임 검증은 꺼져 있는 식입니다. 겉으로는 안전해 보여도 감사에서는 바로 티가 납니다.
제가 최근 점검할 때도 지적이 많이 나온 항목은 아래 네 가지였습니다.
관리망과 외부망 분리 부족: 내부 API가 외부 엔드포인트를 타는 경우
과도한 권한: 관리자 계정 공유, 서비스 계정 권한 과다
로그는 있는데 감사 추적이 어려움: 중앙 수집과 상관분석 부재
이미지/메시지 경로 무결성 미흡: 이미지 서명 검증, 메시지 브로커 TLS 검증 미설정
2. OpenStack 보안 베스트 프랙티스, 핵심만 먼저 잡아보겠습니다
OpenStack 보안 베스트 프랙티스를 한 줄로 줄이면 이겁니다. “외부 공개 구간만 막지 말고, 내부 제어면(Control Plane, 제어 평면)까지 신뢰하지 말자.” 저도 처음엔 내부망이면 괜찮지 않나 싶었는데, 실제로는 운영자 실수나 계정 탈취가 더 무섭더라고요.
감사 항목
자주 보이는 문제
즉시 대응
장기 대응
인증/인가
관리자 계정 공유, MFA 미적용
관리자 계정 분리, 외부 IdP 연동 검토
RBAC 재설계, 페더레이션 적용
통신 보안
내부 API 평문, 인증서 검증 비활성화
HTTPS 강제, internal endpoint 지정
전 구간 TLS, 인증서 수명주기 자동화
감사 로그
노드별 로그 분산, 이벤트 표준화 부족
중앙 로그 수집
CADF 기반 감사 추적 체계화
무결성
이미지 검증 없음, 설정 파일 변경 감시 없음
서명 검증, 권한 점검
FIM, 골든 이미지 파이프라인
여기서 중요한 포인트! 감사 대응은 문서부터 쓰는 게 아니라 데이터 흐름부터 그려야 합니다. 누가 로그인하고, 어떤 API를 타고, 어떤 메시지 브로커를 지나, 최종적으로 어떤 로그가 남는지 보셔야 합니다. 이 흐름이 안 보이면 체크리스트만 돌려도 자꾸 빠지는 항목이 생깁니다.
3. 실전 구현 1: 계정, 엔드포인트, TLS부터 정리합니다
제가 직접 해보니 제일 효과가 큰 첫 단계는 “접속면 줄이기”였습니다. 즉, 공개 엔드포인트와 내부 엔드포인트를 분리하고, 서비스 간 통신이 public URL이 아니라 internal URL을 쓰도록 강제하는 겁니다.
서비스 카탈로그(Service Catalog, 서비스 목록)에서 internal endpoint를 분리합니다.
각 서비스 설정에서 Keystone 인증 URL과 연동 URL이 HTTPS인지 확인합니다.
이 작업은 단순해 보여도 효과가 큽니다. 내부 관리 트래픽이 외부 공개 주소를 타지 않게 되니까요. 특히 프록시나 로드밸런서가 여러 겹일 때 감사 추적도 훨씬 쉬워집니다.
public endpoint와 internal endpoint를 분리하고 서비스 간 통신을 HTTPS로 고정한 예시 구성입니다.
4. 실전 구현 2: RabbitMQ, 로그, 이미지 무결성을 같이 보셔야 합니다
OpenStack은 API만 안전해도 끝이 아닙니다. 실제로 서비스끼리 대화하는 길목은 RabbitMQ 같은 메시지 브로커인 경우가 많거든요. 여기 TLS를 켜도 인증서 체인만 보고 호스트네임 검증을 안 하면 허점이 남습니다. 최근 oslo.messaging 릴리스 노트에서도 이 부분이 분명히 언급됐습니다. 그래서 제가 운영할 때는 브로커 TLS와 로그 표준화를 같이 묶어서 봅니다.
# /etc/nova/nova.conf 또는 공통 oslo.messaging 설정
[oslo_messaging_rabbit]
ssl = true
ssl_ca_file = /etc/ssl/certs/openstack-ca.pem
ssl_cert_file = /etc/ssl/certs/client.pem
ssl_key_file = /etc/ssl/private/client-key.pem
ssl_enforce_hostname_verification = true
단, 이 옵션은 배포판 패키지 버전에 따라 지원 여부가 다를 수 있습니다. 그래서 바로 적용하기 전에 패키지 changelog나 릴리스 노트를 꼭 보셔야 합니다. 저도 이거 모르고 넣었다가 서비스 재시작만 반복한 적이 있었네요.
감사 로그 쪽은 Keystone의 CADF(Cloud Auditing Data Federation, 클라우드 감사 이벤트 표준) 포맷을 적극 검토할 만합니다. 사람이 보기엔 조금 딱딱하지만, SIEM(보안 정보 이벤트 관리)으로 넘길 때 훨씬 정리가 잘 됩니다.
처음엔 이게 너무 과한가 싶었는데, 골든 이미지(Golden Image, 표준 이미지)를 운영하는 환경에서는 진짜 편하더라고요. 누가 어떤 이미지를 올렸는지, 검증됐는지 흐름이 분명해집니다.
메시지 브로커 TLS 보호와 Keystone CADF 감사 로그가 중앙 수집 시스템으로 모이는 흐름입니다.
5. 실전 구현 3: 파일 권한과 노드 하드닝은 기본인데 가장 많이 놓칩니다
이건 너무 기본 같아서 오히려 빼먹습니다. 그런데 공식 Security Checklist를 보면 Keystone, Nova, Neutron 설정 파일의 소유권과 권한을 아주 명확하게 확인하라고 하거든요. 감사에서도 이건 빠지지 않습니다.
stat -L -c "%U %G %a" /etc/keystone/keystone.conf
stat -L -c "%U %G %a" /etc/nova/nova.conf
stat -L -c "%U %G %a" /etc/neutron/neutron.conf
find /etc/keystone /etc/nova /etc/neutron -type f -perm /027 -ls
제가 주로 보는 기준은 이렇습니다.
서비스 계정과 그룹이 올바른지 확인
설정 파일 권한이 과도하게 열려 있지 않은지 확인
SELinux(셀리눅스, 강제 접근 통제)나 AppArmor 정책과 충돌 없는지 확인
FIM(File Integrity Management, 파일 무결성 감시) 대상에 핵심 설정 파일 포함
여기서 많이 겪는 문제는 자동화 도구가 재배포하면서 권한을 널널하게 바꿔버리는 경우입니다. 특히 템플릿 한 군데 잘못 두면 전체 노드가 같은 실수를 반복합니다. 그래서 저는 배포 후 검증 명령을 CI 파이프라인이나 운영 점검 스크립트에 꼭 넣습니다.
6. ⚠️ 감사 때 자주 터지는 트러블슈팅
이 섹션은 실전에서 진짜 많이 부딪히는 부분입니다.
6-1. HTTPS는 켰는데 인증 실패가 납니다
대부분 CA 체인이나 호스트네임 불일치입니다. 인증서를 넣었다고 끝이 아니고, 서비스가 접속하는 URL과 인증서 SAN(Subject Alternative Name, 주체 대체 이름)이 맞아야 합니다.
6-2. 내부 통신을 HTTPS로 바꾸니 서비스 등록은 됐는데 호출이 꼬입니다
이 경우 public endpoint는 바꿨는데, 개별 서비스 설정은 여전히 외부 주소를 보고 있는 경우가 많습니다. 카탈로그와 각 서비스 설정 파일을 둘 다 봐야 합니다.
6-3. 로그는 모이는데 감사 보고서에서 추적성이 부족하다고 나옵니다
이건 단순 보관이 아니라 상관관계(Correlation, 상관 분석) 문제입니다. 사용자 로그인, 토큰 발급, 인스턴스 생성, 볼륨 연결, 보안그룹 변경 이벤트를 하나의 흐름으로 이어서 볼 수 있어야 하거든요. 그래서 Keystone 이벤트, API 로그, 하이퍼바이저 로그를 따로 보지 말고 묶어야 합니다.
6-4. 보안 강화 후 성능이 걱정됩니다
맞습니다. TLS와 추가 로깅은 비용이 있습니다. 그래서 저는 처음부터 전부 켜기보다 인터넷 노출 구간, 관리자 구간, 메시지 브로커, 이미지 검증 순서로 우선순위를 잡습니다. 한 번에 다 바꾸면 장애 원인 분석이 어려워집니다.
7. 검증은 이렇게 하시면 됩니다
보안 설정은 “넣었다”가 아니라 “검증됐다”로 끝내야 합니다. 제가 보통 마지막에 확인하는 체크는 아래와 같습니다.
모든 핵심 서비스 엔드포인트가 HTTPS인지 확인
서비스 설정의 insecure = true 흔적 제거 확인
메시지 브로커 TLS 연결 및 인증서 검증 확인
CADF 또는 중앙 로그에서 관리자 행위 추적 가능 여부 확인
서명되지 않은 이미지가 정책상 차단되는지 확인
openstack endpoint list --long | egrep "https|Region"
grep -R "insecure *= *true" /etc/keystone /etc/nova /etc/neutron /etc/glance
openssl s_client -connect rabbitmq.internal.example:5671 -servername rabbitmq.internal.example
openstack image list
openstack server list
완료 후 대시보드와 CLI 둘 다 테스트해보세요. Horizon만 되고 CLI가 안 되거나, 반대로 API는 되는데 메타데이터 프록시가 깨지는 경우가 있습니다. 저도 이 단계에서 “드디어 됐다!” 했다가 보안그룹 갱신이 안 되는 걸 뒤늦게 발견한 적이 있었거든요.
보안 점검 항목이 통과되고 중앙 로그에서 관리자 행위를 추적할 수 있는 결과 화면 예시입니다.
8. 정리: OpenStack 프라이빗 클라우드 보안은 순서가 중요합니다
OpenStack 프라이빗 클라우드 보안은 기능을 많이 넣는 게임이 아닙니다. 순서를 잘 잡는 작업에 가깝습니다. 제가 실제로 운영하면서 느낀 우선순위는 이렇습니다. 계정 통제 → 내부 API TLS → 메시지 브로커 보호 → 감사 로그 표준화 → 이미지 무결성 → 파일 무결성 감시. 이 순서로 가면 감사 대응도 수월하고, 장애가 나도 어디서 꼬였는지 찾기 편합니다.
혹시 지금 프라이빗 클라우드 감사 대응을 준비 중이시라면, 문서부터 만들기보다 먼저 엔드포인트와 계정, 로그 흐름을 그림으로 그려보세요. 그 다음에 체크리스트를 맞추면 훨씬 빨라집니다. 다음 글에서는 Barbican(바비칸, 비밀 관리 서비스)과 이미지 서명 체계를 조금 더 깊게 다뤄보겠습니다. 이전에 정리한 리눅스 하드닝 글이 있으시면 그 흐름과 같이 보셔도 연결이 잘 됩니다.
계정 통제, TLS, 로그, 이미지 무결성, 파일 무결성 감시 순서로 정리한 대응 우선순위 요약입니다.
9. 자주 묻는 질문
Q1. 작은 홈랩에도 이렇게까지 해야 할까요?
전부 한 번에 할 필요는 없습니다. 다만 관리자 계정 분리, HTTPS, 설정 파일 권한 점검은 작은 환경에서도 바로 체감됩니다.
Q2. 클라우드 보안 감사에서 가장 빨리 점수 올리는 항목은 뭔가요?
보통은 내부 API TLS, 관리자 접근 통제, 중앙 로그 수집입니다. 이 세 개가 눈에 잘 보이고 재현도 쉽습니다.
Q3. OpenStack 보안 베스트 프랙티스를 어디서 시작하면 좋을까요?
공식 Security Checklist를 서비스별로 돌려보는 게 제일 현실적입니다. Keystone, Nova, Neutron부터 보시면 됩니다.
DevStack OpenStack 연동 문제는 생각보다 자주 만납니다. 설치는 얼추 끝난 것 같은데 인스턴스가 안 뜨고, 네트워크가 안 붙고, 이미지 조회는 되는데 부팅은 실패하고, 로그를 보면 Keystone(키스톤, 인증 서비스) 쪽 인증 에러가 한 줄씩 튀어나오거든요. 저도 홈랩에서 개발 환경을 구성하면서 이런 삽질을 꽤 했더라고요. 처음엔 서비스가 각각 살아 있으면 되는 줄 알았는데, 실제로는 서비스 간 엔드포인트(endpoint, 접속 지점), 메시지 큐(message queue), 데이터베이스(database), 서비스 사용자(service user) 권한이 한 군데만 어긋나도 전체 흐름이 무너집니다.
이번 글은 제품 홍보나 이론 소개가 아니라, 제가 직접 DevStack 개발 환경에서 반복적으로 겪었던 OpenStack 서비스 연동 문제를 어떤 순서로 확인하고 풀었는지 정리한 실전형 트러블슈팅 가이드입니다. 혹시 DevStack 트러블슈팅 하다가 로그만 한참 보고 계셨다면, 이 순서대로 점검해 보시면 시간 꽤 아끼실 수 있을 겁니다.
Keystone, Nova, Neutron, Glance, Cinder가 DevStack 환경에서 어떻게 연결되는지 한눈에 보여주는 개요 이미지입니다.
1. 왜 DevStack 개발 환경에서 OpenStack 서비스 연동 문제가 자주 생길까
쉽게 말해 DevStack은 빠르게 OpenStack을 올려서 개발과 검증을 하기 위한 환경입니다. 그래서 편한 점도 많지만, 반대로 서비스가 많고 연결 지점도 많습니다. 예를 들어 Nova(노바, 컴퓨트 서비스)가 인스턴스를 띄우려면 Keystone에서 토큰 인증을 받고, Glance(글랜스, 이미지 서비스)에서 이미지를 읽고, Neutron(뉴트론, 네트워크 서비스)에서 포트를 만들고, 필요하면 Cinder(신더, 블록 스토리지)까지 붙어야 하거든요.
즉, 화면에서 보이는 실패 증상은 하나인데 원인은 여러 군데일 수 있습니다. 여기서 중요한 포인트! 증상 기준으로 보지 말고 요청 흐름 기준으로 봐야 빨리 잡힙니다. 저도 처음엔 Horizon(호라이즌, 대시보드)에서 에러만 보고 있었는데, 실제 원인은 RabbitMQ(래빗MQ, 메시지 브로커) 연결 문제였던 적도 있더라고요.
2. OpenStack 서비스 연동을 흐름으로 이해하기
OpenStack 서비스 연동을 너무 어렵게 볼 필요는 없습니다. 요청 하나가 아래처럼 지나간다고 생각하시면 됩니다.
사용자 또는 CLI가 Keystone에 인증 요청을 보냅니다.
인증이 끝나면 서비스 카탈로그(service catalog, 서비스 목록)와 토큰을 받습니다.
Nova가 Glance, Neutron, Placement 같은 다른 서비스와 통신합니다.
백엔드에서는 메시지 큐와 데이터베이스가 중간 연결을 받쳐줍니다.
문제가 생기면 API 응답, 서비스 로그, 백엔드 연결 상태 중 하나가 어긋납니다.
구성 요소
역할
연동 실패 시 흔한 증상
Keystone
인증/권한/엔드포인트 관리
401 Unauthorized, endpoint not found
Nova
가상머신 생성 및 제어
인스턴스 build 실패, scheduling 오류
Neutron
네트워크/포트/IP 관리
포트 생성 실패, floating IP 연결 불가
Glance
이미지 저장 및 조회
이미지 다운로드 실패, boot from image 오류
Cinder
볼륨 제공
볼륨 attach 실패, device not found
이 표만 머리에 넣어도 DevStack OpenStack 연동 문제를 볼 때 훨씬 덜 막막합니다. 사실 로그를 읽는 요령도 결국은 어느 서비스가 다음 서비스를 못 찾고 있는지를 보는 거거든요.
3. DevStack 트러블슈팅 전에 먼저 확인할 기본 체크리스트
본격적으로 로그 보기 전에, 저는 아래 항목부터 먼저 봅니다. 사소해 보여도 여기서 많이 걸립니다.
호스트명과 IP: 서비스가 등록된 주소와 실제 바인딩 주소가 같은지
/etc/hosts: 로컬 이름 해석이 꼬이지 않았는지
시스템 시간: 토큰 인증 문제를 만들 정도로 시간 차이가 없는지
포트 리스닝 상태: 각 API 서비스가 실제로 떠 있는지
환경 변수: admin-openrc 같은 OpenRC 파일을 제대로 불러왔는지
제가 직접 해보니, OpenRC를 안 읽은 상태에서 CLI 테스트를 해서 Keystone 문제로 착각한 경우가 제일 허무했습니다. 드디어 원인 찾았다 싶었는데 그냥 환경 변수 누락이더라고요.
cd ~/devstack
source openrc admin admin
openstack token issue
openstack service list
openstack endpoint list
위 명령이 정상 동작하면 최소한 Keystone 인증과 서비스 카탈로그 조회는 된다는 뜻입니다. 여기서부터 하나씩 좁혀가면 됩니다.
4. 실전 구현: DevStack 환경에서 서비스 연동 상태 점검 순서
4-1. DevStack 설정 파일부터 다시 봅니다
local.conf에 서비스 활성화가 빠져 있거나, 비밀번호 변수 구성이 엇갈리면 설치는 돼도 연동이 흔들립니다. 아래는 가장 기본적인 예시입니다.
여기서는 이미지 상태가 active 인지, 접근 권한 문제는 없는지, Nova가 해당 이미지를 실제 읽을 수 있는지 확인합니다.
5-4. RabbitMQ 또는 DB 연결 문제로 서비스가 간헐적으로 실패하는 경우
이건 더 골치 아픕니다. 같은 명령이 한 번은 되고 한 번은 안 되거든요. 저도 실제로 써보니까 간헐 장애는 오히려 더 찾기 어렵더라고요.
sudo systemctl status rabbitmq-server
sudo systemctl status mariadb
sudo journalctl -u rabbitmq-server -n 100 --no-pager
메시지 큐나 DB 연결이 흔들리면 각 서비스 로그에 timeout, reconnect, access denied 같은 메시지가 섞여 나옵니다. 이럴 때는 개별 서비스보다 공통 백엔드부터 의심하는 게 빠릅니다.
여러 OpenStack 서비스 로그를 비교해서 장애 지점을 추적하는 실제 운영 감각의 트러블슈팅 이미지입니다.
6. 검증: 어디까지 확인해야 진짜 해결된 걸까
로그 한 줄 없어졌다고 끝난 건 아닙니다. 저는 아래 순서가 모두 통과하면 그제야 해결로 봅니다.
토큰 발급이 정상 동작한다.
서비스 목록과 엔드포인트가 정상 조회된다.
이미지, 네트워크, 플래버 목록 조회가 된다.
테스트 네트워크와 서브넷 생성이 된다.
테스트 인스턴스가 ACTIVE 또는 기대 상태로 전환된다.
필요 시 floating IP 연결 또는 콘솔 접속이 된다.
openstack token issue
openstack endpoint list
openstack network list
openstack subnet list
openstack image list
openstack server create --flavor m1.tiny --image cirros --network demo-net test-vm
openstack server list
openstack console url show test-vm
이 단계까지 가면 DevStack OpenStack 연동 문제는 대부분 정리됩니다. 물론 테스트 이미지나 플래버는 환경에 따라 다를 수 있으니, 현재 설치 상태에 맞게 조정하시면 됩니다.
서비스 연동이 정상화된 뒤 CLI와 대시보드에서 인스턴스, 네트워크, 이미지가 모두 보이는 결과 이미지입니다.
7. 빠른 진단 기준
증상
먼저 볼 곳
우선 점검 포인트
401 인증 오류
Keystone
OpenRC, 토큰, 서비스 사용자 비밀번호
인스턴스 생성 실패
Nova
Glance/Neutron/Placement 연동
포트 생성 실패
Neutron
agent 상태, 브리지 구성, endpoint
이미지 부팅 실패
Glance
이미지 상태, 접근 권한, API 응답
간헐적 timeout
RabbitMQ/DB
공통 백엔드 연결 안정성
이 표는 제가 실제로 자주 참고하는 기준입니다. 독자분들도 로그를 보기 전에 먼저 증상별 1차 의심 지점을 잡아두면 훨씬 덜 헤매실 겁니다.
8. 자주 묻는 질문과 실무 팁
Q1. 서비스가 모두 떠 있는데도 왜 연동이 안 될까요?
A. 프로세스가 떠 있는 것과 API 호출이 성공하는 것은 다릅니다. endpoint 등록, 권한, 환경 변수, 에이전트 상태를 같이 보셔야 합니다.
Q2. DevStack을 다시 설치하는 게 더 빠를 때도 있나요?
A. 있습니다. 특히 실험을 여러 번 반복하면서 설정이 꼬였을 때는 부분 수정보다 재구성이 빠를 때가 있더라고요. 다만 그 전에 왜 꼬였는지를 한 번 정리해 두면 다음부터 훨씬 빨라집니다.
Q3. 로그는 어디부터 봐야 하나요?
A. 사용자 요청이 처음 닿는 지점부터 보는 게 좋습니다. 예를 들어 인스턴스 생성 실패면 Nova API부터 보고, 그 다음 Neutron/Glance 쪽 연동 로그를 따라가는 방식이 효율적입니다.
💡 팁: CLI 테스트는 Horizon보다 원인 분리가 쉽습니다.
💡 팁: 한 번에 여러 문제를 고치지 말고, 한 항목씩 검증하세요.
💡 팁: 변경 전 endpoint 목록과 서비스 상태를 저장해 두면 비교가 편합니다.
인증, 네트워크, 이미지, 인스턴스 생성 문제를 어떤 순서로 점검할지 한 장으로 정리한 요약 인포그래픽입니다.
9. 마무리: DevStack 트러블슈팅의 핵심은 흐름을 보는 눈입니다
이번 글에서는 DevStack OpenStack 연동 문제를 단순히 에러 메시지별로 보는 대신, 서비스 요청 흐름 기준으로 점검하는 방법을 정리해 봤습니다. 저도 처음엔 서비스 이름이 너무 많아서 겁부터 났었는데, 실제로는 Keystone, Nova, Neutron, Glance, Cinder가 어떻게 이어지는지만 잡아도 절반은 해결되더라고요.
정리하면 이렇습니다. 인증이 되는지 확인하고, 엔드포인트가 맞는지 보고, 서비스별 실제 생성 요청을 날려보고, 공통 백엔드까지 확인한다. 이 순서가 DevStack 트러블슈팅에서 꽤 강력합니다. 다음 글에서는 DevStack 환경에서 Neutron 네트워크를 조금 더 깊게 파서, 브리지 구성과 외부 네트워크 연결 쪽도 따로 다뤄볼 예정입니다. 이전 글에서 다뤘던 OpenStack 기본 구성 이해 편이 있으시다면 같이 보시면 흐름 잡는 데 더 도움이 될 겁니다.
혹시 지금 비슷한 OpenStack 서비스 연동 문제를 겪고 계시다면, 오늘 소개한 체크리스트만 따라가도 원인 범위를 꽤 빨리 좁히실 수 있을 겁니다. 드디어 됐다! 하는 순간이 분명 오거든요. 그 맛에 또 홈랩 만지게 됩니다 ㅎㅎ
OpenStack 멀티노드 운영을 1년 정도 굴려보면, 설치가 끝이라고 생각했던 시점부터 진짜 일이 시작되더라고요. 저도 처음엔 “컨트롤 플레인(control plane, 제어 영역)만 안정적이면 되겠지”라고 가볍게 봤었는데, 실제로 써보니까 네트워크, 스토리지, 메시지 큐(message queue, 비동기 작업 전달), 그리고 운영 절차가 전부 엮여 있어서 한 군데만 흔들려도 전체가 불안해졌습니다. 혹시 랩 환경(home lab, 개인 실험실)에서 잘 되던 구성이 운영 구간에서 갑자기 말을 안 들어서 당황하신 적 있으신가요? 오늘은 제가 직접 겪은 OpenStack 클러스터 후기, 그리고 OpenStack 배포 실패 사례까지 솔직하게 묶어서 정리해보겠습니다.
이 글은 특정 배포판 홍보가 아니라, OpenStack 멀티노드 운영에서 실제로 부딪히는 포인트를 중심으로 썼습니다. 다음 글에서는 Ceph(세프, 분산 스토리지) 연동 쪽도 따로 다룰 예정이고, 이전 글에서 다뤘던 가상화 호스트 설계 내용이 있다면 함께 보시면 흐름이 더 잘 잡히실 겁니다.
컨트롤 노드, 컴퓨트 노드, 네트워크 경로가 한눈에 보이는 OpenStack 멀티노드 운영 아키텍처 예시입니다.
왜 OpenStack 멀티노드 운영은 설치보다 운영이 더 어렵나
쉽게 말해 OpenStack은 하나의 프로그램이 아니라 여러 서비스의 연합체더라고요. Keystone(키스톤, 인증), Nova(노바, 컴퓨트), Neutron(뉴트론, 네트워크), Glance(글랜스, 이미지), Cinder(신더, 블록 스토리지) 같은 서비스가 각자 잘 떠 있어야 하고, 서로 API 호출도 정상이어야 합니다. 설치 문서는 대부분 “어떻게 올릴까”에 집중하는데, 운영은 “문제가 났을 때 어디부터 볼까”가 핵심이거든요.
제가 1년 운영하면서 느낀 건 딱 세 가지였습니다.
장애는 단일 원인처럼 보이지만 실제론 연쇄 장애인 경우가 많습니다.
성능 문제보다 상태 일관성(state consistency, 서비스 간 상태 맞춤) 문제가 더 까다롭습니다.
사람이 반복하는 운영 작업은 결국 사고로 이어집니다.
예를 들어 인스턴스(instance, 가상 머신) 생성 실패가 떴다고 해서 꼭 Nova 문제는 아니었습니다. 메시지 브로커(broker, 중간 전달자) 지연, Neutron 포트 생성 실패, 데이터베이스 연결 수 부족 같은 식으로 옆 서비스 이슈가 튀어나오는 경우가 꽤 많았거든요. 처음엔 이게 뭔가 싶었는데, 로그를 몇 번 따라가다 보면 OpenStack은 결국 관계도 싸움이라는 걸 알게 됩니다.
운영 전에 잡아야 했던 기본 원칙
여기서 중요한 포인트! OpenStack 멀티노드 운영은 기술 스택보다 운영 원칙을 먼저 정하는 게 훨씬 중요합니다. 저는 초반에 이걸 대충 잡았다가 삽질 좀 했습니다 ㅎㅎ
영역
초기 생각
1년 뒤 결론
네트워크
가능하면 단순하게
관리망, 스토리지망, 테넌트망 분리가 운영 피로를 줄임
스토리지
일단 붙으면 된다
장애 복구 절차와 성능 특성까지 같이 봐야 함
로그
문제 생기면 그때 확인
중앙 수집 없으면 원인 추적 시간이 급격히 늘어남
배포
처음 한 번만 성공하면 됨
재현 가능한 자동화가 없으면 다음 장애 때 무너짐
모니터링
CPU, 메모리만 보면 됨
API 지연, 큐 적체, DB 연결 상태까지 봐야 함
특히 네트워크는 정말 중요했습니다. Neutron이 들어가는 순간 브리지(bridge, 가상 스위치), VLAN(가상 랜), 오버레이 네트워크(overlay network, 가상 터널 네트워크) 이해도가 부족하면 “핑은 되는데 VM 통신은 안 됨” 같은 상황이 자주 생깁니다. 이거 진짜 사람 멘탈 흔듭니다.
제가 실제로 사용한 운영 구조와 체크 포인트
구성 자체는 전형적인 멀티노드 방식이었습니다. 컨트롤 노드에 API와 스케줄러 계열을 두고, 컴퓨트 노드에서 하이퍼바이저(hypervisor, 가상화 실행 계층)를 돌리고, 네트워크는 별도 역할을 분리하거나 최소한 경로를 명확히 나눴습니다. 여기에 MariaDB(마리아디비, 관계형 데이터베이스), RabbitMQ(래빗엠큐, 메시지 큐), HAProxy(에이치에이프록시, 로드밸런서)를 조합하면 기본 뼈대는 갖춰집니다.
배포 자동화는 도구마다 방식이 다르지만, 원칙은 비슷합니다.
호스트 이름과 DNS를 먼저 고정합니다.
NTP 또는 Chrony로 시간 동기화를 맞춥니다.
관리망 IP와 서비스 엔드포인트(endpoint, 서비스 접속 주소)를 문서화합니다.
메시지 큐와 데이터베이스 상태를 먼저 확인합니다.
그다음 OpenStack 서비스 등록과 에이전트(agent, 백그라운드 작업 프로세스) 상태를 검증합니다.
제가 자주 쓰던 점검 명령은 이런 식이었습니다.
openstack service list
openstack endpoint list
openstack compute service list
openstack network agent list
openstack hypervisor list
openstack server list --all-projects
처음엔 서비스 목록만 보고 안심했었는데, 실제로는 에이전트가 살아 있어도 기능이 망가진 경우가 있더라고요. 그래서 저는 아래처럼 시스템 레벨도 꼭 같이 확인했습니다.
여기서 핵심은 “OpenStack 명령 결과”와 “OS 레벨 상태”를 분리해서 보는 겁니다. 둘 중 하나만 보면 꼭 놓치는 구간이 생깁니다.
Keystone, Nova, Neutron, RabbitMQ, MariaDB가 어떤 흐름으로 연결되는지 설명하는 구성 다이어그램 위치입니다.
실전 구현에서 효과 있었던 운영 습관
프로덕션 OpenStack 회고 관점에서 보면, 기술보다 습관이 더 오래 남습니다. 제가 1년 동안 남긴 것 중 실제로 가장 도움이 됐던 건 아래 네 가지였습니다.
변경 작업 전 체크리스트 작성 패키지 업데이트, 네트워크 설정 변경, 서비스 재시작 전후 확인 항목을 고정했습니다.
설정 파일 차이(diff, 변경점) 기록 나중에 왜 바꿨는지 기억이 안 나는 순간이 오거든요.
장애 재현 메모 증상, 원인 후보, 실제 원인, 해결 순서를 남겨두면 다음 장애 때 시간이 확 줄어듭니다.
작은 자동화라도 바로 적용 반복 명령은 셸 스크립트(shell script, 명령 자동화)로 묶었습니다.
예를 들면 컴퓨트 노드 상태 점검은 간단한 스크립트로 묶어두면 꽤 편합니다.
#!/usr/bin/env bash
set -eu
echo '[1] hypervisor list'
openstack hypervisor list
echo '[2] compute services'
openstack compute service list
echo '[3] failed services'
systemctl --failed
echo '[4] recent nova-compute logs'
journalctl -u nova-compute -n 50 --no-pager
이런 건 거창하지 않아도 됩니다. 중요한 건 사람 손을 덜 타게 만드는 것입니다. 제가 직접 해보니 OpenStack 배포 실패 사례 중 꽤 많은 비율이 설치 자체보다, 설치 후 운영 절차 부재에서 시작됐습니다.
⚠️ 실제로 크게 데였던 장애와 해결 과정
1. 메시지 큐 지연으로 인한 인스턴스 생성 실패
증상은 단순했습니다. VM 생성 요청은 들어가는데 완료가 안 되는 겁니다. 처음엔 Nova 스케줄러를 의심했는데, 로그를 따라가 보니 RabbitMQ 큐 적체가 원인이었습니다. 관리망 지연이 누적되면서 RPC(Remote Procedure Call, 원격 호출) 응답이 늦어졌고, 결국 타임아웃이 연쇄적으로 터졌습니다.
배운 점: API 장애처럼 보여도 메시지 경로를 꼭 봐야 합니다.
해결 방법: 큐 상태 확인, 관리망 상태 점검, 재시작 순서 표준화
2. Neutron 포트 생성은 되는데 통신이 안 되는 문제
이건 정말 오래 잡았습니다. 보안 그룹(security group, 가상 방화벽) 문제처럼 보였는데, 실제로는 브리지 매핑(bridge mapping, 네트워크 연결 규칙)과 물리 NIC 연결 정의가 어긋나 있었습니다. 로그상 큰 에러가 안 보여서 더 헷갈렸고요. 저도 처음엔 헷갈렸는데, 결국 에이전트 설정과 호스트 네트워크 구성이 서로 맞아야 한다는 너무 당연한 사실을 다시 배웠습니다.
배운 점: Neutron 문제는 논리 설정과 물리 연결을 같이 봐야 합니다.
해결 방법: 브리지 이름, 인터페이스 매핑, 에이전트 상태를 한 번에 점검
3. 스토리지 연결은 되는데 성능이 들쭉날쭉한 상황
이건 더 무서운 유형입니다. 완전히 죽는 게 아니라 “어제는 괜찮았는데 오늘은 왜 느리지?”가 반복되거든요. 결국 원인은 백엔드 스토리지 경로 경쟁, 작업 몰림, 그리고 이미지 캐시 처리 타이밍이 겹친 문제였습니다. 숫자를 괜히 지어내고 싶진 않아서 구체 수치는 빼겠지만, 체감 성능 차이는 꽤 컸습니다.
배운 점: 스토리지는 붙어 있는지만 보지 말고 패턴을 봐야 합니다.
해결 방법: 작업 시간대 분산, 캐시 정책 점검, 백엔드 모니터링 강화
4. 데이터베이스는 살아 있는데 API가 간헐적으로 느린 문제
이건 딱 “다 살아 있는데 왜 느리지?” 케이스였네요. DB 연결 수, 느린 쿼리(slow query, 지연 질의), 서비스 재시도 패턴이 겹치면서 간헐 지연이 생겼습니다. 이런 문제는 재시작으로 잠깐 가려질 수 있어서 더 위험합니다. 드디어 됐다! 싶었는데 다음날 다시 터지더라고요.
정리하면, OpenStack 멀티노드 운영에서 가장 위험한 장애는 완전 다운보다 반쯤 되는 장애입니다. 운영자가 방심하기 쉽거든요.
로그 추적, 큐 적체 확인, 네트워크 흐름 분석을 한 번에 보여주는 운영 관제 이미지 위치입니다.
문제 줄이기 위해 정착시킨 검증 절차
문제가 생긴 뒤 고치는 것도 중요하지만, 더 중요한 건 변경 후 검증입니다. 저는 아래 순서로 체크했습니다.
인증 확인: 토큰 발급과 서비스 카탈로그(service catalog, 서비스 목록) 확인
컴퓨트 확인: 하이퍼바이저 목록과 서비스 up/down 상태 확인
네트워크 확인: 네트워크 생성, 서브넷 연결, 포트 생성 테스트
부팅 확인: 테스트 인스턴스 생성 후 콘솔 접속 확인
삭제 확인: 인스턴스 삭제, 볼륨 정리, 포트 잔존 여부 확인
간단한 검증 흐름 예시는 이렇습니다.
openstack token issue
openstack network create lab-net
openstack subnet create --network lab-net --subnet-range 192.168.50.0/24 lab-subnet
openstack server create --flavor m1.small --image test-image --network lab-net test-vm
openstack server list
openstack console url show test-vm
여기서 중요한 건 생성만 보는 게 아니라 삭제와 정리까지 확인하는 겁니다. 리소스 찌꺼기(resource orphan, 고아 리소스)가 쌓이기 시작하면 나중에 장애 분석이 훨씬 더 어려워집니다.
1년 운영 후 남은 성과와 아쉬움
🎉 성과부터 말하면, 운영 초반보다 장애 대응 시간이 눈에 띄게 줄었습니다. 원인은 대단한 튜닝이 아니라, 로그 보는 순서와 점검 절차가 정리됐기 때문이었습니다. OpenStack 클러스터 후기를 한 줄로 줄이면 이겁니다. 복잡성은 줄이지 못해도, 복잡성을 다루는 방법은 개선할 수 있다.
반대로 아쉬움도 분명했습니다.
초기 아키텍처 문서를 너무 늦게 정리했습니다.
네트워크 변경 이력을 더 일찍 표준화했어야 했습니다.
테스트 환경과 운영 환경 차이를 가볍게 보면 안 됐습니다.
“지금 되니까 괜찮다”는 판단이 가장 위험했습니다.
특히 프로덕션 OpenStack 회고를 하면서 느낀 건, 운영자는 문제를 해결하는 사람인 동시에 문제가 다시 생기지 않게 만드는 사람이어야 한다는 점이었습니다. 근데 이게 말처럼 쉽진 않죠. 문서화는 귀찮고, 자동화는 미루기 쉽고, 장애는 꼭 바쁠 때 옵니다.
운영 절차 정리 전후의 안정화 흐름과 핵심 교훈을 비교하는 요약 시각화 이미지 위치입니다.
OpenStack 멀티노드 운영 정리: 지금 다시 시작한다면
💡 제가 지금 다시 처음부터 OpenStack 멀티노드 운영을 구성한다면 아래 순서로 갑니다.
네트워크 분리 설계부터 문서화합니다.
배포 자동화를 처음부터 전제로 둡니다.
공통 로그와 모니터링을 설치 초기에 붙입니다.
테스트 VM 생성/삭제 검증을 표준 절차로 만듭니다.
장애 기록 템플릿을 운영 첫날부터 사용합니다.
이 다섯 개만 지켜도 OpenStack 배포 실패 사례의 상당수를 예방할 수 있습니다. 물론 환경마다 디테일은 다를 겁니다. 그래도 뼈대는 비슷하더라고요. 특히 OpenStack 멀티노드 운영은 “한 번 설치 성공”보다 “열 번 재현 가능”이 훨씬 값집니다.
자주 묻는 질문
Q1. 홈랩에서도 멀티노드가 의미가 있나요?
있습니다. 오히려 작은 환경에서 역할 분리와 장애 흐름을 이해하기 좋습니다. 다만 과한 고가용성(HA, 고장 대비 이중화)보다는 기본 동작과 복구 절차부터 익히는 게 낫습니다.
Q2. 가장 먼저 모니터링해야 할 것은 뭔가요?
CPU나 메모리보다 먼저 API 응답 지연, 메시지 큐 적체, 데이터베이스 연결 상태, 네트워크 에이전트 상태를 보시는 걸 권합니다.
Q3. 설치 도구보다 중요한 건 뭔가요?
운영 문서, 변경 이력, 검증 절차입니다. 도구는 바꿀 수 있지만 운영 습관은 쉽게 안 바뀌거든요.
마무리
1년 동안 OpenStack 멀티노드 클러스터를 운영하면서 느낀 건, OpenStack은 화려한 기능보다 기본기가 훨씬 중요하다는 점이었습니다. 서비스 간 관계를 이해하고, 장애를 추적하는 순서를 만들고, 변경을 기록하는 것. 이 세 가지가 결국 운영 품질을 갈랐습니다. 저도 처음엔 “왜 이렇게 복잡하지?” 싶었는데, 하나씩 뜯어보니 결국 시스템은 거짓말을 안 하더라고요.
혹시 지금 OpenStack 멀티노드 운영을 준비 중이시라면, 설치 성공 화면에서 끝났다고 생각하지 마시고 검증 절차부터 붙여보세요. 그게 나중에 가장 큰 차이를 만듭니다. 다음 글에서는 스토리지 연동과 백업 전략 쪽을 더 현실적으로 풀어보겠습니다. ✅
[OpenStack] OpenStack 멀티노드 배포, 컨트롤러/컴퓨트/네트워크 노드 역할 분석
OpenStack 멀티노드 배포를 처음 붙잡으면 제일 먼저 막히는 지점이 있습니다. “컨트롤러 노드, 컴퓨트 노드, 네트워크 노드가 정확히 뭐가 다른 거지?” 이 부분이 정리되지 않으면 설치 문서를 몇 번을 읽어도 머릿속이 안 이어지더라고요. 저도 홈랩에서 처음 구성했을 때는 서비스 이름은 외웠는데, 트래픽이 어디로 흐르고 장애가 나면 어느 노드부터 봐야 하는지가 감이 안 왔거든요. 결국 삽질 좀 했고요 ㅎㅎ 이번 글에서는 제가 실제로 OpenStack 아키텍처를 잡을 때 기준으로, 각 노드 역할을 현실적으로 어떻게 나누는지, 왜 그렇게 나누는지, 그리고 OpenStack 멀티노드 배포를 할 때 꼭 체크해야 할 포인트를 정리해보겠습니다.
컨트롤러 노드, 컴퓨트 노드, 네트워크 노드의 관계를 한눈에 보여주는 전체 구성도입니다.
왜 OpenStack 멀티노드 배포에서 역할 분리가 중요한가
단일 노드(All-in-One) 설치는 학습용으로는 좋습니다. 그런데 실제 운영 감각을 익히려면 멀티노드가 훨씬 중요합니다. 쉽게 말해 컨트롤러 노드(Controller Node)는 두뇌, 컴퓨트 노드(Compute Node)는 일꾼, 네트워크 노드(Network Node)는 교통정리 담당이라고 보면 됩니다. 이 셋이 섞여 있으면 처음엔 간단해 보여도, 장애 원인 추적이나 성능 병목 분석이 어려워집니다.
제가 한 번 해봤는데 OpenStack 멀티노드 배포의 핵심은 “서비스를 설치하는 것”보다 “역할을 분리해서 운영 포인트를 명확히 만드는 것”이었거든요. 특히 CPU를 많이 쓰는 가상머신 생성 작업과 API 요청, 이미지 배포, 가상 네트워크 처리를 한 장비에 몰아넣으면 어디서 병목이 나는지 판단이 흐려집니다.
OpenStack 아키텍처를 쉽게 풀어보면
OpenStack 아키텍처는 여러 서비스가 협업하는 구조입니다. 대표적으로 Keystone(키스톤, 인증 서비스), Nova(노바, 컴퓨트 서비스), Neutron(뉴트론, 네트워크 서비스), Glance(글랜스, 이미지 서비스)가 중심입니다. 여기에 메시지 브로커(Message Broker)인 RabbitMQ, 데이터베이스(Database)인 MariaDB, 캐시(Cache) 역할의 Memcached 같은 기반 서비스가 붙습니다.
노드
주요 역할
대표 서비스
운영 포인트
컨트롤러 노드
API, 인증, 스케줄링, 이미지 관리
Keystone, Nova API, Glance, Neutron Server
DB, MQ, API 가용성 확인
컴퓨트 노드
가상머신 생성 및 실행
nova-compute, 하이퍼바이저(Hypervisor)
KVM 지원, 리소스 사용량, 에이전트 상태
네트워크 노드
가상 라우터, DHCP, NAT, Floating IP
Neutron L3/DHCP/Metadata Agent 또는 OVN 구성요소
브리지, 인터페이스 매핑, 외부망 연결
여기서 중요한 포인트! 컨트롤러 노드는 “명령을 내리는 곳”이고, 컴퓨트 노드는 “실제로 VM을 띄우는 곳”입니다. 네트워크 노드는 “VM이 외부와 통신하게 만드는 곳”이고요. 이 흐름만 이해해도 OpenStack 아키텍처가 훨씬 덜 복잡하게 보입니다.
노드별 역할 분석: 어디까지 맡기는 게 현실적인가
컨트롤러 노드
컨트롤러 노드는 생각보다 바쁩니다. 사용자 로그인, 프로젝트(Project) 조회, 이미지 등록, 인스턴스(Instance) 생성 요청, 스케줄링까지 다 이쪽으로 들어옵니다. 그래서 CPU보다도 서비스 간 연결 상태와 데이터베이스 안정성이 더 중요하더라고요. 실제로 써보니까 인스턴스가 안 떠서 컴퓨트 노드를 의심했는데, 알고 보니 컨트롤러의 RabbitMQ 인증 설정이 꼬인 경우도 있었습니다.
컴퓨트 노드
컴퓨트 노드는 비교적 단순합니다. 하지만 가장 많이 일합니다. 하이퍼바이저로 보통 KVM(QEMU/KVM)을 쓰고, nova-compute가 컨트롤러와 통신하면서 VM을 생성합니다. 저도 처음엔 “API가 안 되면 컴퓨트 문제겠지” 했었는데, 대부분은 반대더라고요. 컴퓨트 노드는 대개 증상만 보여주고, 원인은 컨트롤러 쪽 설정 누락인 경우가 많았어요.
네트워크 노드
이 노드는 OpenStack 멀티노드 배포에서 제일 헷갈리거든요. 외부 네트워크(External Network), 테넌트 네트워크(Tenant Network), 라우터(Router), NAT(Network Address Translation), Floating IP까지 한꺼번에 얽혀 있거든요. 근데 쉽게 말해 내부 VM들이 서로 통신하고, 필요하면 외부 인터넷까지 나가도록 길을 만들어주는 역할입니다. 여기서 브리지(Bridge) 이름 하나만 잘못 잡아도 통신이 끊기더라고요. 제가 실제로 가장 오래 삽질한 부분도 여기였어요.
실전 구현: OpenStack 멀티노드 배포 기본 순서
아래 예시는 학습용으로 가장 이해하기 쉬운 3노드 분리 구조입니다. 배포 도구는 환경마다 다르지만, 역할 자체는 크게 다르지 않습니다.
관리 네트워크(Management Network)와 외부 네트워크(External Network)를 분리합니다.
여기서 컨트롤러 노드는 단순히 API만 올리는 서버가 아닙니다. OpenStack 서비스들이 서로 대화하는 중심축이 됩니다.
컨트롤러 노드에 Keystone, Nova API, Glance, Neutron Server, RabbitMQ, MariaDB가 어떻게 연결되는지 보여주는 구성도입니다.
3. Keystone, Glance, Nova API, Neutron Server 등록
openstack service create --name keystone identity
openstack service create --name glance image
openstack service create --name nova compute
openstack service create --name neutron network
openstack endpoint create --region RegionOne identity public http://controller:5000/v3
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne network public http://controller:9696
명령 자체는 단순해 보이는데, 실제로는 인증 토큰, 서비스 사용자, 데이터베이스 권한 설정이 같이 맞아야 합니다. 저는 여기서 엔드포인트(Endpoint) URL 오타 하나 때문에 Horizon 대시보드에서 서비스가 살아 있어도 호출이 실패했던 적이 있습니다.
네트워크 노드는 외부 NIC 이름을 정확히 넣어야 거든요. 예전엔 eth0, eth1이 익숙했는데 요즘은 ens160, ens224 같은 이름이 많아서 더 헷갈리죠. 근데 여기서 한 글자만 틀려도 Floating IP가 안 붙습니다.
⚠️ 실제로 자주 겪는 문제와 해결법
문제 1: 컴퓨트 노드가 서비스 목록에 안 보임 대부분 RabbitMQ 연결, Keystone 인증 정보, 혹은 nova-compute 설정 파일 오타입니다. 로그에서 인증 실패와 네임 리졸브를 먼저 보세요.
문제 2: 인스턴스는 생성되는데 Ping이 안 됨 네트워크 노드의 브리지 매핑, 보안 그룹(Security Group), 라우터 게이트웨이 설정을 점검해야 합니다. 저는 외부망 브리지 연결이 빠져서 한참 헤맸습니다.
문제 3: Horizon은 열리는데 VM 생성이 실패함 Horizon은 프런트엔드일 뿐이라서, 실제 문제는 Nova 스케줄러나 Glance 이미지 접근 실패인 경우가 많습니다.
문제 4: Metadata 접근 실패 cloud-init이 동작하지 않거나 SSH 키가 주입되지 않으면 metadata-agent와 관련 설정을 봐야 합니다.
openstack compute service list
openstack network agent list
openstack hypervisor list
sudo journalctl -u nova-compute -n 100
sudo journalctl -u neutron-l3-agent -n 100
OpenStack 멀티노드 배포에서는 “대시보드가 열리는지”보다 “서비스 간 상태가 일관적인지”를 봐야 합니다. 저는 이제 장애가 나면 무조건 API부터 보지 않고, 서비스 목록과 에이전트 상태를 같이 확인합니다.
검증: 배포가 제대로 되었는지 확인하는 방법
설치가 끝났다고 바로 성공은 아닙니다. 실제 검증은 테스트 인스턴스를 띄워서 네트워크까지 확인해야 끝납니다.
Glance에 테스트 이미지를 등록합니다.
내부 네트워크와 서브넷을 만듭니다.
라우터를 생성하고 외부 네트워크와 연결합니다.
보안 그룹에서 ICMP와 SSH를 허용합니다.
소형 Flavor로 테스트 VM을 띄웁니다.
openstack image list
openstack network list
openstack router list
openstack server create --flavor m1.small --image test-image --network private test-vm
openstack server list
서비스 목록과 테스트 인스턴스 생성이 정상 완료된 상태를 보여주는 검증 이미지입니다.
정상이라면 인스턴스가 ACTIVE 상태로 올라오고, Floating IP 연결 후 외부에서 SSH 접속까지 확인할 수 있어야 합니다. 드디어 됐다! 싶은 순간이 여기서 옵니다. 근데 솔직히 여기까지 한 번에 가는 경우는 드뭅니다. 로그 보면서 하나씩 푸는 게 결국 제일 빠르더라고요.
노드 분리 전략, 어디까지 해야 할까
실무나 홈랩이나 결국 자원과 목적의 타협입니다. 아래처럼 생각하면 편합니다.
구성 방식
장점
단점
추천 상황
All-in-One
빠른 학습, 최소 장비
역할 구분 어려움
기초 학습
3노드 분리
구조 이해, 장애 분석 용이
네트워크 설정 복잡
OpenStack 아키텍처 학습
확장형 멀티노드
수평 확장, 역할 세분화
운영 부담 증가
실전형 테스트베드
단일 노드 구성과 3노드 멀티노드 구성을 한눈에 비교한 요약 이미지입니다.
개인적으로는 처음부터 3노드로 가보는 걸 추천하는데요. 이유가 단순한데 OpenStack 멀티노드 배포를 한 번 해봐야 컨트롤러 노드, 컴퓨트 노드, 네트워크 노드가 왜 분리되는지 몸으로 이해되거든요. 다음 글에서는 스토리지 노드와 Cinder(신더, 블록 스토리지)까지 붙이는 흐름도 다뤄볼 생각이에요. 이전 글에서 가상화 기초를 다뤘다면 같이 보면 더 잘 이어질 겁니다.
자주 묻는 질문 FAQ
Q1. 네트워크 노드를 꼭 분리해야 하나요?
학습 초반에는 꼭 그렇진 않습니다. 다만 Floating IP, 라우팅, NAT 흐름을 제대로 이해하려면 분리했을 때 훨씬 명확합니다.
Q2. 컴퓨트 노드는 여러 대로 늘릴 수 있나요?
네, 이게 OpenStack의 장점 중 하나입니다. 컨트롤러에 등록만 정상적으로 되면 컴퓨트 노드를 점진적으로 추가할 수 있습니다.
Q3. 제일 먼저 확인할 로그는 뭔가요?
저는 보통 Nova와 Neutron 에이전트 상태, 그리고 RabbitMQ 연결부터 봅니다. 서비스 간 연결이 안 되면 증상이 아주 다양하게 나타나거든요.
마무리
정리해보면, 컨트롤러 노드는 제어와 관리, 컴퓨트 노드는 실행, 네트워크 노드는 연결을 담당합니다. 이 세 역할만 머릿속에 깔끔하게 들어오면 OpenStack 아키텍처는 생각보다 훨씬 읽기 쉬워집니다. 저도 처음엔 서비스 이름만 많아서 겁부터 났는데, 결국 트래픽과 역할로 나눠서 보니 길이 보이더라고요. 혹시 지금 OpenStack 멀티노드 배포를 준비 중이시라면, 설치 명령보다 먼저 노드 역할을 도식화해보세요. 그 한 장의 메모가 삽질 시간을 꽤 줄여줍니다.
컨트롤러, 컴퓨트, 네트워크 노드의 역할과 점검 포인트를 정리한 마무리 요약 이미지입니다.