Skip to document
pieroot log
Markdown Preview

OpenStack 수동 설치 2 — Keystone 인증 서비스 설치

Frontmatter

OpenStack Keystone 인증 서비스를 설치하고 DB 생성, 패키지 설치, Fernet 초기화, bootstrap, 사용자·프로젝트·역할 생성 및 토큰 검증까지 순차적으로 수행하는 가이드입니다.

OpenStack 수동 설치 2 — Keystone 인증 서비스 설치
기본 환경과 공통 서비스를 준비했다면 가장 먼저 설치할 OpenStack 서비스는 Keystone이다. Keystone은 인증, 권한, 서비스 카탈로그를 담당하며 다른 서비스가 서로 통신하기 위한 출발점이 된다.
이번 글에서는 DB 생성 → Keystone 설치 → Fernet 초기화 → bootstrap → 사용자와 프로젝트 생성 → 토큰 검증 순서로 진행한다.

이 글에서 다루는 내용

  • Keystone의 User, Project, Role, Domain, Endpoint, Token
  • Keystone DB와 패키지 설치
  • Fernet 및 credential 키 초기화
  • 관리자와 identity 엔드포인트 bootstrap
  • 일반 사용자와 서비스 프로젝트 생성
  • admin-openrc 작성과 토큰 검증
🧪
전제 환경
  • controller 192.168.56.101
  • MariaDB와 Memcached 설치 완료
  • OpenStack 2026.1 (Gazpacho)
  • 명령의 KEYSTONE_DBPASS, ADMIN_PASS, MYUSER_PASS는 실제 값으로 교체

1. Keystone 데이터베이스 생성

bash
sudo mysql
sql
CREATE DATABASE keystone;
CREATE USER 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost';
CREATE USER 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%';
FLUSH PRIVILEGES;
EXIT;
notion image
bash
mysql -u keystone -p -e "SHOW DATABASES;"
notion image

2. 패키지 설치와 설정

bash
sudo apt install -y keystone
/etc/keystone/keystone.conf의 해당 섹션을 수정한다.
plain text
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

[token]
provider = fernet
기본 SQLite connection이 남아 있으면 새 설정과 충돌할 수 있으므로 주석 처리하거나 제거한다.

3. DB 스키마와 키 초기화

bash
sudo su -s /bin/sh -c "keystone-manage db_sync" keystone
sudo keystone-manage fernet_setup \
  --keystone-user keystone --keystone-group keystone
sudo keystone-manage credential_setup \
  --keystone-user keystone --keystone-group keystone
bash
sudo mysql -e "USE keystone; SHOW TABLES;" | head
sudo ls -l /etc/keystone/fernet-keys/
notion image

4. 관리자와 엔드포인트 bootstrap

bash
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://192.168.56.101:5000/v3/ \
  --bootstrap-region-id RegionOne
이 명령은 admin 사용자와 프로젝트, admin 역할, identity 서비스, RegionOne, 엔드포인트 3종을 한 번에 만든다.
public URL에 IP를 사용하면 호스트 PC가 controller 이름을 해석하지 못해도 API에 접근할 수 있다.

5. Apache 설정과 API 확인

bash
echo "ServerName 192.168.56.101" | sudo tee -a /etc/apache2/apache2.conf
sudo apache2ctl configtest
sudo systemctl restart apache2
curl -i http://controller:5000/v3/
JSON 버전 정보가 반환되면 API가 정상이다.
⚠️
curl이 403 또는 500을 반환한다면 Apache 설정과 WSGI 스크립트를 먼저 확인한다. Keystone은 별도 systemd API 데몬이 아니라 Apache mod_wsgi 아래에서 동작한다.

6. 관리자 환경 변수

bash
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
bash
openstack token issue

7. 서비스 프로젝트와 일반 사용자 생성

default 도메인은 bootstrap에서 이미 생성된다. 새 도메인이 필요할 때만 다음 명령을 실행한다.
bash
openstack domain create --description "An Example Domain" example
notion image
bash
openstack project create --domain default \
  --description "Service Project" service
notion image
bash
openstack project create --domain default \
  --description "Demo Project" myproject

openstack user create --domain default --password-prompt myuser
openstack role create myrole
openstack role add --project myproject --user myuser myrole
role add는 성공해도 출력이 없을 수 있다.

8. openrc 파일 작성

~/admin-openrc를 만든다.
bash
cat > ~/admin-openrc <<'EOF'
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
EOF
bash
source ~/admin-openrc
openstack token issue
openstack service list
openstack endpoint list
openstack project list
openstack user list
notion image

오류를 확인하는 순서

증상
먼저 확인할 항목
API 연결 실패
systemctl status apache2, curl http://controller:5000/v3
401 인증 오류
비밀번호, Domain 대소문자, 남아 있는 OS_ 환경 변수
DB 테이블 없음
connection 문자열과 SQLite 기본값, DB 권한
Fernet 오류
/etc/keystone/fernet-keys/ 파일과 권한
토큰 만료 오류
chronyc tracking으로 시간 동기화 확인

핵심 정리

  1. Keystone은 모든 OpenStack API 요청의 인증 출발점이다.
  1. bootstrap은 첫 관리자와 identity 카탈로그를 한 번에 만든다.
  1. 이후 서비스 설치에서는 service 프로젝트에 서비스 사용자를 추가한다.

재발 방지 체크리스트

Keystone DB와 테이블이 생성됐다.
Fernet 키 파일이 존재한다.
포트 5000에서 API가 응답한다.
identity 엔드포인트 3종이 등록됐다.
admin과 일반 사용자 모두 토큰을 발급받는다.
admin-openrc가 정상 동작한다.

다음 단계

다음 글에서는 이미지 서비스 Glance를 설치하고 CirrOS 이미지를 등록한다.

참고 자료