[Openstack] Openstack CLI로 다루기(초기 세팅 & 관리자가 할 일)
이전까지는 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 되었으며, 도메인 기능이 없다. |
인증 흐름 예시
- openstack CLI는 위 환경 변수들을 기반으로 Keystone API (OS_AUTH_URL)에 인증 요청을 보낸다.
- Keystone은 사용자 이름과 비밀번호 (OS_USERNAME, OS_PASSWORD)를 검증하고,
- 해당 사용자의 프로젝트 및 도메인 정보 (OS_PROJECT_NAME, OS_PROJECT_DOMAIN_NAME, OS_USER_DOMAIN_NAME)를 바탕으로 토큰을 발급
- 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로 구성해보는 실습을 이어가겠다.