오픈스택 통신이 안될 때


1. 오픈스택을 설치한 OS(보통 우분투)에서 br-ex 장치가 활성화되어있어야하고 다음 명령어로 인터페이스를 확인할 수 있다

sudo ifconfig : 인터페이스 확인


br-ex 장치가 있어야한다 없는 경우 다음 명령어로 직접 활성화해준다

sudo ifconfig br-ex up


2. br-ex 장치 IP가 설정되어 있는지 확인하고 IP가 설정되어 있지 않으면 다음 명령어로 설정해준다

sudo ifconfig br-ex [Floating IP] netmask [Floating IP의 Subnet Mask]


3. 오픈스택을 설치한 OS의 라우팅 테이블 목록에 있어야한다 다음 명령어로 라우팅 테이블을 확인할 수 있다

route -n : 라우팅 테이블 확인


라우팅 테이블에 아래의 내용이 없다면 수동으로 추가해준다

[Floating IP]        0.0.0.0        [Floating IP의 Subnet Mask]        U        0        0        0 br-ex


sudo route add -net [Floating IP의 Network Mask] netmask [Floating IP의 Subnet Mask] dev br-ex : 라우팅 테이블 목록 추가

오픈스택 명령어로 보안 그룹 설정(ICMP 허용)


지난 글에서 외부 통신을 위해 인스턴스와 Floating IP를 연결해줬는데 보안 그룹 default의 기본 설정값은 모든 통신이 허용되지 않는다

즉 연결만 되어있고 아무 통신도 되지 않는다는 의미이다

그래서 명령어로 ICMP 통신을 허용하는 설정을 해보자




1. 먼저 Floating IP로 ping 통신을 시도한 결과 제대로 통신되지 않는 것을 확인할 수 있다




2. admin-openrc.sh 스크립트 파일 내용 안에 프로젝트 ID를 확인하고 확인한 프로젝트 ID와 일치하는 보안 그룹의 ID를 확인한다




3. 다음 명령어로 ICMP 허용 룰을 추가해준다

openstack security group rule create --proto [프로토콜] [보안 그룹 ID] : 해당 보안 그룹에 해당 프토토콜 허용 추가

[프로토콜] : 허용할 프로토콜 이름



4. 다시 Floating IP로 핑 통신을 시도해본 결과, 정상적으로 잘 통신이 되는 것을 확인할 수 있다



명령어로 Floating IP 생성 및 인스턴스와 연결




1. 대시보드에 접속해서 Floating IP를 확인해보니 Floating IP가 존재하지 않는다



2. 다음 명령어를 통해 네트워크 중 public의 ID를 확인한다

openstack network list : 네트워크 목록



3. 다음 명령어로 Floating IP 목록을 확인한다

openstack floating ip list : Floating IP 목록

대시보드에서 확인한 것과 같이 아무 것도 없다


다음 명령어로 Floating IP를 생성한다

openstack floating op create [네트워크 ID] : Floating IP 생성





4. 다시 Floating IP를 확인해보니 제대로 생성된 것을 확인할 수 있다

생성한 Floating IP의 ID를 확인한다





5. 다음 명령어로 인스턴스와 Floating IP를 연결해준다

openstack server add floating ip [인스턴스 이름] [Floating IP의 ID]




6. 대시보드로 접속하여 확인하면 Floating IP가 생성된 것을 확인할 수 있다


대시보드가 아닌 명령어를 이용한 인스턴스 생성 및 삭제


서비스들을 관리할 때 대시보드를 사용하는 것이 더 편리하지만

자동화 시키거나 자동화 프로그램을 만들어서 관리할 때에는 명령어로 관리하는 것이 더 쉽다


오픈스택의 명령어는 다음 사이트에서 확인할 수 있다

https://docs.openstack.org/python-openstackclient/pike/cli/command-list.html


기본 설정값으로 명령어로 접근하기 위해서는 다음과 같은 명령어와 옵션을 매번 입력해야 한다

openstack service list [--os-auth-url [url]  --os-username [사용자]]


매 명령어 입력마다 긴 옵션을 적기 귀찮기 때문에(귀찮으면 개발합시다) 스크립트를 적용하여 더 편한 환경으로 설정하고 실습을 진행해보자






1. 먼저 대시보드에 admin 계정으로 접속하여 좌측 상단 계정명을 눌러서 OpenStack RC File v3을 다운받아서

오픈스택이 설치된 우분투 가상머신 안으로 파일을 옮겨준다

(본인은 Berryz WebShare라는 웹 파일서버를 이용해서 옮겼다)




2. 다음 명령어로 옮긴 스크립트 파일을 적용시켜준다

source [스크립트 파일명] : 스크립트 파일 적용




3. 다음 명령어로 설치된 서비스를 확인할 수 있고 긴 옵션이 필요없다는 것도 확인 가능하다

openstack service list : 설치된 서비스 목록




4. 대시보드를 이용하여 인스턴스를 생성할 때 설정해줬던 몇 가지가 있는데 그 중 필수로 설정해줘야 하는 4가지 항목이 있다

다음 4가지 항목만 일일이 설정하고 나머지는 기본 설정값으로 생성해보자(설정하려면 명령어가 길어지기 때문에)

image(이미지)

Flavor(사양)

security group(보안그룹)

network(네트워크)


위의 4가지 항목을 필수로 설정해줘야 인스턴스를 생성할 수 있는데 설정할 값(ID)들을 하나하나 직접 확인해서 명령어 입력 시 입력해야한다





5. 다음 명령어로 사용 가능한 image의 ID를 확인한다

openstack image list : 이미지 목록




6. 다음 명령어로 flavor의 ID를 확인한다

(여러 가지 사양들 중 원하는 사양 선택)

openstack flavor list : flavor 목록




7. 다음 명령어로 admin-openrc.sh 스크립트 파일에서 프로젝트 ID를 확인한다

cat admin-openrc.sh | grep OS_PROJECT_ID


(본인의 프로젝트 ID는 65e5bbf5aed34fd5993e83829eeb063d)


다음 명령어로 보안 그룹 목록을 확인하고 확인해둔 프로젝트 ID와 동일한 보안 그룹을 확인하고

프로젝트 ID와 동일한 보안 그룹이 여러 개 존재한다면 사용자가 원하는 보안 그룹 ID를 확인한다

openstack security group list : 보안 그룹 목록


(본인은 프로젝트 ID가 일치하는 보안 그룹이 단 하나다)




8. 다음 명령어로 필수 항목만 설정하고 인스턴스를 생성한다

openstack server create --flavor [id]  --image [id]  --security-group [id]  --network [id] [생성할 인스턴스 이름]




9. 인스턴스가 생성되었다




10. 다음 명령어로 생성된 인스턴스를 확인할 수 있다

openstack server list : 인스턴스 목록


demo123 인스턴스는 ACTIVE 상태로 제대로 생성되었지만 demo11과 demo22는 ERROR 상태로 생성되었다

원인은 인스턴스 생성 명령어 오타일 확률이 높다

특히 보안 그룹 ID에 오타가 있으면 인스턴스는 생성되지만 ERROR 상태가 된다

다른 곳에서 오타가 있으면 인스턴스가 생성조차 되지 않기 때문에 인스턴스가 ERROR 상태로 생성되었다면 보안 그룹을 살펴보자




11. 대시보드에 접속해보면 인스턴스가 생성된 것을 확인할 수 있다




12. 인스턴스 목록을 확인하고 다음 명령어로 해당 인스턴스를 삭제할 수 있다

openstack server delete [인스턴스 이름]


객체 스토리지 생성 및 파일 업로드




1. 사용자 Windows 7로 대시보드에 접속한다




2. 객체 스토리지 이외에는 설치한 서비스가 없기 때문에 접근이 되지 않는다




3. 우측 오브젝트 스토리지 탭 - 컨테이너 -> 컨테이너를 눌러 새로운 컨테이너를 만들어준다

(컨테이너는 일종의 독립된 프로세스로 컨테이너 덕분에 객체 스토리지가 독립적으로 동작이 가능하다)




4. 컨테이너 이름을 지정하고 컨테이너 접근은 공용으로 설정해준다




5. 새로운 컨테이너를 확인할 수 있다

생성한 컨테이너 이름은 누른다




6. 우측 파일 업로드 버튼을 누른다




7. 업로드할 파일을 지정하고 업로드한다




8. 해당 파일이 업로드된 것을 확인할 수 있다



9. 다른 PC에서 해당 가상머신의 대시보드로 접속하여 로그인한다




10. 우측 오프젝트 컨테이너 탭 - 컨테이너를 보면 생성해둔 컨테이너 이름을 누른다




11. 업로드해놓은 파일을 확인할 수 있으며 우측에서 다운로드, 수정, 복사, 삭제 등이 가능하다



객체 스토리지를 위한 오픈스택 설치


    오픈스택이 완벽한 프로그램이 아니라서 여러 부분에서 에러가 발생하고 동작하지 않는데 객체 스토리지를 사용할 때 제대로 동작하지 않는 부분이 있다


devstack으로 오픈스택을 설치 시 local.conf 파일을 수정하지 않은 기본 설정값에는 객체 스토리지(Swift)가 포함되어 있지 않다

그래서 객체 스토리지를 설치하는 방법으로는 다음 2가지 방법이 있다

1. 이미 설치된 오픈스택에서 객체 스토리지만 추가 설치

2. local.conf 파일을 수정하여 객체 스토리지를 추가해서 오픈스택 설치


하지만 위 2가지 방법 모두 어느 한 부분이 제대로 설치되지 않는 에러가 발생한다


그래서 본인이 진행할 마지막 방법은 local.conf 파일을 수정해서 모든 서비스를 비활성화하고 객체 스토리지만 추가해서 오픈스택을 설치하는 방법


준비 환경 : VMware, UbuntuOS.iso, GNS3으로 구축한 네트워크 환경



GNS3으로 다음과 같은 네트워크를 준비해주자 









1. 새로운 가상머신을 만들어서 우분투를 설치하고 devstack을 다운받는다

가상머신 사양

CPU 1개

Memory 2GB

Disk 20GB

(이전 게시글에 정리한 오픈스택 설치하는 것과 동일하다)

https://bettersoonergooner.tistory.com/28?category=684135




2. stackrc 파일을 살펴보자

56 - 60 : 설치할 서비스들의 목록으로 local.conf 파일에서 설정 가능하고 예를 들어서 Swift를 활성화시켜주기 위해 다음 61 - 62을 수행하시오

65 - 80 : 기본 설정값으로 설치되는 서비스들의 목록이다




3. stackrc 파일을 따라서 local.conf 파일을 수정한다

단지 다른 모든 서비스는 비활성화 시킨다




4. stack.sh로 오픈스택을 설치하고 객체 스토리지의 가상머신 IP주소로 접속하면 대시보드로 접속이 가능한 것을 확인할 수 있다



오픈스택 블록 스토리지(Cinder) 생성


오픈스택 사용자가 블록 스토리지인 Cinder를 생성해서 연결해보자




1. 사용자 Windows 7 대시보드 - 우측 볼륨 탭 - 볼륨 -> 볼륨 생성을 누른다




2. 다음과 같이 설정해준다

볼륨이름 : lvmdriver-2

볼륨소스 : 빈 볼륨

유형 : lvmdriver-1

크기 : 2

가용구역 : nova

그룹 : 그룹없음




3. 생성된 볼륨을 인스턴스와 연결시켜준다

우측 Compute 탭 - 인스턴스 -> 해당 인스턴스 - 볼륨 연결을 누른다




4. 볼륨 ID를 설정해준다




5. PuTTY로 SSH 접속하여 관리자 계정으로 로그인한다

(PuTTY에 관한 것은 Floating IP 설정할 때 이미 정리한 내용이다)




6. 다음 명령어를 통해 /dev/vdb 장치가 있다는 것을 확인해준다

fdisk -l : 장치 목록 출력




7. 해당 장치 관리 메뉴에 진입해서 포맷을 시켜준다

(장치 관리 메뉴는 대화 방식이다)

fdisk [장치명] : 해당 장치 관리 메뉴


장치 관리 메뉴

Command (m for help) : m    명령어 옵션을 확인

Command (m for help) : n    새로운 파티션을 생성

나머지는 기본 설정값으로 진행

Command (m for help) : w    설정 내용을 저장하고 관리 메뉴를 종료




8. 다시 장치 목록을 확인해보면 장치가 제대로 할당되었다는 것을 확인할 수 있다

fdisk -l




9. 다음 명령어로 새로 만든 장치에 파일 시스템을 만들어준다

mkfs [장치명] : 해당 장치 파일 시스템 생성




10. 해당 장치와 마운트 시킬 디렉토리를 준비하고 다음 명령어로 마운트 시켜준다

mount [디렉토리 경로] : 해당 디렉토리와 장치 마운트




11. 다음 명령어로 만든 장치의 상태를 확인할 수 있다

df -h : 디스크 공간 및 상태 출력




+ Recent posts