클라우드/OpenStack

Openstack Installation

mini'scloud 2025. 7. 6. 00:06

History

  • openstack을 옛날에 쓸때는 VirtualBox같은 가상 환경에 여러개의 네트워크 인터페이스를 설정한 ubuntu 가상 머신을 만드는 것이 일반적이었음
  • VirtualBox의 CLI의 VBoxManage로 vboxnet0 (public), vboxnet1(private)같은 Host-Only 네트워크를 생성하고,
  • VM에 하나는 인터넷 접속용 (NAT), 다른 하나는 Host-Only(고정 IP를 할당해 로컬 통신)를 할당했음
  • 이때 ifupdown 시스템을 통해 /etc/network/interfaces 파일을 직접 수정하여 고정 IP를 설정하였으나
  • 현재는 netplan 또는 NetworkManager를 사용하는 경우가 많고, GUI나 yaml 방식을 많이 사용함
    • 하지만, ifupdown의 방식인 외부 인터넷 접속, 내부 관리, 서비스간 통신을 위한 네트워크 분리는 여전히 유효
  • 이번 실습에서는 이런 분리에 대해 구축을 하고 실습해볼거임

Installation

  • 우분투 server 이미지(mac이니깐 arm 아키텍처)와 가상 환경(VMware Fusion)을 준비함

네트워크 인터페이스 설정

  • 여러 네트워크 대역을 사용하므로, 최소 3개의 네트워크 어댑터를 설정함
  • VMware Fusion 버튼에 Preferences 설정으로 가서 네트워크를 설정할거임
    • public network(host-only, management), private network(host-only)를 생성함
  • public network (외부에서 접근 가능함)
    • Type: Custom
    • Subnet IP: 172.16.0.0
    • Subnet Mask: 255.255.0.0
  • private network (내부 통신 전용)
    • Type: Custom
    • Subnet IP: 10.0.0.0
    • Subnet Mask: 255.0.0.0 
    • Subnet Mask는 IP 주소를 네트워크 영역과 호스트 영역으로 나누기 위해 사용하는 값
    • IP 주소는 두 부분으로 나누어짐
      • 네트워크 부분: 어느 네트워크에 속하는지 나타냄
      • 호스트 부분: 해당 네트워크 안의 어떤 장치(컴퓨터, VM)인지 나타냄
      • ex) IP가 192.168.1.10이고, 서브넷 마스크가 255.255.255.0이면,
      • 192.168.1 → 네트워크 부분, 10 → 호스트 부분
      • 즉, 이 네트워크는 192.168.1.0 ~ 192.168.1.255 범위의 주소를 갖는 네트워크 (총 254개를 가짐)

  • 이렇게  public network와 private network를 만들고나서 VM에 network adapter를 추가할거임
  • Virtual Machine -> Settings에 들어가서  Add Device를 누르면됨

  • Network Adpater: 1번째 인터페이스 (NAT)로 외부 인터넷과 연결 역할을 하며, 패키지 다운로드 같은거를 수행함
    • 설정에서는 share with my mac으로 하면됨
    • 외부에서 내부를 접근 안되지만, 내부에서 외부로는 접근 가능
  • Network Adapter 2,3: public/ private 역할
    •  public: 외부와 통신할 수 있는 OpenStack VM의 Public IP 네트워크, Bridged - Wi-Fi로 설정해서 실제 로컬 네트워크에도 노출 가능하게 함, Host-only로 VM끼리도 가능
    • private: (Host-only) 내부 VM 간 통신 전용 (관리 트래픽, 내부 API 트래픽 등)

새롭게 만들때는 ens160을 NAT, ens192를 public, ens224를 prviate으로 설정했음

  • ens가 인터페이스 이름임
  • 계속 원하는 환경을 설정을하고 done을 해주면됨

Ubuntu 서버 설치

  • 이제 서버를 설치해보자
    • 이때 SSH Server를 설치하여 원격 접속을 편하게 하면 좋음!

  • 설정들을 해주면서 설치를 계속 진행해주면된다

 

SSH 접속

public ip를 통해 ssh를 접속할거임

NAT로는 외부에서 내부로 직접 접속은 어려움

포트포워딩 등등.. 이런 문제가 있음

ssh <계정주인>@<public IP주소>

 

작업을 할때 iterm을 열어서 ssh로 접속을해서 작업을 해주면 조금 더 편하게 할 수 있다!1

Ubuntu 서버 기본 설정

  • 시스템 업데이트를 해줘야 한다
sudo apt update
sudo apt upgrade -y

 

  • 필수 패키지 설치
    • openstack 클라이언트와 add-apt-repository 명령어를 위한 기본 패키지를 설치함
sudo apt install -y python3-openstackclient software-properties-common

 

 

  • 네트워크 고정 IP 설정(Netplan)
    • 최신 ubuntu는 netplan을 사용하여 네트워크를 관리함
    • /etc/netplan/ 디렉토리의 설정 파일을 수정하여 고정 Ip를 할당함
    • 먼저 ip addr 명령어를 통해 자신의 네트워크 인퍼페이스 카드 이름을 확인함

  • cloud-init 비활성화: 클라우드 환경이 아니므로, 재부팅 시 cloud-init이 네트워크 설정을 덮어쓰지 않도록 비활성화함
sudo touch /etc/cloud/cloud-init.disabled

 

  • netplan 설정 파일을 수정해보자
cd /etc/netplan
  • netplan이 있는 곳으로 이동하면 50-cloud-init.yaml파일이 있음
  • 여기서 yaml 파일을 수정해주면 됨
  • 이때 sudo nano 50-cloud-init.yaml 이렇게 열어서 수정하면됨

sudo netplan apply를 하고나면 ssh를 접속할때 이제 ens192의 주소로 접속을 하게 될거임

  • ip주소에 alias를 설정할거임
    • sudo vi /etc/hosts에서 설정을 하면됨
    • controller를 managment ip로 해놓으면 좋음

  • 관리/내부 네트워크(Management Network) IP가 서비스 간 통신의 기준이 되며,
    이 IP를 /etc/hosts의 controller alias로 등록하는 것이 업계 표준임
  • OpenStack Controller 노드는 클라우드 인프라에서 관리·오케스트레이션 등 중앙집중식 제어 역할을 담당하는 핵심 서버
    • 인증/권한 관리(Keystone)
      • 사용자의 인증과 서비스 API 접근 권한을 모두 관리함
    • 이미지 서비스(Glance)
      • VM에 사용할 디스크 이미지 저장·관리 담당
    • 컴퓨트 관리(Nova의 관리 컴포넌트)
      • 실제 VM 실행 요청을 받아서 어느 Compute 노드에서 처리할 지 스케줄링, 관리 명령 전송
    • 네트워크 관리 서비스(Neutron의 관리 컴포넌트)
      • 가상 네트워크, 라우터, 서브넷, Floating IP 할당 등 네트워크 자원 전체를 통제
    • 메시지 큐, 데이터베이스
      • 내부 서비스 간 통신(qpid, rabbitmq 등), 상태 정보 저장(MySQL, MariaDB 등)도 함께 운영
    • 대시보드(Horizon)
      • Web 기반 관리 콘솔을 제공하여 사용자와 관리자 모두 인터페이스 활용 가능
    •  controller alias는 내부 관리망(IP)으로 두는 것이 보통임

 

Openstack 설치

  • 클라우드 환경에서 노드 간 시간 동기화는 매우 중요하기에 chrony를 설치하고 활성화를 함
sudo apt install -y chrony
sudo systemctl enable --now chrony

이렇게 하고나서
chronyc sources로 확인해주면됨

 

데이터베이스 설정 (Maria DB)

sudo apt install -y mariadb-server python3-pymysql

 

  • MariaDB 설정
    • 컨트롤러 노드의 관리 IP에서만 접속을 허용하도록 설정 파일을 생성함
    • bind-address는 컨트롤러 노드의 관리 IP(netplan에서 설정한 고정 IP 대역)으로 변경하면됨
sudo vi /etc/mysql/mariadb.conf.d/99-openstack.cnf
  •  
[mysqld]
bind-address = 172.16.0.254
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
  • 설정후 DB를 재시작해줌
sudo systemctl restart mariadb

 

  • MariaDB 보안 설정,
  • sudo mysql_secure_installation
  • 아래와 같이 설정을 함 
    • Enter current password for root (enter for none): Enter
    • Switch to unix_socket authentication [Y/n]: n
    • Set root password? [Y/n]: y, 원하는 비밀번호(예: openstack) 입력
    • Remove anonymous users? [Y/n]: y (권장)
    • Disallow root login remotely? [Y/n]: n (OpenStack은 원격 DB 접속이 필요)
    • Remove test database and access to it? [Y/n]: y (권장)
    • Reload privilege tables now? [Y/n]: y (권장)

 

  • Openstack용 데이터베이스 및 계정 생성
    • 아래 SQL 명령어를 실행해 각 서비스에 필요한 데이터베이스와 사용자를 생성함
    • sudo mysql -u root -p
-- 데이터베이스 생성
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
CREATE DATABASE placement;

-- nova 사용자 생성 및 권한 부여
CREATE USER 'nova'@'localhost' IDENTIFIED BY 'openstack';
CREATE USER 'nova'@'%' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%';

-- placement 사용자 생성 및 권한 부여
CREATE USER 'placement'@'localhost' IDENTIFIED BY 'placementpass';
CREATE USER 'placement'@'%' IDENTIFIED BY 'placementpass';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%';

FLUSH PRIVILEGES;
EXIT;

 

Openstack 핵심 서비스 설치

 

여기서는 ubuntu 22.04만 하면됨, 나는 24.04를 쓰는데 24.04에서는 기본으로 탑재되어 있음

24.04를 기준으로 해보자

sudo apt update
sudo apt install -y \
    nova-compute \
    glance \
    neutron-linuxbridge-agent \
    placement-api \
    keystone \
    mariadb-server \
    rabbitmq-server \
    memcached

 

다운받고나서 아래 코드로 확인하면 됨

systemctl status nova-compute
systemctl status glance-api

 

 

 

----

아래는 22.04

sudo add-apt-repository cloud-archive:caracal
sudo apt update

 

필요한 서비스를 선택해서 설치하면됨

sudo apt install -y \
    nova-compute \
    glance \
    neutron-linuxbridge-agent \
    placement-api \
    keystone \
    mariadb-server \
    rabbitmq-server \
    memcached \
    etcd

 

  • Openstack 서비스 설정
    • 각 서비스는 /etc/<서비스명>/<설정파일>.conf 경로에서 설정을 관리합니다. 데이터베이스 연결 설정이 대표적임
    • ex)  /etc/nova/nova.conf 파일에 데이터베이스 연결 정보를 아래와 같이 추가
[api_database]
connection = mysql+pymysql://nova:openstack@172.16.0.254/nova_api

[database]
connection = mysql+pymysql://nova:openstack@172.16.0.254/nova

[placement_database]
connection = mysql+pymysql://placement:placementpass@172.16.0.254/placement

sudo nano /etc/nova/nova.conf 로 열어서 진행을 하면됨

crtl + w를 통해 검색을 해서 진행해주면됨

  • MariaDB/MySQL 서비스는 항상 컨트롤러 노드에서 실행함
  • 보안상 운영 환경에서는 강력한 비밀번호 사용을 권장함
  • OpenStack 공식 설치 가이드(영문/한글)에서 최신 정보와 각 서비스별 추가 설정을 확인할 수 있음

 

'클라우드 > OpenStack' 카테고리의 다른 글

glance에서 keystone 서비스 연동  (0) 2025.07.19
Key Stone install & managment  (0) 2025.07.06
Openstack Storage - Cinder/Manila/Ceph  (0) 2025.07.05
Openstack Storage-Swift  (0) 2025.07.05
Introduction to Openstack  (0) 2025.06.29