본문 바로가기

메가존 클라우드 2기 교육/실무 심화

오픈 스택 - VMware에 오픈스택 설치 및 네트워크 및 보안 구성

VMware

 가상머신 생성

서버, 데이터센터, 개인용 PC, 라우터, 스위치, 기타 장비가 해당됨. 그리고, 데이터 센터를 관리하는 시설 또한 인프라로 취급할 수 있다.

 

Customize Hardware 클릭

구축 환경

Openstack (Oracle Virtualbox) - provisioning(시스템 자원 설정)

CPU : 6C(8C-2C(host)) - 중첩된 가상화 (nested virtualization)

RAM : 10GB (16GB-6GB(host))

SSD : 128GB (동적할당)

NET : Bridge (Public), vSwitch(private; 10.11.1.0/24) 10.11.1.0 ~ 10.11.1.255

IMG : CentOS-Stream-8.iso

CD/DVD
Newtowrk Adpater - Bridged 선택
USB Controller, Sound Card, Printer는 Remove
이렇게 돼야한다. 이제 Close를 누르고 Finish(필자는 세팅을 나중에 변경한거라 우측 하단의 버튼 조금 다르다)

CentOS8 설치

실행 후, 설치
그대로 다음
Netwrok & Host Name 클릭
ON하고 Done
Installationg Destination 클릭
Storage Configuration - Custom 후 Done
Click here to create them automatically 클릭
/home 삭제
swap의 용량 10기가로 변경
루트는 최대용량으로
Done 클릭
Accept Changes 클릭
Root Password 클릭
패스워드 입력 후 Done
Time & Date 클릭
한국, 서울로 설정 후 Done
Software Selection
Minimal Install 체크 후 Done
Begin Installation 클릭하여 설치
Reboot 해주자.

 여담으로, 'Edit - Virtual Network Editor - Change Settings - VMnet Information - Birdged - (실제 랜카드, 예시로 realtek) 로 되어야 한다.

다시 돌아와서, VM을 보면

로그인하고 아이피를 확인한다.

이제 MobaXterm으로 돌아와서 

세션을 눌러 접속해주자.
아이피 확인과 인터페이스명(ens160)도 확인하자.
# SELINUX 비활성화
vi /etc/selinux/config
// 다음 부분 수정
SELINUX=disabled
//

내보내기로 백업

오픈스택 VM 클릭 상태에서 File- Export to OVF 클릭
ova 로 확장자명을 바꿔서 백업하자.
백업 성공

 


 

오픈스택 - 네트워크 설정

오픈스택 싱글 노드 설치

# 인터페이스 설정
vi /etc/sysconfig/network-scripts/ifcfg-ens160
// (ggdG)로 다 지우고 다음 붙여넣기
TYPE=Ethernet
BOOTPROTO=none
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=[본인 아이피]
NETMASK=255.255.248.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=8.8.4.4
//

# 네트워크 재시작
systemctl restart network

# 네트워크 스크립트 설치
dnf install network-scripts -y

# 방화벽 비활성화 (자체적으로 있어서 충돌나기 때문)
systemctl disable firewalld

# 네트워크 매니저 비활성화
systemctl disable NetworkManager

# 네트워크 다 시작
systemctl enable --now network

# 오픈스택에서 많이 쓰이는 도구인 Powertools 활성화
dnf config-manager --enable powertools

# 오픈스택-요가를 설치하기위한 설정들을 내려받음
dnf install -y centos-release-openstack-yoga

# 업데이트
dnf update -y

# 오픈스택 싱글 노드 설치를 보다 쉽게 해주기 위한 'openstack-packstack' 설치
dnf install -y openstack-packstack

# packstack의 answer-file 생성
packstack --gen-answer-file /root/answers.txt

# answer 파일의 내용 수정
vi /root/answers.txt
// 각각의 내용들을 찾아서 입력하기  ( '/[검색어]' 를 입력하면 쉽게 찾을 수 있다)
CONFIG_DEFAULT_PASSWORD=[비밀번호]
CONFIG_KEYSTONE_ADMIN_PW=[비밀번호]
CONFIG_CINDER_VOLUMES_SIZE=100G
CONFIG_NTP_SERVERS=0.kr.pool.ntp.org		// (Network Time Protocol: 시간을 알려주는 서버)
CONFIG_HEAT_INSTALL=y
CONFIG_NEUTRON_L2_AGENT=openvswitch			// openvswitch 가상 스위치 사용
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan,flat	// private(내부) 네트워크를 vxlan으로 설정, public(외부)는 flat
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan	// 가입자들은 vxlan(내부)만 사용 가능
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch	// openvswitch 드라이버 사용
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=extnet:br-ex		// br-ex가 extent로 연결됨 (이런 식으로 enp0s3가 오픈스택 내부까지 연결됨)
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:ens160		// ens160(랜카드)가 br-ex와 연결되고
CONFIG_PROVISION_DEMO=n				// 아이피 세팅을 알아서 설정하는 옵션 (우리가 해야하므로 'n')
//

# 위 answers파일의 설정을 기반한 오픈스택 설치
packstack --answer-file /root/answers.txt

 저번과 마찬가지로 설치에 시간이 많이 걸린다.

설치 성공

오픈스택 - 네트워크 생성

크롬에 자기 아이피 검색. 아이디는 'admin' 비밀번호는 설정한 것으로
메인화면. 우츠 상단으 눌러 설정으로 진입
시간대 변경

 현재 Admin 계정이므로 일반 사용자 메뉴인 '프로젝트'말고도 관리자 전용 메뉴인 '관리' 메뉴가 노출된다.

네트워크 - 네트워크 메뉴에 들어가서 '네트워크 생성' 클릭
Pools 할당에 아이피 대역의 시작과 끝을 적어주고 생성
외부 네트워크 생성 성공

 

다시 네트워크 생성을 누르자
내부 네트워크의 이름을 입력
원하는 이름과 네트워크 주소를 입력하자. 그리고 그 주소에 맞는 게이트웨이 주소도 입력해주자.
DHCP를 사용하므로 전과 달리 Pools할당에 아이피를 입력할 필요 없다.
내부 네트워크 생성 완료

오픈스택 - 라우터 생성

라우터 생성 클릭

여기서 SNAT가 보이는데 NAT의 하나의 파트이며 다음과 같이 있다.

  • SNAT (Soure NAT) : 내부 ip  --변환--> 외부 ip   (내부에서 외부로 나갈때 변환)
  • DNAT (Destination NAT) : 내부 ip <--변환-- 외부 (외부에서 내부로 나갈때 변환)

NAT는 SNAT, DNAT 모든 기능을 가지고 있는 것이다.

라우터 생성 완료. router 클릭
인터페이스에 들어가서 '인터페이스 추가' 클릭
서브넷을 내부 네트워크로 설정, IP주소는 미입력
인터페이스 추가 완료
토폴로지를 확인하면 이런 모양이다. 만일 전에 오픈스택 설치시 DEMO를 y로 했으면 이게 자동으로 만들어진다. 하지만 직접 커스텀하기 위해 'n'으로 했던 것이다.
외부(윈도우10) 에서 연결이 된다.

오픈스택 - 보안 그룹 생성

프로젝트 - 보안 그룹 생성 클릭
웹서버와 관련된 보안 그룹이므로 다음과 같이 이름을 설정하고 생성
보안그룹 생성 성공.

여기서 내보냄은 egress 혹은 아웃바운드(OutBound)를 의미한다.

반대의 의미론 들어옴은 ingress 혹은 인바운드(InBound)를 의미한다.

 

0.0.0.0/0은 모든 ipv4 주소(anywhere)를 의미한다.

::/0 은 모든 ipv6주소(anywhere)를 의미한다.

 

거부 deny block (설정하지 않으면 거부)

수락 allow (설정하면 수락)


오픈스택 - 보안 그룹에 규칙 추가

규칙 추가 클릭
위와 같이 설정. 어떤 아이피든간에 외부에서의 ipv4 80포트는 다 받아줌
위와 같이 SSH 규칙도 추가
HTTPS도 추가
핑 테스트를 하기 위한 ALL ICMP도 추가. (테스트 용도여서 여는 것이지, 실제에선 보안상의 이유로 안여는 것이 좋다)
모두 추가한 모습.

오픈스택 - Floating IP

VM 자체에는 프라이빗(내부)아이피만 존재하는데, 이 아이피들(10.11.0.0)은 외부와 통신이 불가능하다.

그래서 이 Floating IP를 통해 외부와 통신할 것이다. 간단히 말하자면 Floating IP는 NGW의 외부 아이피이다.

이 Floating IP는 우리가 설정했던 아이피 범위인 192.168.4.1~192.168.4.50 까지 쓸 수 있다.

 

결과적으로, 포트 포워딩 없이 아이피별로 연결만 해주면 VM들과 외부가 통신 가능

Floating IP - 프로젝트에 IP 할당
Pool을 외부 네트워크로 선택 후 IP할당 클릭. 이 과정을 총 3번 반복한다.
총 3개의 Floating IP를 생성했다.

 

 


오픈스택 - Compute 설정

설정하기에 앞서 업로드할 이미지 파일들을 다운받자.

 

https://docs.openstack.org/image-guide/obtain-images.html

 

Get images — Virtual Machine Image Guide documentation

Get images The simplest way to obtain a virtual machine image that works with OpenStack is to download one that someone else has already created. Most of the images contain the cloud-init package to support the SSH key pair and user data injection. Because

docs.openstack.org

위 홈페이지에 오픈스택에 쓰일 여러 이미지들이 모여 있다.

그 중에서 필요한 것들의 다운로드 링크를 정리하자면,

 

http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2

 위 링크에서 CentOS7의 이미지를 받는다.

https://docs.openstack.org/image-guide/obtain-images.html

 

Get images — Virtual Machine Image Guide documentation

Get images The simplest way to obtain a virtual machine image that works with OpenStack is to download one that someone else has already created. Most of the images contain the cloud-init package to support the SSH key pair and user data injection. Because

docs.openstack.org

위 링크에서 Ubuntu 이미지를 다운로드 받는다.

http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img

위 링크에서 CirrOS를 받는다.

 

이미지 업로드

이미지 생성 클릭
이런 식으로 설정하여 CirrOS 업로드
이런 식으로 총 3개의 이미지를 업로드 했다.

키 페어

키 페어 생성 클릭
이름을 적어주고 키 페어 생성 클릭
다운로드 폴더에 키가 생겼다. 잘 가지고있자.

인스턴스

시작이라기 보다는 'Launch'를 의미한다. 인스턴스 시작 클릭
CirrOS를 쓰는 인스턴스를 만들어보자. 위와 같이 설정하고 Next
사용할 이미지인 CirrOS를 고르자
사용될 리소스들을 정해준다.
내부의 VM이므로 내부 네트워크를 택하자.
생략
default의 경우는 가급적 사용하지 말자(보안 공격때 약점이 될 수 있음). 전에 만든 open-web을 사용
전에 만들었던 open-key 사용
건들 내용이 없다. 인스턴스 시작을 누르자.
생성 성공

콘솔 선택
이렇게 콘솔창이 뜬다. 맨 아래에 있는 아이디와 패스워드로 로그인해서 테스트 해보자.
설정한 내용들이 정상적으로 반영됐다.
다시 돌아와서 유동 IP 연결을 하자.
유동 아이피 하나를 골라서 연결

참고로, 이런 유동 IP 연결을 1:1 NAT 방식이다.

  • 1:1 NAT :내부 아이피 하나와 외부 아이피 하나로 다이렉트로 변환
  • 1:N NAT : 내부 아아피 하나와 외부 아이피 여러개로 변호나 
  • N:N NAT
IP Address 부분에 외부 아이피가 생겼다.
MobaXterm에서 해당 아이피로 연결해보자. 아이디는 아까 콘솔창에서 본 것으로 하자.
비밀번호도 아까 위에서 콘솔창에 뜬 것으로 하면 연결 성공.
# 웹서버 테스토용
nohup sh -c "while true; do echo -e 'HTTP/1.0 200 OK\r\n\r\nserver' | sudo nc -l -p 80 ; done" &

# 테스트
curl 127.0.0.1
server가 출력된다. 테스트 성공
구글 크롬으로도 연결된다.

외부 접속 테스트

# 웹서버 테스토용
nohup sh -c "while true; do echo -e 'HTTP/1.0 200 OK\r\n\r\nserver' | sudo nc -l -p 80 ; done" &

# 테스트
curl 127.0.0.1
server가 출력된다. 테스트 성공
구글 크롬으로도 연결된다.

만일, 이 80포트를 다시 없애버리면 어떻게 될까? 당연히 접속이 안될 것이다.

open-web의 규칙 관리 클릭

 

80포트 규칙 삭제

 

이제 다시 접속해보면 접속이 안될 것이다.

이제, 더 디테일하게 규칙을 추가하겠다.

전과 다르게 CIDR에서 특정 아이피 하나만을 허용하도록 만들었다.

 이젠 위의 아이피가 아닌 다른 아이피로는 접속이 불가능하다.


볼륨

볼륨

만일 VM의 공간이 부족한 경우, 불륨을 연결하여 서비스를 끊지 않고 공간을 확장해줄 수 있다.

볼륨 생성 클릭
위와 같이 생성해주자.
cirros-add 의 불륨 연결 관리 클릭
CirrOS에 볼륨 연결
Attached To 부분이 변했다.
# 불륨 추가 명령어
sudo ext4 -t xfs /dev/vdb		// 포멧
sudo mount /dev/vdb /mnt/		// 마운트

# 저장 공간 확인
df -h
마운트 정상적으로 완료.

# 테스트를 위한 코드
cd /mnt
ls
sudo touch test.txt
ls