본문 바로가기
Server-side 개발 & 트러블 슈팅/Openstack (오픈스택)

[Openstack] 오픈스택 키스톤(keystone) 설치, user, role, project, 엔드포인트(endpoint) 관리

by 코딩하는 동현 2025. 6. 28.

keystone 설치와 설정

최신 Ubuntu(예: 22.04 LTS)와 OpenStack(2025년 기준) 환경에서 OpenStack Identity Service(Keystone)를 설치하고 설정하는 방법을 최신 가이드에 맞게 안내합니다.

1. MariaDB에 Keystone 데이터베이스와 계정 생성

mysql -uroot -p

CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';
FLUSH PRIVILEGES;
EXIT;

  • openstack은 비밀번호의 예시일 뿐입니다.
mysql -ukeystone -popenstack -hcontroller keystone

2. Keystone 및 관련 패키지 설치

sudo apt update
sudo apt install keystone python3-openstackclient apache2 libapache2-mod-wsgi-py3

  • 최신 Ubuntu에서는 Keystone이 Apache2 + mod_wsgi로 서비스됩니다.

  •  

3. Keystone 설정 파일 편집 (/etc/keystone/keystone.conf)

  • [database] 섹션에서 DB 연결 정보 입력: vi 편집기에서 /[database] 입력
    • controller는 컨트롤러 노드의 호스트명 또는 IP로 바꿔주세요.
[database]
# connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
connection = mysql+pymysql://keystone:openstack@controller/keystone
  • [token] 섹션에서 Fernet 토큰 방식 지정:
[token]
provider = fernet
  • [memcache] 섹션에 memcached 서버 정보 추가(예시):
[memcache]
servers = controller:11211
  • 설정 변경 후 저장

4. Keystone DB 마이그레이션(테이블 생성)

sudo -u keystone keystone-manage db_sync
  • keystone DB에 필요한 테이블이 생성됩니다.

5. Fernet 키 및 Credential 키 저장소 초기화

sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

  • Fernet 키는 Keystone 토큰 암호화에, Credential 키는 인증서 암호화에 사용됩니다.

6. Keystone 부트스트랩(최초 관리자 계정, 엔드포인트 등록)

sudo 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
  • ADMIN_PASS는 admin 계정의 비밀번호로, 반드시 기억해두세요. (예시: openstack)

7. Apache2 설정 및 재시작

  • /etc/apache2/apache2.conf에 ServerName 추가(예: ServerName controller)
  • Apache2 서비스 재시작:
  • sudo systemctl restart apache2
  • Keystone은 Apache2 + WSGI로 5000 포트에서 서비스됩니다.

8. 환경 변수 파일(admin-openrc.sh) 작성

export OS_USERNAME=admin
export OS_PASSWORD=openstack
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
  • 이 파일을 source 해서 OpenStack CLI 인증에 사용합니다.

9. Keystone 정상 동작 확인

source ~/admin-openrc.sh
openstack token issue

  • 토큰이 정상적으로 발급되면 Keystone이 정상적으로 동작하는 것입니다.

How it works... (최신 설명)

  • Keystone은 MariaDB에 사용자/프로젝트/역할 정보를 저장합니다.
  • Fernet 키와 Credential 키는 토큰 및 인증서 암호화에 사용됩니다.
  • Apache2 + mod_wsgi 환경에서 Keystone이 5000 포트로 서비스됩니다.
  • 부트스트랩 과정에서 admin 계정과 서비스 엔드포인트가 등록됩니다.
  • 환경 변수 파일을 통해 CLI에서 인증 정보를 쉽게 관리할 수 있습니다.

최신 Ubuntu(OpenStack 2025년 기준)에서는 openstack CLI를 사용해 역할(roles)을 관리합니다.

이전의 keystone role-create 명령은 더 이상 사용하지 않으며,

대신 openstack role create 명령을 사용합니다.


OpenStack에서 역할(Role) 생성 및 관리 (최신 방식)

1. 사전 준비

  • OpenStack CLI(python3-openstackclient)가 설치되어 있어야 합니다.
  • admin-openrc.sh 등 환경 변수 파일을 source 해서 인증 정보를 적용해야 합니다.
  • source ~/admin-openrc.sh

2. 역할 생성

admin 역할 생성 (이미 있을 수 있음):

openstack role create admin

Member 역할 생성 (일반 사용자용):

openstack role create Member
  • 일반적으로 OpenStack의 기본 정책에서는 _member_라는 이름의 역할이 사용되기도 합니다. (Member 또는 _member_ 중 환경에 맞게 선택)

3. 역할 목록 확인

openstack role list
  • 생성된 역할의 이름과 ID를 확인할 수 있습니다.

4. 역할 할당 (사용자-프로젝트 쌍에 할당)

openstack role add --user <USER_NAME> --project <PROJECT_NAME> <ROLE_NAME>
  • 예시: demo 프로젝트의 user1에게 Member 역할 할당
  • openstack role add --user user1 --project demo Member

5. 할당된 역할 확인

openstack role assignment list --user <USER_NAME> --project <PROJECT_NAME> --effective

How it works...

  • 역할(Role)은 프로젝트(tenant) 내에서 사용자가 어떤 권한을 갖는지 정의합니다.
  • admin 역할은 OpenStack 환경 전체의 관리 권한을,Member(또는 _member_) 역할은 일반 사용자 권한을 의미합니다.
  • 역할은 사용자-프로젝트 쌍에 할당되어야 실제 권한이 부여됩니다[4][5].
  • Horizon(대시보드)에서 사용자를 생성할 때도 기본적으로 Member 역할이 할당됩니다.

이 방식이 최신 Ubuntu 및 OpenStack 환경에서 표준입니다.

최신 Ubuntu(OpenStack 2025년 기준)에서는 keystone CLI 대신 openstack CLI를 사용하며,

"tenant"는 "project"라는 용어로 바뀌었습니다.

아래는 최신 환경에 맞춘 단계별 가이드입니다.


1. 프로젝트(tenant) 생성

openstack project create --domain default --description "Default Cookbook Tenant" cookbook
  • cookbook이라는 이름의 프로젝트(tenant)를 생성합니다.

2. 역할(role) 생성 (필요 시)

openstack role create Member
openstack role create admin
  • 일반적으로 admin 역할은 기본적으로 존재합니다.

3. 사용자(user) 생성

(1) admin 사용자 생성

openstack user create --domain default --project cookbook --password 'openstack' --email root@localhost admin

openstack user create --domain default --project admin --password 'openstack' --email root@localhost admin

(2) demo 사용자 생성

openstack user create --domain default --project cookbook --password 'openstack' --email demo@localhost demo

4. 역할 할당

(1) cookbook 프로젝트의 admin 사용자에게 admin 역할 할당(필요 시)

openstack role add --user admin --project cookbook admin

(2) cookbook 프로젝트의 demo 사용자에게 Member 역할 할당

openstack role add --user demo --project cookbook member

5. 생성 및 할당 확인

프로젝트(tenant) 목록

openstack project list

사용자 목록

openstack user list

역할 목록

openstack role list

역할 할당 현황

openstack role assignment list --user admin --project cookbook --names
openstack role assignment list --user demo --project cookbook --names

How it works... (최신 설명)

  • 프로젝트(tenant): OpenStack에서 자원(서버, 볼륨 등)을 분리 관리하는 단위입니다.
  • 사용자(user): OpenStack에 로그인할 수 있는 계정입니다.
  • 역할(role): 사용자가 프로젝트 내에서 어떤 권한을 가지는지 정의합니다.
  • 역할 할당: 사용자-프로젝트-역할의 조합으로 실제 권한이 부여됩니다.
  • openstack CLI는 이름 기반으로 관리가 가능하므로, ID를 따로 추출하지 않아도 됩니다.

요약

  • 최신 OpenStack에서는 openstack project/user/role 명령어로 프로젝트, 사용자, 역할을 생성하고 할당합니다.
  • tenant → project, keystone CLI → openstack CLI로 변경되었습니다.
  • 각 명령어는 이름 기반으로 간단하게 사용할 수 있습니다.

이 방식이 최신 Ubuntu 및 OpenStack 환경에서 표준입니다.


최신 Ubuntu/OpenStack에서 서비스 엔드포인트 정의하기

사전 준비

  • openstack CLI가 설치되어 있어야 하며,
  • 관리자 환경변수(admin-openrc.sh 등)를 source 해야 합니다.
  • source ~/admin-openrc.sh

1단계: 서비스 등록

각 서비스별로 아래 명령을 실행해 등록합니다.

openstack service create --name nova --description "OpenStack Compute Service" compute
openstack service create --name ec2 --description "EC2 Service" ec2
openstack service create --name glance --description "OpenStack Image Service" image
openstack service create --name keystone --description "OpenStack Identity Service" identity
openstack service create --name cinder --description "OpenStack Block Storage" volume

2단계: 엔드포인트 등록

각 서비스별로 public, internal, admin 엔드포인트를 등록합니다.

<CONTROLLER_IP>는 컨트롤러 노드의 IP나 호스트명으로 바꿔주세요.

REGION=RegionOne
ENDPOINT=<CONTROLLER_IP>

# Nova Compute API
openstack endpoint create --region $REGION compute public   <http://$ENDPOINT:8774/v2.1/%\\(tenant_id\\)s>
openstack endpoint create --region $REGION compute internal <http://$ENDPOINT:8774/v2.1/%\\(tenant_id\\)s>
openstack endpoint create --region $REGION compute admin    <http://$ENDPOINT:8774/v2.1/%\\(tenant_id\\)s>

# EC2 API
openstack endpoint create --region $REGION ec2 public   <http://$ENDPOINT:8773/services/Cloud>
openstack endpoint create --region $REGION ec2 internal <http://$ENDPOINT:8773/services/Cloud>
openstack endpoint create --region $REGION ec2 admin    <http://$ENDPOINT:8773/services/Admin>

# Glance Image Service
openstack endpoint create --region $REGION image public   <http://$ENDPOINT:9292/v2>
openstack endpoint create --region $REGION image internal <http://$ENDPOINT:9292/v2>
openstack endpoint create --region $REGION image admin    <http://$ENDPOINT:9292/v2>

# Keystone Identity Service
openstack endpoint create --region $REGION identity public   <http://$ENDPOINT:5000/v3>
openstack endpoint create --region $REGION identity internal <http://$ENDPOINT:5000/v3>
openstack endpoint create --region $REGION identity admin    <http://$ENDPOINT:5000/v3>

# Cinder Volume Service
openstack endpoint create --region $REGION volume public   <http://$ENDPOINT:8776/v3/%\\(tenant_id\\)s>
openstack endpoint create --region $REGION volume internal <http://$ENDPOINT:8776/v3/%\\(tenant_id\\)s>
openstack endpoint create --region $REGION volume admin    <http://$ENDPOINT:8776/v3/%\\(tenant_id\\)s>
  

참고 및 설명

  • %(tenant_id)s 구문은 프로젝트별로 엔드포인트 URL을 동적으로 생성할 때 사용합니다.
  • 포트/URL은 환경에 따라 다를 수 있으니, 실제 배포 환경에 맞게 수정하세요.
  • RegionOne은 기본값이며, 여러 리전을 운영할 경우 다른 이름을 쓸 수 있습니다.

작동 원리

  • Keystone은 각 서비스의 엔드포인트 정보를 저장하고, 클라이언트가 Keystone에 질의하면 이 정보를 반환합니다.
  • 엔드포인트가 정의되어야 OpenStack의 각 서비스와 클라이언트가 올바르게 통신할 수 있습니다.

요약

  • openstack service create로 서비스 등록
  • openstack endpoint create로 public, internal, admin 엔드포인트 등록
  • 환경변수와 쉘 명령어를 활용하면 자동화도 쉽게 할 수 있음

이 방식이 최신 Ubuntu 및 OpenStack에서 엔드포인트를 정의하는 표준 방법입니다.

다.

반응형

댓글