[클라우드 아키텍트] OpenStack CLI활용 2

HyeonSeok·2023년 4월 9일
0

OpenStack

목록 보기
11/12

공식문서 documents

0. openstack CLI 인증절차 및 콘솔 진입

source keystonerc_admin

1. Project 생성 - admin

openstack project create --domain Default --description "cli-project" cli-project
openstack project list

프로젝트 생성시 도메인 필요, 실습에서는 Default라고 도메인 설정

인수설명
--domain도메인 설정
--description프로젝트 설명
openstack project create --domain 도메인 --description "프로젝트설명" 프로젝트이름

도메인, 프로젝트 등 옵션들 순서는 상관없음. 맨 마지막에 이름만 적어주면 됨

2. 사용자(User-Tenant-가입자) 생성 - admin

openstack user create --domain Default --project cli-project --password-prompt cli-user
openstack user list
openstack role add --project cli-project --user cli-user _member_

프로젝트 생성시 도메인 필요, 실습에서는 Default라고 도메인 설정

인수설명
--domain도메인 설정
--project프로젝트 선택
--password-prompt유저 패스워드를 프롬프트 창에 입력하도록 하는 옵션
openstack user create --domain 도메인 --project {프로젝트 이름 or id} --password-prompt 유저이름	
openstack role add --project 프로젝트이름 --user 유저이름 부여역할

_member_ : 미리 정의된 role

3. 이미지 생성 - admin, user

openstack image create --file CentOS-7-x86_64-GenericCloud.qcow2 \
--disk-format qcow2 --container-format bare --public centos7

openstack image list
인수설명
--file이미지 파일 위치
--disk-format이미지 파일의 데이터 포맷, 확장자랑 데이터 포맷은 다르기에 확인할 것.
--container-formatbare로 적으면 된다
--public이미지 파일의 공개 여부 속성 (다른 곳에서 사용 가능하게 설정)
\ 복붙할 때 명령이 너무 긴 경우 사용

container-format 여기 보면 아직은 bare말고 다른 인수가 정의되어있지 않은 것 같다.
공식문서도 아직은 이에 대해서 쓴 내용이 없는 것 같다.
가상머신도 일종의 bare메탈로 생각해서 bare라 할당한다고 생각하면 될 것 같다.
qemu-img info 이미지경로 : file format 확인
virtual size : root볼륨과 관련

openstack image create --file 이미지파일위치 --disk-format 이미지포맷 --container-format bare --public 이미지 이름

4. Flavor 생성 - admin, user

openstack flavor create --vcpus 1 --ram 1024 --disk 10 --id 6 m1.micro 
openstack flavor list
인수설명
--vcpusvcpu 갯수
--ramram 용량 (MiB 단위)
--diskdisk 용량 (GiB 단위)
--id사용자 정의 id 값, 없으면 uuid로 자동생성
openstack flavor create --vcpus 숫자 --ram 숫자 --disk 숫자 --id 임의값 이름 

5. External Network - admin

openstack network create --project cli-project --provider-network-type flat \
--provider-physical-network extnet --external external-network
인수설명
--project프로젝트 이름
--provider-network-type외부 네트워크 타입, openstack을 설치할 때 설정했던 타입
--provider-physical-network물리적 네트워크, 오픈스택 설치할 때 오픈스택에서 사용하는 가상 물리 네트워크를 설정했었다. extnet
--external생성할 네트워크 이름
openstack network create --project 프로젝트이름 --provider-network-type 네트워크타입 \ 
--provider-physical-network 외부네트워크이름 --external 생성할네트워크이름
openstack subnet create --network external-network \
--project cli-project --subnet-range 192.168.0.0/21 \
--allocation-pool start=192.168.7.101,end=192.168.7.150 \
--gateway 192.168.0.1 --no-dhcp external-subnet

openstack network list
openstack subnet list
인수설명
--network외부 네트워크 이름
--project프로젝트 이름
--subnet-range서브넷 네트워크, 연결되는 외부 네트워크에서
--allocation-pool할당할 IP 대역 범위 설정
--gateway외부 네트워크 게이트웨이 IP
--no-dhcpIP를 수동으로 설정했다. dhcp를 사용하지 않겠다는 인자
external-subnet서브넷 이름
openstack subnet create --network 외부네트워크이름 \
	--project 프로젝트이름 --subnet-range 네트워크IP/서브넷마스크 \
	--allocation-pool start=시작IP,end=마지막IP \
	--gateway 게이트웨이IP --no-dhcp 서브넷이름
openstack subnet show 서브넷ID or 서브넷이름

6. Token - admin / cli-user로 접속하기 위한 인증 토큰 생성 과정

vi keystonerc_cli-user
unset OS_SERVICE_TOKEN
    export OS_USERNAME=cli-user
    export OS_PASSWORD='Open1234!'
    export OS_REGION_NAME=RegionOne
    export OS_AUTH_URL=http://192.168.1.83:5000/v3
    export PS1='[\u@\h \W(keystone_cli-user)]\$ '	# 프롬프트를 이걸로 바꾸라는 의미

export OS_PROJECT_NAME=cli-project
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3			# AUTH_URL에서 v3가 여기 버전의미
source keystonerc_cli-user

7. Internal Network - user

vi /etc/neutron/policy.yaml

"create_network:provider:network_type": "role:admin or project_id:%(project_id)s"
"create_floatingip:floating_ip_address": "role:admin or project_id:%(project_id)s"

# allow admins and members of the _member_ role to see provider network attributes
"get_network:provider:network_type": "rule:admin or project_id:%(project_id)s"
"get_network:provider:physical_network": "rule:admin or project_id:%(project_id)s"
인수설명
create_network:provider:network_type네트워크 생성시 프로바이더 네트워크 타입 인수를 사용하기 위한 권한
create_floatingip:floating_ip_address차후 플로팅 IP주소 생성을 위한 권한
role:admin or project_id:%(project_id)sadmin 사용자나 현재 project ID가 사용자의 project ID같은 사람에게 권한 부여한다는 의미

권한명 : 권한 부여 규칙
아래에서 유저가 명령어로 작업진행할 때 각 권한들에 대해 권한이 없어서 실행이 안된다.
때문에 해당 권한들에 맞춰서 어떤식으로 권한을 할지 규칙을 설정하여 권한을 부여해 주어야한다.

projectID=$(openstack project list | grep cli-project | awk '{print $2}')
인수설명
projectID변수 이름
변수명=$(명령어)변수명에 해당 명령어로 나온 값을 저장
awk '{print $2}''출력된 화면에서 " "을 기준으로 문자열을 나누고 2번째 값을 출력해라' 라는 뜻
openstack network create --project $projectID --provider-network-type vxlan internal-network
인수설명
$projectID위에서 선언한 변수 호출
--provider-network-typeopenstack 설치시 정의한 내부 네트워크 타입
openstack network create --project 프로젝트이름 --provider-network-type 네트워크타입 내부네트워크이름
openstack subnet create --network internal-network --subnet-range 10.28.1.0/24 --gateway 10.28.1.1 \
--dhcp --dns-nameserver 8.8.8.8 internal-subnet

openstack subnet list

8. 라우터(Router) - user

openstack router create router
openstack router set --external-gateway external-network router

# 외부 네트워크에 연결하는 명령어. 
openstack router set --external-gateway 외부네트워크이름 라우터이름

openstack router add subnet router internal-subnet
┌────────────────────────────────────────────────────────────────────────────────────────┐
내부 네트워크의 서브넷을 라우터에 추가하는 명령어. (내부 네트워크를 라우터에 연결하는 것)
openstack router add subnet {라우터이름} {내부네트워크의 서브넷이름}
└────────────────────────────────────────────────────────────────────────────────────────┘

9. 보안그룹(Security Group)

openstack security group create open-sg-web
openstack security group rule create --protocol icmp --ingress open-sg-web
openstack security group rule create --protocol tcp --dst-port 22:22 open-sg-web
openstack security group rule create --protocol tcp --dst-port 80 open-sg-web

openstack security group create open-sg-db
openstack security group rule create --protocol icmp --ingress open-sg-db
openstack security group rule create --protocol tcp --dst-port 22:22 open-sg-db
openstack security group rule create --protocol tcp --dst-port 3306 open-sg-db
┌────────────────────────────────────────────────────────────────────────────────────────┐
보안그룹 생성 및 규칙 추가
--protocol	: 프로토콜 속성
--ingress	: 인바운드 규칙, default규칙 
--egress	: 아웃바운드 규칙
--dst-port	: 목적지 포트
22:22 or 80:80	: 포트 범위를 뜻함. 22:22는 22포트부터 22포트까지, 즉 22포트 하나를 의미
└────────────────────────────────────────────────────────────────────────────────────────┘

10. 키페어(KeyPair)

ssh-keygen -t rsa 	// 기존 키파일이 없으면 키를 만들어야함. 
openstack keypair create --public-key ~/.ssh/id_rsa.pub open-key
┌────────────────────────────────────────────────────────────────────────────────────────┐
만들어진 ssh키를 openstack의 키페어 형태로 만들어 준다.
└────────────────────────────────────────────────────────────────────────────────────────┘

11. Floating IP

openstack floating ip create external-network
┌────────────────────────────────────────────────────────────────────────────────────────┐
사용가능한 IP범위에서 랜덤한 ip가 생성됨
└────────────────────────────────────────────────────────────────────────────────────────┘
openstack floating ip create --floating-ip-address 192.168.7.149 external-network
┌────────────────────────────────────────────────────────────────────────────────────────┐
사용가능한 IP범위에서 특정 ip가 생성됨, 이미 생성된 ip나 사용중인 ip는 생성 못함.
└────────────────────────────────────────────────────────────────────────────────────────┘
openstack floating ip list
openstack router show router
┌────────────────────────────────────────────────────────────────────────────────────────┐
사용중인 ip 확인
└────────────────────────────────────────────────────────────────────────────────────────┘

12. 인스턴스 생성 - user

openstack server create --flavor m1.micro --image centos7 --security-group open-sg-web \
--network internal-network --boot-from-volume 10 --key-name open-key webserver
[추가인수] --user-data httpd.file # httpd.file이 아니라 파일이름은 정의하기 나름
vi httpd.file
┌──────────────────────────────┐	
#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
└──────────────────────────────┘
openstack server create --flavor m1.micro --image ubuntu18 --security-group open-sg-db \
--network internal-network --boot-from-volume 10 --key-name open-key --user-data mysqld.file dbserver
[추가인수] --user-data mysqld.file 
vi mysqld.file
┌──────────────────────────────┐	
#!/bin/bash
apt update
apt install -y mariadb-server
└──────────────────────────────┘

--user-data httpd.file를 추가하면 인스턴스 생성하면서 httpd.file에 적힌 스크립트를 인스턴스에 적용한다.
┌────────────────────────────────────────────────────────────────────────────────────────┐
서버 생성
--flavor 		: flavor 선택
--image 		: 이미지 선택
--security-group 	: 인스턴스 보안그룹 설정
--network 		: 인스턴스 네트워크 설정
--boot-from-volume 	: GiB단위 볼륨 설정
--key-name 		: 키페어 선택
│────────────────────────────────────────────────────────────────────────────────────────│
openstack server create --flavor Flavor이름 --image 이미지이름 --security-group 보안그룹 \
--network 네트워크 --boot-from-volume 숫자 --key-name 키페어이름 서버이름
└────────────────────────────────────────────────────────────────────────────────────────┘
openstack server list
openstack floating ip list
openstack server add floating ip webserver 192.168.7.118
ssh -i .ssh/id_rsa centos@192.168.7.118

13. 볼륨(Volume, GiB단위) - user

openstack volume create --size 1 webserver-add
openstack volume list
openstack server list
openstack server add volume webserver webserver-add

# CentOS7에서 볼륨 붙이기
$ lsblk
$ df -h
$ sudo mkfs -t [ext4 or xfs] /dev/vdb
$ sudo mount /dev/vdb /mnt
profile
즐겁게 사는 개발자가 됩시다

0개의 댓글