2022.02.16 - [STUDY/OpenStack] - [OpenStack] 오픈스택 수동 설치(1)
시작하기전에
Keystone은 Nova, Neutron에 이어 굉장히 중요한 프로젝트이다. 모든 프로젝트에 접근하기 위한 키를 쥐고 있으며, Openstack 클라우드 보안에 핵심적인 역할을 하고 있다.
단순하게 Keystone을 통해 인증값을 받고 인증값이 다른 프로젝트에게 API 요청을 할 수 있도록 만드는 열쇠이다.
2. 오픈스택 서비스 설치 - Keystone(인증서비스)
■ 설치 및 구성
○ 컨트롤러 노드
1. 전제조건
- ID 서비스를 설치 및 구성하기 전에 데이터베이스를 생성
1-1. root 사용자로 데이터베이스 서버 연결
# mysql
1-2. keystone 데이터베이스 생성
MariaDB [(none)]> CREATE DATABASE keystone;
1-3. keystone 데이터베이스에 대한 적절한 액세스 권한 부여
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
* KEYSTONE_DBPASS적절한 비밀번호로 교체하십시오 .
1-4. 데이터베이스 액세스 클라이언트를 종료
MariaDB [(none)]> exit
2. 구성 요소 설치 및 구성
2-1. 패키지 설치
# apt install keystone
2-2. /etc/keystone/keystone.conf 파일 편집
# vi /etc/keystone/keystone.conf
[database]
# ... 데이터베이스 액세스를 구성
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
* KEYSTONE_DBPASS를 데이터베이스에 대해 선택한 암호로 바꿉니다 .
[token]
# ... Fernet 토큰 공급자를 구성
provider = fernet
2-3. ID 서비스 데이터베이스 채우기
# su -s /bin/sh -c "keystone-manage db_sync" keystone
2-4. Fernet 키 저장소 초기화
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
2-5. ID 서비스 부트스트랩
# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
3. Apache HTTP 서버 구성
- /etc/apache2/apache2.conf 파일을 편집하고 컨트롤러 노드를 참조하도록 ServerName 옵션을 구성
# vi /etc/apache2/apache2.conf
ServerName controller
* ServerName이 없으면 추가
4. 설치 완료
4-1. Apache 서비스 재시작
# service apache2 restart
4-2. 적절한 환경 변수를 설정하여 관리 계정을 구성
$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:5000/v3
$ export OS_IDENTITY_API_VERSION=3
* 여기에 표시된 값은 keystone-manage bootstrap에서 생성된 기본 값이다.
keystone-manage bootstrap 명령 시 ADMIN_PASS를 변경했다면 변경한 패스워드를 넣어야한다.
■ 도메인, 프로젝트, 사용자 및 역할 만들기
○ 컨트롤러 노드
1. 도메인 생성
( 키스톤 관리 부트스트랩 단계에서 "기본" 도메인이 이미 존재하지만 새 도메인을 만드는 공식적인 방법)
$ openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | An Example Domain |
| enabled | True |
| id | 2f4f80574fd84fe6ba9067228ae0a50c |
| name | example |
| tags | [] |
+-------------+----------------------------------+
2. 서비스에 대한 프로젝트 생성
- service 프로젝트 생성
$ openstack project create --domain default \
--description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 24ac7f19cd944f4cba1d77469b2a73ed |
| is_domain | False |
| name | service |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
3. 프로젝트 및 사용자 생성
- 일반(비관리자) 작업은 권한이 없는 프로젝트와 사용자를 사용해야 합니다. 예를 들어 이 가이드에서는 myproject프로젝트와 myuser 사용자를 생성합니다.
3-1. myproject 프로젝트 생성
$ openstack project create --domain default \
--description "Demo Project" myproject
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 231ad6e7ebba47d6a1e57e1cc07ae446 |
| is_domain | False |
| name | myproject |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
3-2. myuser 사용자 생성
$ openstack user create --domain default \
--password-prompt myuser
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | aeda23aa78f44e859900e22c24817832 |
| name | myuser |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
3-3. myrole 역할 생성
$ openstack role create myrole
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 997ce8d05fc143ac97d83fdfb5998552 |
| name | myrole |
+-----------+----------------------------------+
3-4. myrole역할에 myproject프로젝트 및 myuser사용자 추가
$ openstack role add --project myproject --user myuser myrole
4. 작동 확인
4-1. 임시 OS_AUTH_URL및 OS_PASSWORD 환경 변수를 설정 해제
$ unset OS_AUTH_URL OS_PASSWORD
4-2. admin사용자로 인증 토큰을 요청
$ openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
Password: ADMIN_PASS
+------------+-----------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------+
| expires | 2016-02-12T20:14:07.056119Z |
| id | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
| | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
| | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws |
| project_id | 343d245e850143a096806dfaefa9afdc |
| user_id | ac3377633149401296f6c0d92d79dc16 |
+------------+-----------------------------------------------------------------+
4-3. 이전에 생성한 myuser사용자로 인증 토큰을 요청
$ openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name myproject --os-username myuser token issue
Password: admin!23
+------------+-----------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------+
| expires | 2016-02-12T20:15:39.014479Z |
| id | gAAAAABWvi9bsh7vkiby5BpCCnc-JkbGhm9wH3fabS_cY7uabOubesi-Me6IGWW |
| | yQqNegDDZ5jw7grI26vvgy1J5nCVwZ_zFRqPiz_qhbq29mgbQLglbkq6FQvzBRQ |
| | JcOzq3uwhzNxszJWmzGC7rJE_H0A_a3UFhqv8M4zMRYSbS2YF0MyFmp_U |
| project_id | ed0b60bf607743088218b0a533d5943f |
| user_id | 58126687cbcc4888bfa9ab73a2256f27 |
+------------+-----------------------------------------------------------------+
■ 오픈스택 클라이언트 환경 스크립트 생성
1. 스크립트 만들기
- admin및 demo 프로젝트 및 사용자에 대한 클라이언트 환경 스크립트를 생성 이후 부분에서는 스크립트를 참조하여 클라이언트 작업에 적절한 자격 증명을 로드
1-1. admin-openrc파일을 생성 및 편집하고 다음 콘텐츠를 추가
$ sudo vi admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
* ADMIN_PASS를 ID 서비스에서 admin 사용자에 대한 비밀번호로 바꿉니다.
1-2. demo-openrc파일을 생성 및 편집하고 다음 콘텐츠를 추가
$ sudo vi demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
* DEMO_PASS를 ID 서비스에서 myuser 사용자에 대한 비밀번호로 바꿉니다.
2. 스크립트 사용하기
- 클라이언트를 특정 프로젝트 및 사용자로 실행하려면 관련 클라이언트 환경 스크립트를 실행하기 전에 로드
2-1. admin-openrc 파일을 로드하여 Identity 서비스의 위치와 프로젝트 및 admin 사용자 자격 증명으로 환경 변수를 채운다.
$ . admin-openrc
2-2. 인증 토큰 요청
$ openstack token issue
+------------+-----------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------+
| expires | 2016-02-12T20:44:35.659723Z |
| id | gAAAAABWvjYj-Zjfg8WXFaQnUd1DMYTBVrKw4h3fIagi5NoEmh21U72SrRv2trl |
| | JWFYhLi2_uPR31Igf6A8mH2Rw9kv_bxNo1jbLNPLGzW_u5FC7InFqx0yYtTwa1e |
| | eq2b0f6-18KZyQhs7F3teAta143kJEWuNEYET-y7u29y0be1_64KYkM7E |
| project_id | 343d245e850143a096806dfaefa9afdc |
| user_id | ac3377633149401296f6c0d92d79dc16 |
+------------+-----------------------------------------------------------------+
○ trouble shooting
mush@controller:~$ openstack domain create --description "An Example Domain" example
Traceback (most recent call last):
File "/usr/bin/openstack", line 6, in <module>
from openstackclient.shell import main
File "/usr/lib/python3/dist-packages/openstackclient/shell.py", line 23, in <module>
from osc_lib import shell
File "/usr/lib/python3/dist-packages/osc_lib/shell.py", line 24, in <module>
from cliff import app
File "/usr/lib/python3/dist-packages/cliff/app.py", line 22, in <module>
import cmd2
File "/usr/lib/python3/dist-packages/cmd2.py", line 585, in <module>
_ = pyperclip.paste()
File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 667, in lazy_load_stub_paste
copy, paste = determine_clipboard()
File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 558, in determine_clipboard
return init_gi_clipboard()
File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 167, in init_gi_clipboard
gi.require_version('Gtk', '3.0')
File "/usr/lib/python3/dist-packages/gi/__init__.py", line 129, in require_version
raise ValueError('Namespace %s not available' % namespace)
ValueError: Namespace Gtk not available
# sudo apt install gir1.2-gtk*
'STUDY > OpenStack' 카테고리의 다른 글
[OpenStack] 오픈스택 수동 설치(1) (0) | 2022.02.16 |
---|