공부일지/클라우드 SA 교육

[Openstack] Openstack CLI로 다루기(초기 세팅 & 관리자가 할 일)

박수빈98 2025. 6. 5. 23:19

이전까지는 Horizon(Web GUI)을 활용하여 OpenStack의 기본 구성과 리소스 생성을 실습했다.
하지만 실무 환경에서는 CLI를 활용한 조작과 자동화가 훨씬 더 일반적이다.

이번 포스팅에서는 Bridge 방식으로 구성된 실제 네트워크 기반 OpenStack 환경 위에서,
openstack CLI 명령어를 사용하여 다음과 같은 실습을 진행한다:

  • 인증 환경 구성 및 CLI 필수 패키지 설정
  • 관리자 관점에서 외부 네트워크, 프로젝트, 사용자, Flavor 구성
  • 사용자 관점에서 내부 네트워크, 라우터, Floating IP, 인스턴스 생성
  • Swift 객체 스토리지 및 Heat 템플릿을 통한 리소스 자동 배포 실습

 

openstack 명령어 써보기

openstack이 설치 됐던 VM에서 아래처럼 명령어를 써봤다.

[root@localhost ~]# openstack server list
/usr/lib/python3.9/site-packages/requests/__init__.py:86: RequestsDependencyWarning: Unable to find acceptable character detection dependency (chardet or charset_normalizer).
  warnings.warn(
Missing value auth-url required for auth plugin password

일단 이건 특정 패키지가 없어서 생긴 에러

/usr/lib/python3.9/site-packages/requests/__init__.py:86: RequestsDependencyWarning: Unable to find acceptable character detection dependency (chardet or charset_normalizer).
  warnings.warn(
  
  dnf install -y python3-requests python3-chardet

패키지 설치 후 에러 메시지

[root@localhost ~]# openstack server list
Missing value auth-url required for auth plugin password

자격 증명 없기 때문에 바로 오픈스택 명령어 사용 불가능

cat keystonerc_admin
unset OS_SERVICE_TOKEN
export OS_USERNAME=admin
export OS_PASSWORD='test1234'
export OS_REGION_NAME=RegionOne
export OS_AUTH_URL=http://10.128.2.66:5000/v3
export PS1='[\\u@\\h \\W(keystone_admin)]\\$ '

export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3

이런 자격증명을 토큰으로 만들어서 CLI로 사용할 사용자에게 주어야 CLI로 접근 가능

OpenStack CLI 환경 변수 설명

환경 변수  설명
unset OS_SERVICE_TOKEN 과거 OpenStack에서는 OS_SERVICE_TOKEN으로 인증을 했었는데, 현재는 password 방식 인증을 사용하기 위해 이 값을 명시적으로 해제(unset)
export OS_USERNAME=admin OpenStack에 로그인할 때 사용할 사용자 이름. 일반적으로 admin, demo 등을 사용
export OS_PASSWORD='test1234' 해당 사용자의 비밀번호. 보통은 관리자 패스워드가 설정
export OS_REGION_NAME=RegionOne 사용할 OpenStack 리전(region) 을 저장함. 기본 리전 이름은 RegionOne
export OS_AUTH_URL=http://10.128.2.66:5000/v3 Keystone 인증 API 엔드포인트. CLI가 Keystone에 인증 요청을 보낼 주소.
포트 5000은 일반적으로 인증용 public API 포트
export PS1='[\\u@\\h \\W(keystone_admin)]\\$ ' Bash 프롬프트를 꾸며주는 설정. (keystone_admin) 이라는 접미사가 붙어, 지금 인증된 환경임을 쉽게 구분할 수 있다.
export OS_PROJECT_NAME=admin 인증 요청 시 사용할 프로젝트(테넌트) 이름 
해당 프로젝트 컨텍스트 안에서 리소스를 조회하거나 조작할 수 있다.
export OS_USER_DOMAIN_NAME=Default 사용자 계정이 속한 도메인 이름 일반적으로 Default로 설정
export OS_PROJECT_DOMAIN_NAME=Default 프로젝트가 속한 도메인 이름 이 역시 기본은 Default로 설정
export OS_IDENTITY_API_VERSION=3 사용할 Keystone API 버전 최신 OpenStack은 대부분 v3를 사용한다.
v2.0은 deprecated 되었으며, 도메인 기능이 없다.

인증 흐름 예시

  1. openstack CLI는 위 환경 변수들을 기반으로 Keystone API (OS_AUTH_URL)에 인증 요청을 보낸다.
  2. Keystone은 사용자 이름과 비밀번호 (OS_USERNAME, OS_PASSWORD)를 검증하고,
  3. 해당 사용자의 프로젝트 및 도메인 정보 (OS_PROJECT_NAME, OS_PROJECT_DOMAIN_NAME, OS_USER_DOMAIN_NAME)를 바탕으로 토큰을 발급
  4. CLI는 이 토큰을 가지고 각 OpenStack 서비스 (Nova, Glance, Neutron 등) API를 호출

인증 요청 받는 법

[root@localhost ~]# source keystonerc_admin
[root@localhost ~(keystone_admin)]# ^C

이런 식으로 자격 증명이 완료 되면 export PS1='[\\u@\\h \\W(keystone_admin)]\\$ ' 이 설정에 의해 프롬프트에 자격증명이 됐다는 표시가 생김

openstack 명령어 재시도

[root@localhost ~(keystone_admin)]# openstack network list
+--------------------------------------+------------------+--------------------------------------+
| ID                                   | Name             | Subnets                              |
+--------------------------------------+------------------+--------------------------------------+
| b7e0a87a-a021-4ed3-8727-44e0d202e433 | external-network | 20eb90b4-8140-4ba5-bf8c-7869375e7427 |
| e2aa3645-0035-4027-b117-181215fb4ac7 | web-network      | c0230271-1907-4f77-be9c-6efc7ad2e6aa |
+--------------------------------------+------------------+--------------------------------------+

Openstack CLI 관련 의존성 설치

  • 명령 자동 완성 스크립트 등록
openstack complete | tee /etc/bash_completion.d/osc.bash_completion > /dev/null
exit

이제 CLI로 인프라를 구성할 준비가 끝났다.

GUI로 했던 것을 CLI로 다시 한 번 하며 복습도 같이 진행해 보겠다.

 

관리자(Admin) 권한으로 인프라 기본 구성하기

1. Keystone 및 Horizon 설정

Keystone 토큰 만료 시간 설정 (keystone.conf)

Horizon 대시보드 세션 타임아웃 설정 (local_settings.py)

2. CLI 환경 구축

필수 패키지 설치 (requests, chardet)

CLI 자동완성 등록 (bash_completion)

3. 인증 환경 구성

keystonerc_admin 파일을 통해 admin 사용자 인증

4. 프로젝트 생성 및 유저 추가

[root@localhost ~(keystone_admin)]# openstack project create --domain Default --description "CLI Project" cli-proj
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | CLI Project                      |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 641659a5d2844431b9e5a9f6b56c3762 |
| is_domain   | False                            |
| name        | cli-proj                         |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+
[root@localhost ~(keystone_admin)]# openstack user create --domain Default --project cli-proj --password-prompt cli-user
User Password:
Repeat User Password:
No password was supplied, authentication will fail when a user does not have a password.
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| default_project_id  | 641659a5d2844431b9e5a9f6b56c3762 |
| domain_id           | default                          |
| email               | None                             |
| enabled             | True                             |
| id                  | 66c4aa39797448b0b74fc96690bf5919 |
| name                | cli-user                         |
| description         | None                             |
| password_expires_at | None                             |
+---------------------+----------------------------------+
[root@localhost ~(keystone_admin)]# openstack role add --project cli-proj --user cli-user member

5. 유저 토큰 생성(로그인을 위해)

vi cli-user
unset OS_SERVICE_TOKEN
    export OS_USERNAME=cli-user
    export OS_PASSWORD='test1234'
    export OS_REGION_NAME=RegionOne
    export OS_AUTH_URL=http://172.16.0.130:5000/v3
    export PS1='[\\u@\\h \\W(cli-user)]\\$ '

export OS_PROJECT_NAME=cli-proj
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
------------------유저로 변겅--------------------
source cli-user
[root@localhost ~(cli-user)]#

6. 외부 네트워크 및 서브넷 생성 (공유 리소스)

external-network 네트워크 및 external-subnet 생성

  • 외부 게이트웨이 역할을 수행할 수 있도록 -external 옵션 포함
[root@localhost ~(keystone_admin)]# openstack network create --provider-network-type flat --provider-physical-network extnet --external external-network

서브넷 만들기

  • 서브넷 영역: 10.128.0.0/19
  • allocation pool: start=10.128.18.200,end=10.128.18.210
  • gateway: 10.128.0.1
  • DHCP: off → 자동 할당 시 다른 교육생과 IP가 겹칠 수 있음
openstack subnet create --network external-network --subnet-range 10.128.0.0/19 --allocation-pool start=10.128.18.200,end=10.128.18.210 --gateway 10.128.0.1 --no-dhcp external-subnet

 

7. Flavor 생성

[root@localhost ~(keystone_admin)]# openstack flavor create --vcpus 1 --ram 1024 --disk 10 m1.micro
+----------------------------+--------------------------------------+
| Field                      | Value                                |
+----------------------------+--------------------------------------+
| OS-FLV-DISABLED:disabled   | False                                |
| OS-FLV-EXT-DATA:ephemeral  | 0                                    |
| description                | None                                 |
| disk                       | 8                                    |
| id                         | 83d7ba48-5e86-4d7e-b174-c54953cd6775 |
| name                       | m1.micro                             |
| os-flavor-access:is_public | True                                 |
| properties                 |                                      |
| ram                        | 1024                                 |
| rxtx_factor                | 1.0                                  |
| swap                       | 0                                    |
| vcpus                      | 1                                    |
+----------------------------+--------------------------------------+

 

 

마무리

여기까지 OpenStack CLI 환경을 구축하고, 관리자로서 외부 네트워크, 프로젝트, 사용자, Flavor 등을 설정해보았다.
이제 기본 인프라가 준비되었으니, 다음 실습에서는 일반 사용자(cli-user) 계정으로 로그인하여
내부 네트워크 생성부터 인스턴스 생성, Floating IP 연결까지 전체 인프라를 CLI로 구성해보는 실습을 이어가겠다.