본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Manually Install OpenStack

Openstack Keystone on Centos (Rocky)

by iamlucia 2020. 8. 18.

Keystone: Identity Service (인증 서비스) 


 

Prerequisties .
사전에 오픈스택 기초 환경이 구성 필요
참조: https://4betterme.tistory.com/39

🙋‍♀️인증과 토큰의 개념? 

인증
1) 인증이란 사용자의 신분을 확인하는 절차로 사용되는 증명자료를 제출하고 Keystone은 이를 검증
2) 사용자는 인증을 위한 자료로 이름, 패스워드가 사용되며 인증의 으답으로 keystone은 인증 토큰을 발행
3) 인증 토큰을 사용하여 다른 서비스 요청 가능

토큰
1)사용자가 오픈스택 서비스에 접근할 때 신분 증명 위해 사용하는 텍스트 데이터 
2) 유형 : uuid pki fernet (Ocata 릴리즈부터 fernet token을 default 토큰 프로바이더로 사용)

 


 

<< ⭕ Keystone 서비스 설치는  컨트롤러 노드에서 진행한다. >>

 

 

🟢 Mysql 에서 keystone 데이터 베이스를 생성한 다음, 해당 데이터베이스에 접속권한 부여 

 

#  mysql -u root -p 
[root 비밀번호 ]입력하여 mariadb 접속
-------------------------------
MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '[keystone 패스워드]';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'  IDENTIFIED BY '[keystone 패스워드]';
MariaDB [(none)]> exit; 

 

🟢 Keystone 관련 패키지 설치 :

 

#yum -y install openstack-keystone httpd mod_wsgi

 

🟢 etc/keystone/keystone.conf  생성 후 내용 수정 : 

 

#  vi /etc/keystone/keystone.conf 
--------------------------------
[database] //데이터 베이스 접근에 대한 설정
# ...
connection=mysql+pymysql://keystone:[keystone database 비밀번호]@[컨트롤러 노드 관리용 IP]/keystone

[token]
//Fernet token provider 설정 

# ...
provider = fernet

 

🟢 특정 계정으로 쉘 스크립트 실행시켜 Keystone 데이터베이스 Populate (테이블 생성) :  

 

# su -s /bin/sh -c "keystone-manage db_sync" keystone

 

🟢 Fernet 키 레포지토리 초기화 : 토큰 암호화 시 사용될 키를 생성 

 

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

 

🟢 인증 서비스 Bootstrap : bootstrap 명령어를 통해 사용자, 프로젝트, 역할 생성 

 

# keystone-manage bootstrap --bootstrap-password [admin 사용자 비밀 번호] --bootstrap-admin-url http://[컨트롤러 노드 관리용 IP]:5000/v3/ --bootstrap-internal-url http://[컨트롤러 노드 관리용 IP]:5000/v3/  --bootstrap-public-url http://[컨트롤러 노드 관리용 IP]:5000/v3/   --bootstrap-region-id RegionOne

 


🔨 APACHE HTTP 서버 구성

 

🟢 /etc/httpd/conf/httpd.conf 파일 생성 및 서버명 편집  

 

# vi /etc/httpd/conf/httpd.conf
-------------------------

ServerName [컨트롤러 노드 IP]

 

🟢 /etc/httpd/conf.d/wsgi-keystone.conf 파일 내용 확인 후  /usr/share/keystone/wsgi-keystone.conf 로의 링크 생성: 

 

# ln -s /usr/share/keystone/wsgi-keystone.conf   /etc/httpd/conf.d/
Listen 5000

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone.log
    CustomLog /var/log/httpd/keystone_access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

 


🔨 설치 마무리

🟢 HTTP 서비스 실행 및 활성화

 

# systemctl enable httpd.service
# systemctl start httpd.service
# systemctl start httpd.service

 

🟢 admin 계정 구성  

 

# export OS_USERNAME=admin
# export OS_PASSWORD=[bootstrap 명령어를 통해 생성한 admin 패스워드]
# export OS_PROJECT_NAME=admin
# export OS_USER_DOMAIN_NAME=Default 
# export OS_PROJECT_DOMAIN_NAME=Default
# export OS_AUTH_URL=http://[컨트롤러 노드의 관리용 IP]:5000/v3
# export OS_IDENTITY_API_VERSION=3

 

 

 


🔨 도메인, 프로젝트, 계정, 역할 생성 

Keystone 인증서비스는 도메인(domain), 프로젝트(project; 이전에는 tenant), 계정(user) 그리고 역할(role)의 조합을 활용한다.

 

 

🟢 Domain 생성  

 

# openstack domain create --description "Openstack Identity" keystone

 

 

🟢 Project 생성  

 

# openstack project create --domain default  --description "Service Project" service

 

🟢 Endpoint 생성 : 외부용, 내부용, 관리용 총 세 개 생성 
오픈스택의 서비스를 이용할 때 이러한 방식으로 (서비스에 매칭되도록) 생성된 Endpoint URL로만 접근하게 된다

 

# openstack endpoint create --region RegionOne identity public http://[컨트롤러 노드 관리용 IP]:5000/v3
# openstack endpoint create --region RegionOne identity internal http://[컨트롤러 노드 관리용 IP]:5000/v3
# openstack endpoint create --region RegionOne identity admin  http://[컨트롤러 노드 관리용 IP]:5000/v3

 

 

 

🟢 Keystone에 admin을 위한 도메인, 프로젝트, 계정, 역할 생성 :

 

설치 마무리 과정 중 export 명령어를 통해 이미 admin을 위한 도메인, 프로젝트, 계정은 생성되었다. 

 

"admin 계정 관련 내용 확인"
# openstack user list
# openstack project list
# openstack domain list
# openstack role list
 
" admin 계정 프로젝트, 사용자, 롤 연결" 
# openstack role add --project admin --user admin admin

"un-admin 계정 생성" 
# openstack project create --domain default  --description "Service Project" service
# openstack user create --domain default --password-prompt myuser
User Password:  [비밀번호 입력] 
Repeat User Password:
# openstack role create myrole
# openstack role add --project myproject --user myuser myrole

 

🟢  계정 + 프로젝트 + 역할 : 

 

# openstack role add --project admin --user admin admin 
=> admin 계정을 admin 프로젝트에 추가하고, admin 롤을 할당 (프로젝트 + 사용자 + 롤) 


📍 Verification 

🟢 환경변수 unset 및 token issue: 

 

# unset OS_AUTH_URL OS_PASSWORD
# openstack --os-auth-url http://192.168.92.100:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
# openstack --os-auth-url http://192.168.92.100:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue

 

🟢 admin-openrc 및 demo-openrc 파일(일종의 환경변수 스크립트) 생성하여 환경변수 내용 수정  : 

 

# cat 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=test123
export OS_AUTH_URL=http://192.168.92.100:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

 

# cat 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=test123
export OS_AUTH_URL=http://192.168.92.100:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

 

 

🟢 환경변수 스크립트 실행 후 인증 토큰 요청 : 

 

# .  admin-openrc
#  openstack token issue

 

 


🟢❗ 9월 23일 다시 매뉴얼로 설치해보면서 느낀점 추가 

  1. openstack service identity 동일한 서비스가 두 개 생겨서 에러가 났다. 서비스를 삭제하고 다시 만들 때,

    인증 서비스 bootstrap부터 다시 시작해야 한다. endpoint url을 찾을 수 있도록. 

  2. adminrc 또는 demorc 파일 작성 시 '=' 기준 양옆에 공백을 두지 않아야 한다. 

  3. 5000, 35357 포트 두 가지로 나누었던 엔드포인트를 5000으로 통일 가능하다.