공식문서 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-format | bare로 적으면 된다 |
--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
인수 | 설명 |
---|
--vcpus | vcpu 갯수 |
--ram | ram 용량 (MiB 단위) |
--disk | disk 용량 (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-dhcp | IP를 수동으로 설정했다. 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
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"
"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)s | admin 사용자나 현재 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-type | openstack 설치시 정의한 내부 네트워크 타입 |
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
vi httpd.file
┌──────────────────────────────┐
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
┌──────────────────────────────┐
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
$ lsblk
$ df -h
$ sudo mkfs -t [ext4 or xfs] /dev/vdb
$ sudo mount /dev/vdb /mnt