4주차 과제 - 이성현

이번에 맡은 CLI openstack service [CRUD] 파트를 진행

기본구조

openstack service {명령어} [옴션] {대상}

기존 CLI 사용법

조회 명령어

모든 서비스 목록 조회

openstack server list

특정 서비스 목록 조회

openstack service show {서비스 ID}

생성 명령어

서비스 생성

openstack service create --name {service 이름} --description "설명" {서비스 타입}
# 실제 사용 예시
openstack service create --name test-service --description "test" test-type

—name: 이름

—description: 설명

—type: 타입

핵심 서비스

  • identity - Keystone (인증 서비스)
  • compute - Nova (컴퓨팅 서비스)
  • network - Neutron (네트워킹 서비스)
  • image - Glance (이미지 서비스)
  • volume - Cinder (블록 스토리지)
  • object-store - Swift (오브젝트 스토리지)

추가 서비스

  • orchestration - Heat (오케스트레이션)
  • cloudformation - Heat CFN 서비스
  • dns - Designate (DNS 서비스)

사용자 정의

  • 임의의 문자열 가능 (ex_test)

수정 명령어

주로 set 명령어를 활용

서비스 정보 수정

openstack service set {service ID}

서비스 이름 수정

openstack sercvice set --name {new name} {service ID)

서비스 설명 수정

openstack service set --description "new discription" {service ID}

서비스 복합 수정(이름 + 설명)

openstack service set --name my-new-service --description "new description" {service ID}

삭제 명령어

delete 명령어 활용

서비스 삭제

openstack service delete {service ID or service name}
# 한번에 여러 서비스 삭제
openstack service delete {service ID 1} {service ID 2}

고급 활용 옵션

출력 형식 제어

# default 출력은 value
# -f 옵션 이용
openstack service list -f json|table|value|csv|yaml

필드 선택 옵션

# -c 옵션 이용
openstack service list -c {ID} -c {Name} -c [Type}

service 정렬

# 이름으로 정렬
openstack servcie list --sort-column Name

# 타입으로 정렬
openstack service list --sort-column Type

최대 출력 개수 제한

openstack service list --max-width 12

테스트 환경 구성

# 테스트 서비스 생성
openstack service create --name test-service --description "my test" test-type

# 서비 리스트에서 생성된 서비스 확인
openstack service list 

# 서비스 정보 수정
openstack service set --name new-test-service --description "my-new-test"

# 수정된 결과 확인
openstack service show new-test-service

# 테스트 서비스 삭제
openstack service delete new-test-service

Openstack Service Provider

service provider 명령어는 오픈스택의 Placement 서비스를 제어하는 명령어

Placement 서비스란?

오픈스택 환경 내의 모든 자원 제공자(Resource Provider)들의 인벤토리와 사용량을 추적하고 관리하는 중앙 집중형 API 서비스

주요기능

  • 자원 인벤토리 추적: 각 컴퓨트 노드가 보유한 vCPU, RAM, 등 현재 사용량을 실시간 파악
  • 자원 특성(Trait) 관리: “ssd 사용 가능”, “특정 CPU 아키텍처 지원”등 자원의 질적인 특성을 Trait으로 정의하고 관리
  • 자원 할당 요청 처리: 새로운 가상 머신 생성 요청에 대해, 해당 요청에 맞는 자원(vCPU 2개, RAM 4GB…)을 제공할 수 있는 최적의 후보 노드 목록을 Nova Scheduler에 제공

특징

  • Federation 인증: 여러 Openstack 클라우드 간 통합 인증 자원
  • SAML Assertion: 보안 토큰 기반 인증 방식 사용
  • Identity Provider(IdP) 연동 : 외부 인증 시스템과의 신뢰 관계 설정

서비스 활용법

  • 효율적인 자원 관리

    서비스 프로바이더가 수백, 수천 개의 물리적 서버, 자원 현황 파악

    특정 서비스에 부하가 몰리거나 자원이 낭비되는 것을 방지 → 인프라 전체 자원 활용률 극대화

  • 다양한 서비스 등급(Flavor) 제공

    다양한 고객의 요구 사항(SSD 요구, 많은 vCPU…)를 Placement의 Trait을 활용해서 요구사항 충족

    HW_CPU_X86_AVX512 트레이트를 가진 서버 그룹에는 고성능 컴퓨팅(HPC)용 상품 STORAGE_SSD_NVME 트레이트를 가진 서버 그룹에는 고속 I/O 상품을 구성할 수 있음

    → 고객이 특정 ‘Flavor’(예: High-CPU-SSD)를 선택하면, Placement는 해당 트레이트를 가진 자원 제공자 목록을 Nova 스케줄러에 전달

    → 서비스의 차별화, 수익 모델 다각화

  • 테넌트(고객)별 자원 격리 및 보장

    특정 고객, 프로젝트(테넌트) 전용으로 물리적 서버 그룹(Host Aggregate)할당하고

    Placement를 통해 그룹 내에서만 가상 머신이 생성되도록 제한 가능

  • 가용성 향상 및 안정적 서비스 운영

    장애 발생, 유지보수 중인 노드는 비활성화여 스케줄링 대상에서 제거

Federation

서로 다른 클라우드 환경들이 인증을 공유할 수 있게 해주는 기능

OpenStack의 Keystone 서비스에서 제공하는 연합 인증 시스템으로, 외부 Identity Provider가 발행한 신원 정보를 Service Provider가 소비하는 방식으로 작동

핵심 구성요소

  • Identity Provider (IdP): 사용자 신원 관리하고 인증 처리
  • Service Provider (SP): 인증 Assertion 받아서 리소스 접근 권한 부여
  • 매핑(Mapping): IdP의 사용자 정보를 로컬 Keystone 그룹으로 연결

작동 방식

  1. 사용자가 연합 인증 URL에 접근: /v3/OS-FEDERATION/identity_providers/{idp_id}/protocols/{protocol_id}/auth
  2. IdP로 리다이렉트: 사용자가 외부 인증 시스템에서 로그인함
  3. 토큰 발급: 성공적인 인증 후 OpenStack 토큰 받음
  4. 리소스 접근: 해당 토큰으로 다른 OpenStack 서비스 사용함

실습

현재 Servicer Provider 목록 확인

openstack service provider list

단일 클라우드 환경이므로 비어있음

테스트용 Service Provider 생성

openstack service provider create \
  --auth-url http://test.example.com:5000/v3 \
  --service-provider-url http://test.example.com/sam1 \
  --description "Test Federation Service Provider" \
  test-provider

Identity Provider 설정

openstack identity provider create \
  --description "External SAML Identity Provider" \
  external-idp

매핑 규칙 파일 생성

cat > mapping-rules.json << EOF
[
  {
    "local": [
      {
        "user": {
          "name": "{0}"
        },
        "group": {
          "domain": {
            "name": "Default"
          },
          "name": "federated_users"
        }
      }
    ],
    "remote": [
      {
        "type": "REMOTE_USER"
      }
    ]
  }
]
EOF

매핑 생성

openstack mapping create --rules mapping-rules.json saml-mapping

Federation Protocol 구성해서 IdP와 SP 연결

openstack federation protocol create \
  --identity-provider external-idp \
  --mapping saml-mapping \
  saml2

추후 실제 인증이 작동하도록 설정 필요

  • 매핑 규칙 확인
  • 연합 사용자 그룹 생성
  • 그룹에 권한 부여

실무 활용 시나리오

다른 OpenStack과 연동

현재 설정으로 다른 OpenStack 클라우드의 사용자가 이 클라우드에 접근 가능함:

  • 외부 클라우드에서 토큰 받음
  • SAML assertion 생성
  • 이 클라우드에서 자동으로 사용자 매핑
  • federated_users 그룹 권한으로 리소스 접근