Stein 오픈스택 클라우드 서버 구축(4) - 인증 서비스 (Keystone) 설치 및 구성

blog post 

 

이번 포스트에서는 Keystone 인증 서비스를 구축해 보겠습니다. 이번 작업 역시 컨트롤러 노드에서 진행되며, Keystone에 대한 개념은 앞서 포스팅했던 글을 참고하시기 바랍니다 [바로가기]

 

 

 

1. 전체 구성

 

 

 

컨트롤러 노드에 구성될 서비스는 다음과 같습니다.

 

 

 

 

2. DB 생성

 

앞서 설치한 MariaDB에 Keystone 서비스에 필요한 데이터를 저장하기 위한 DB를 생성하고 권한을 부여합니다.

 

[root@Controller ~]# mysql -u root -p 
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.10-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database keystone; 
Query OK, 1 row affected (0.00 sec)

# 아래 password에 본인이 원하는 패스워드로 대체하여 입력합니다.
MariaDB [(none)]> grant all privileges on keystone.* to keystone@'localhost' identified by 'password'; 
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on keystone.* to keystone@'%' identified by 'password'; 
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges; 
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye

 

 

3. Keystone 설치 및 설정

 

다음과 같이 Keystone 서비스 포함, 관련 패키지들을 설치합니다.

 

[root@Controller ~]# yum --enablerepo=centos-openstack-stein,epel -y install openstack-keystone openstack-utils python-openstackclient httpd mod_wsgi

 

설치한 Keystone 의 conf 파일을 통해 서비스 옵션을 설정합니다.

 

[root@Controller ~]# vim /etc/keystone/keystone.conf

# [cache]섹션에서 아래와 같이 옵션 값을 변경합니다. ip는 본인의 컨트롤러 노드 ip로 변경합니다.
[cache]
......
memcache_servers = 10.0.0.26:11211

# [database] 섹션에서 아래와 같이 옵션 값을 변경합니다. 
# 참고로 아래 옵션은 방금 생성한 DB에 접근하기 위한 정보입니다. 
# 따라서 password에 본인이 입력했던 값으로 대체해 줍니다.
# 본인의 ip로 변경합니다.
[database]
......
connection = mysql+pymysql://keystone:password@10.0.0.26/keystone

# 아래와 같이 [token] 섹션에서 provider 옵션의 주석을 해제합니다.
[token]
......
provider = fernet

 

 

4. DB 동기화

 

 

 

앞서 설정한 값을 DB에 저장합니다.

 

[root@Controller ~]# su -s /bin/bash keystone -c "keystone-manage db_sync"

 




5. 토큰 및 자격증명 암호화를 위한  키 저장소 초기화
 

 

토큰 및 자격 증명 암호화를 위해 사용되는 키 저장소를 생성합니다.

 

# 사용자명과 그룹은 모두 keystone으로 통일합니다.
[root@Controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@Controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

 

6. Keystone 부트스트랩

 

다음과 같이 Keystone을 부트스트랩 합니다.

 

# 자신의 컨트롤러 노드의 통신용ip로 환경변수를 정의합니다.
[root@Controller ~]# export controller=10.0.0.26


# 아래와 같이 Keystone을 부트스트랩 합니다.
# adminpassword는 본인이 원하는 pw로 변경합니다.
[root@Controller ~]# keystone-manage bootstrap --bootstrap-password adminpassword \
--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

 

 

7. 방화벽 및 Selinux 허용

 

다음과 같이 Selinux와 방화벽에서 서비스 및 포트를 허용해 줍니다.

 

[root@Controller ~]# setsebool -P httpd_use_openstack on 
[root@Controller ~]# setsebool -P httpd_can_network_connect on 
[root@Controller ~]# setsebool -P httpd_can_network_connect_db on

[root@Controller ~]# firewall-cmd --add-port=5000/tcp --permanent 
[root@Controller ~]# firewall-cmd --reload 

 

 

8. 서비스 시작

 

Keystone 설정을 활성화 하고 HTTPD 를 시작합니다.

 

[root@Controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ 
[root@Controller ~]# systemctl start httpd 
[root@Controller ~]# systemctl enable httpd 

 

 

9. 정상 동작 확인

 

확인에 앞서 관리자로써 오픈스택 서비스에 접근하기 위한 토큰 파일을 생성해야 합니다. 아래와 같이 인증 파일을 생성합니다.

- OS_PASSWORD : 위의 6. 부트스트래핑 단계에서 지정한 비밀번호로 대체

- OS_AUTH_URL: 본인의 컨트롤러 노드 통신용 ip로 대체

 

[root@Controller ~]# vi ~/admin
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=adminpassword
export OS_AUTH_URL=http://10.0.0.26:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

[root@Controller ~]# chmod 600 ~/admin 
[root@Controller ~]# source ~/admin 

 

이제 테스트 project를 생성해 봄으로써 정상 동작하는지 확인해 봅니다.

 

# 현재 본인이 관리자임을 토큰파일을 통해 인증합니다.
[root@Controller ~]# . admin

# project를 생성합니다.
[root@Controller ~]# openstack project create --domain default --description "Service Project" service 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 8d3e3541755f454f84dafacd37b4303c |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

# 세팅을 확인해봅니다.
[root@Controller ~]# openstack project list 
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 8d3e3541755f454f84dafacd37b4303c | service |
| 9626ec30dfd74a1488e67b23aa19fa01 | admin   |
+----------------------------------+---------+

 

만약 위와 같이 결과가 출력되지 않고 에러 메시지가 출력되는 경우, /var/log/keyston/ 로그 혹은 /var/log/httpd/에서 error 로그나 Keystone 관련 로그를 찾아봅니다. 또 위의 설정에서 잘못 입력한 값(특히 설정파일에서)이 있는지 확인해 봅니다.

 

다음 포스트에서는 Glance 이미지 서비스 구축 과정에 대해 다루도록 하겠습니다.

 

TAGS.

Comments