# OS : centos-7.8-64bit
# VM Spec : Intel 8vCore 32GB
# Network : Ethernet 2(eth0/eth1)
- eth0(Public 통신가능)
- eth1(Private Subnet) => openstack bridge 통신 용도
# Disk : Root(100G)
#
CentOS에서 기본적으로 구성되는 Firewall 및 Selinux를 Off 합니다.
sudo systemctl disable --now firewalld NetworkManager
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
스택에 설치되는 호스트 명 설정 및 패키지를 업데이트 합니다.
sudo hostnamectl set-hostname openstackcloud.example.com --static
sudo yum -y update
sudo yum -y install vim wget curl telnet bash-completion
시스템 재부팅 후 스택 패키지를 설치합니다.
이번 블로그에선 openstack stein 버전을 설치하도록 합니다.
sudo reboot
sudo yum install -y centos-release-openstack-stein
sudo yum install -y openstack-packstack
여기까지 설치가 완료되었으면, 앞서 물리적으로 연결된 네트워크의 이더넷 2개에 대해서
Static IP를 설정해줍니다.
저와 같은 경우엔 KT Cloud의 VM위에 OpenStack을 설치하기 때문에, VM이 기본 DHCP로 구성되어 할당 되어있었습니다.(만일 이미 Static IP 할당받은 경우엔 Skip)
# eth0
vi /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=fa:16:3e:e3:e0:cb
BOOTPROTO=static
DEVICE=eth0
MTU=1500
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
IPADDR=172.25.25.156
NETMASK=255.255.255.0
GATEWAY=172.25.25.1
METRIC=0
# eth1
vi /etc/sysconfig/network-scripts/ifcfg-eth1
HWADDR=fa:16:3e:b9:b6:84
BOOTPROTO=static
DEVICE=eth1
ONBOOT=yes
TYPE=Ethernet
IPADDR=172.25.176.39
NETMASK=255.255.255.0
GATEWAY=172.25.176.1
METRIC=1
systemctl restart network
PackStack을 통해 설치하기 위해선 packstack에서 설치시 사용되는 answer.txt 파일을 구성해야 합니다.
answer.txt 파일 초기데이터는 아래 명령어를 통해서 가져올 수 있습니다.
sudo packstack --gen-answer-file /root/answers.txt
만일 answer.txt 파일 가져오는 도중 Python LANG 관련 에러가 나온다면, 아래와 같이 환경 변수를 설정해주면 됩니다.
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
이후 answer.txt 파일 구성은 다음과 같이 설정하면 됩니다.
CONFIG_DEFAULT_PASSWORD=openstack
CONFIG_CINDER_VOLUMES_SIZE=80G
CONFIG_HEAT_INSTALL=y # HEAT 서비스 이용 원할 경우
CONFIG_NEUTRON_L2_AGENT=openvswitch
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan,flat
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=extnet:br-ex # 물리적인 네트워크명 설정: extnet
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth1 # br-ex 브릿지와 실제 물리 네트워크 인터페이스 연결 통로
CONFIG_PROVISION_DEMO=n
openstack을 설치하게되면 br-ex이라는 가상의 이더넷 브릿지가 생성되는데, 이 브릿지를 물리 네트워크(eth1)과 연결하여 OVS를 구성하면 가상의 외부 환경에서도 VM들에 대해 접속할 수 있는 네트워크가 구성되는 형태입니다.
(물론 스택상에서 외부 네트워크 티어와 내부 네트워크 티어간 라우터 설정이 되어있다는 전제입니다.)
answer.txt 파일 설정이 완료되면 아래 명령어를 통해 설치를 시작합니다.
sudo packstack --answer-file /root/answers.txt --timeout=1500 | tee packstrack-output.txt
설치가 완료되면 커맨드 창에 아래와 같이 출력됩니다.
앞서 저와 같은 경우엔 KT Cloud 환경의 Private Tier내 VM위에 오픈스택을 올리는 경우라,
현재 VM의 외부망 접근 IP를 별도 할당 받아 접속을 시도 해야 합니다.
외부망 IP는 앞서 구성한 네트워크 이더넷(eth0)과 연결되어 NAT 통해 통신이 진행 됩니다.
따라서 외부망 IP에 대해 openstack 내 Horizon에 IP를 별도로 등록해줘야 합니다.
만일 내부 IP 그대로 사용하신 다면 Skip하고 넘어가셔도 상관 없습니다.
설정 완료 후에 httpd 재기동 시켜줍니다.
vi /etc/httpd/conf.d/15-horizon_vhost.conf
ServerAlias 211.X.X.X ==> 내용 추가
systemctl restart httpd
잘 설치되었는지 확인하기 위해 Horizon에 접속하여 확인 합니다.
오픈스택 설치가 완료되면 Horizon에 접속하여 아래와 같이 Network를 구성하면 됩니다.
Public Network는 관리 계정에서만 생성이 가능합니다.
[관리 > 네트워크 > 네트워크 > 네트워크 생성] 화면에서 Flat 네트워크 타입을 설정하고 서브넷은 물리 네트워크 이더넷(eth1)과 동일한 대역대로 설정했습니다.
프로젝트내 네트워크 화면을 통해서 아래와 같이 네트워크를 설정합니다.
[프로젝트 > 네트워크 > 네트워크 > 네트워크 생성] 화면에서 vxlan 네트워크 타입을 설정하고
서브넷은 내부 네트워크 (192.121.100.0/24)로 설정했습니다.
Public Network, Private Network 티어 생성이 완료되면 외부 통신을 위해 두 네트워크를 연결해주는 라우터를 설정해야 합니다.
라우터 설정은 [프로젝트 > 라우터 > 라우터 생성] 에서 라우터 하나를 추가합니다.
이후 생성된 라우터로 들어가 인터페이스 추가 버튼 클릭하여 내부 네트워크에 할당된 내부 네트워크 인터페이스를 생성한 라우터에 같이 연결해줍니다.
여기까지 진행이 완료되면 이제 Private Network 내에서 VM을 생성하면 됩니다.
VM 생성을 위해 CentOS7 이미지는 미리 다운로드를 받아 스택에 업로드 하였습니다.
다운로드 페이지 : https://cloud.centos.org/centos/7/images/
CentOS 이미지를 통해서 최소 스펙의 VM 1대를 생성하였습니다.
VM 생성 시 KeyPair를 설정해야 추후 접속이 가능합니다. KeyPair 설정 없이 User Data 입력을 통해 ssh password를 주입하여 접속하는 방법도 있으나 간단히 접속하기 위해선 KeyPair 설정하는 방법으로 진행하길 추천 드립니다.
생성된 VM에 접속하기 위해 유동 IP를 생성하도록 하겠습니다.
[VM 설정 > 유동 IP 연결] 에서 + 눌러 Floating IP 생성 후 연결 버튼 클릭
연결이 완료되면 아래와 같이 유동 IP도 화면에서 같이 보이게 됩니다.
여기까지 완료되고 네트워크 토폴로지를 통해 확인해보면 아래와 같이 확인됩니다.
이제 생성된 VM에 대해서 접속해보도록 하겠습니다.
VM 생성단계에서 생성된 pem키를 통해서 접속하겠습니다.
$ ssh centos@172.25.176.8 -i key.pem
접속 시도하였으나 Connection Time Out이 발생 합니다.
이는 오픈스택 내에서 기본적으로 관리하는 Default 보안 규칙(방화벽) 때문에 통신 프로토콜이 차단된 상태 입니다.
VM 생성시 별도의 보안 그룹을 설정하지 않았다면 기본 그룹인 default로 설정이 되어 있습니다. (만일 별도로 보안 그룹을 설정하였다면 해당 그룹의 규칙 확인하면 됩니다.)
default그룹에 설정되어 있는 규칙은 원격 보안그룹이 default로 되어 있기 때문에
해당 규칙을 모두 삭제하고, 양방향의 모든 프로토콜에서 통신 가능하도록 설정합니다.
이후 다시 VM 접속을 시도하면 정상적으로 접속 되는걸 확인할 수 있습니다.