Devstack 간단한 운용
Devstack 간단한 운용
※ 설치 부분은 이곳 에서 참조하길 바람
※ 본 포스팅은 2025년 1월 13일 기준으로 작성되었음
목표
- devstack에서 ubuntu 24.04를 대상으로 한 인스턴스를 생성한다.
- 외부 환경에서 생성된 이미지에 엑세스한다.
Horizon 접속
Devstack 설치시 접속했던 IP로 접속한다. 이후 devstack 설치시 지정했던 관리자 ID로 Login하여 Dashboard에 접속한다.
기본적으로 프로젝트 단위로 인스턴스가 운용된다. 따라서 작업할 프로젝트를 지정해주어야한다. 왼쪽 위에 보면 openstack 라벨 오른쪽에 프로젝트 선택할 수 있는 항목이 있는데 여기서 demo 프로젝트로 들어간다.
이미지 추가하기
ubuntu 24.04 버전 이미지를 추가해보도록 하겠다.
먼저 ubuntu에서는 cloud에서 사용하는 img를 별도로 제공하고 있다. https://cloud-images.ubuntu.com/ 에 들어가면 버전별로 명시가 되어있다.
이후 openstack Dashboard의 왼쪽 모록에 compute 항목에 이미지가 있다.
해당 항목을 선택하면 기본적으로 cirros-0.6.3-x86_64-disk 이미지 하나만 떠있다.
목록의 오른쪽 위에 이미지 생성을 누르면 아래와 같은 화면이 나온다.
- 이미지이름 : 편한대로 지정하면 된다.
- 이미지 소스 : 아까 ubuntu 홈페이지에서 받아온 img를 등록한다.
- 포맷 : “QCOW2 - QEMU 에뮬레이터 (Emulator)” 로 지정해준다
이후 오른쪽 아래에 이미지 생성 버튼을 눌러주면 이미지 생성이 완료된다.
보안 그룹 수정
별도로 새로 만들어도 되고 아니면 그냥 있는 default를 바꾸어도 된다. 어차피 테스트 용도이니 default에서 필요한 두 가지만 추가하도록 하겠다.
먼저 왼쪽 네트워크의 보안 그룹 메뉴에 들어간다 그리고 default 항목에 있는 규칙 관리 버튼을 클릭한다.
이후 ssh 통신에 관한 포트와 PING 체크를 위한 ICMP를 열어준다.
Keypair 생성
서버를 만들었을 때 대부분의 Cloud 서비스와 그러하듯 해당 서버로 접속하기 위해서는 Keypare가 필요하다. 왼쪽 메뉴의 Compute 항목에 들어가서 키페어 메뉴를 선정하면 키페어를 생성할 수 있다. 이 메뉴에서 원하는 키 이름으로 원하는 타입으로 생성해줄 수 있다. 여기서는 키 이름을 test_key, 키 유형을 SSH 키로 지정하여 생성하여 다운로드 한다.
추가한 이미지로 서버 생성하기
왼쪽 메뉴의 Compute의 인스턴스로 들어간다. 이후 오른쪽 위에 있는 인스턴스 시작 버튼을 누른다.
위와 같이 원하는대로 인스턴스 이름을 지정하고 가용구역과 개수는 그대로 두고 Next를 누른다.
어떤 이미지로 인스턴스를 생성할 것인가에 대한 부분이다. 부팅 소스는 이미지로 그대로 두고 볼륨은 넉넉하게 30GB로 지정한다. 사용 이미지는 아까 받아서 이미지로 만들어둔 ubuntu 24.04의 오른쪽에 있는 위 화살표 버튼을 눌러서 지정한다. 여기서는 테스트기 때문에 인스턴스 삭제시 볼륨 삭제도 예로 설정해둔다.
해당 서버를 구동할 적절한 인스턴스 사이즈를 지정한다. 적절하게 m1.medium으로 지정해두었다. Next를 누른다.
어느 네트워크에 서버를 둘 것인가에 대한 부분으로 어차피 route를 통해 엑세스할 수 있게 할 예정이다. 위와 같이 private에 둔다.
아까 만들어둔 keypare 역시 지정해준다.
제대로 생성되었는지 확인
인스턴스 리스트에서 인스턴스 이름을 클릭하면 아래와 같은 화면이 뜬다.
여기서 콘솔을 누르면 브라우저 내에서 콘솔에 엑세스 할 수 있다. 당장은 로그인하지 말고 그냥 콘솔이 뜨는지만 확인하면 된다.
유동 IP 할당하기
이대로는 접속할 수가 없다. 따라서 외부에서 접속할 수 있게 IP를 할당해주어야한다. 여기서 필요한게 유동 IP 할당하는 것이다.
해당 버튼을 누르면 아래의 창이 뜬다
- 버튼을 눌러주면 아래의 창이 드는데 그냥 IP 할당 버튼을 눌러주면 자동을 할당된다.
이후 연결 버튼을 누르면 된다.
Devstack 구동 중인 서버에서 확인하기
구동 중인 서버에서 terminal을 띄운 후 아래의 명령어를 입력한다.
1
ssh -i test_key.pem ubuntu@{유동 IP}
여기서 test_key.pem은 아까 생성한 test_key.pem 키를 사용하면 된다.
외부 접속 설정
그냥 서버 컴퓨터에서 접속이라면 아래와 같은 상황이다.
하지만 외부 접속은 아래와 같다.
사실 아키텍쳐상으로는 완전히 맞는 구성은 아니다.
하지만 개념적으로 이해하기에는 충분하다고 보고 설명에 들어가겠다.
위 그림과 같이 ubuntu에서 해당 요청을 해당 port로 받았을 때 ip와 port를 매핑해주는게 필요하다. 이를 Forwarding 해주는게 필요하다.
아래와 같은 명령어로 rinetd를 설치해준다.
1
apt-get install rinetd
/etc/rinetd.conf에 위치한 rinetd 설정을 바꿔준다.
1
2
3
4
... ...
# bindadress bindport connectaddress connectport options...
0.0.0.0 8080 {지정된 유동 IP} 22
... ...
이후 rinetd를 다시 실행한다.
1
/etc/init.d/rinetd restart
이후 외부 컴퓨터에서 mapping한 정보로 접속하면 아래와 같이 접속 된다.
※ 트러블 슈팅
Q. 생성된 Instance에서 IP ping은 나가는데 DNS로 요청하면 아래와 같이 에러가 난다.
1
ping: google.com: Temporary failure in name resolution
위의 문구는 google.com으로 설정했을 때이다.
nameserver 설정이 이상해서 그런 것이로 만약에 devstack을 설치할때 DNS 서비스인 Designate 를 깔았다면 Designate 도메인 지정을 넣으면 되고, 만약 DNS를 설정하지 않았다면 직접 nameserver를 바꾸어주어야한다.
/etc/resolv.conf 파일을 확인하면 아마 아래와 같이 설정되어있을 가능성이 있다.
1
2
3
nameserver 127.0.0.1
options edns0 trust-ad
search .
루프백일수도 있고 별도의 ip일수도 있다. 이런 경우 그냥 nameserver를 흔히 아는 dns 주소로 변경해주면 된다.
나는 아래와 같이 설정했다
1
2
3
nameserver 8.8.8.8
options edns0 trust-ad
search .
구글 dns 서버로 위와 같이 설정하면 잘 작동한다.