0부터 시작하는 OpenStack 공부 - Network 구성 & Instance 생성 & 보안 그룹

Jaehong Lee·2022년 9월 15일
0
post-thumbnail

1. Network 환경 구성 - Cli

시작 전에 관리탭에 들어가서 이미지, 네트워크, 라우터를 모두 삭제해주자

네트워크 만들기 : 네트워크 생성 -> 서브넷 만들기 -> 라우터 만들기 -> 라우터에 서브넷 추가


Network & Subnet 생성 및 확인

openstack network create mynet1
  • 네트워크를 생성해주자
openstack subnet create \
> --subnet-range 172.16.123.0/24 --gateway 172.16.123.1 \
> --network mynet1 --dhcp --dns-nameserver 8.8.8.8 \
> mysubnet1
  • 서브넷을 생성해주자. 서브넷 범위, 게이트웨이 주소, 연결할 네트워크, dhcp 사용 여부, dns nameserver 주소를 지정해주었다

  • 생성한 서브넷의 상세 정보를 확인하자. network_id 는 mynet1 의 id 와 동일하다

Router 생성 및 서브넷 추가

openstack router create myrouter1
  • 라우터를 생성해주자
openstack router add subnet myrouter1 mysubnet1
  • 생성한 라우터에 생성한 서브넷을 추가하였다

  • 잘 추가되었는지 확인하자

2. Network 환경 구성 - DashBoard

Network & Subnet 생성 및 확인

  • 네트워크 탭에 들어가서 생성을 누르자

  • 네트워크 이름을 지정하고, 공유를 선택하자

  • 서브넷을 설정하자

  • dhcp pool 과 dns nameserver 주소를 지정해주고, 생성하자

Router 생성 및 서브넷 추가

  • 라우터를 생성해주자

  • 생성한 라우터에 들어가서 인터페이스 추가를 누르자

  • 추가할 서브넷을 지정하고 제출하면 된다

  • 잘 추가되었는지 확인하자

네트워크 토폴로지 확인

  • 지금까지 구성한 환경을 확인하자

3. Instance 생성 준비

Instance 생성 준비

  1. Key-Pair
  2. flavor
  3. image 등록

Key-Pair 생성 - Cli

Key-Pair 를 생성하여 퍼블릭 키는 openstack 에서 보관하다가 인스턴스 배포시 인스턴스에 넣어준다. 프라이빗 키는 사용자가 가지고 있다가 인스턴스 접속시 인증을 위해 사용한다

[root@localhost ~(logged)]# ssh-keygen -q -f ~/.ssh/gildong.pem -N ""
[root@localhost ~(logged)]# ssh-keygen -q -f ~/.ssh/chulsoo.pem -N ""
[root@localhost ~(logged)]# ls ~/.ssh
chulsoo.pem.pub  gildong.pem.pub 
chulsoo.pem      gildong.pem   
  • key-pair 두 개를 생성하고 확인하자. pub 이 Public Key 이다. 이 Public Key 는 OpenStack 에서 보관해야 하기에 생성한 Key 를 이용하여 OpenStack 에 Key 를 생성해야 한다

[root@localhost ~(logged)]# openstack keypair create --public-key ~/.ssh/gildong.pem.pub gildongkey
[root@localhost ~(logged)]# openstack keypair create --public-key ~/.ssh/chulsoo.pem.pub chulsookey
  • 만들어진 key 를 통해 OpenStack 에서 Public Key 를 생성하였다

  • Key 가 잘 생성되었다

Key-Pair 생성 - DashBoard

  • 이번엔 DashBoard 에서 Key-Pair 를 생성해보자

  • 생성시 Private Key 는 다운로드 된다

testkey 는 삭제해주자


Flavor 생성 - Cli

openstack flavor create --id 6 --vcpus 1 --ram 1024 --disk 20 m1.xsmall
  • Flavor 를 생성해주자. vcpu / ram / disk / id / name 을 지정해주자

  • 잘 생성되었다

Image 등록 - Cli

Image 받아오기

출처 : http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2.xz

  • wget 으로 이미지를 다운 받자

  • 압축을 풀어주자. 압축 해제시 용량이 858783744 인지 확인하자

Glance 서비스에 Image 등록

  • Container 의 format 은 Baremetal 이다. 이는 이 이미지로 배포하는 것이 BareMetal 방식으로 배포된다는 것이다. 이는 Container 가 아니라 인스턴스이기 때문이다. 인스턴스나 가상머신은 가상 자원 위에 OS 가 올라가므로 자원 바로 위에 OS 가 올라가기에 bare 인 것이다
  • 즉, bare 옵션은 VM 이미지를 위한 컨테이너가 존재하지 않는다는 것이다. 컨테이너는 OS 가 없기 때문이다
  • 해당 Image 를 다른 사용자와 공유가 가능하게 하려면 Public 을 의미하는 pub 옵션을 넣어준다

가상 머신과 인스턴스의 차이는 내용물이다. 가상 머신을 BASE 로 내용물을 추가하여 배포하는 것이 인스턴스이다. 가상 머신은 INSTALL, 인스턴스는 DEPLOY 이다

  • 잘 등록되었다

Public Image & Private Image

  • 이미지는 Public 이미지와 Private 이미지로 나뉜다. Public 이미지는 CSP 에서 올린다
  • 인스턴스에서 기본 이미지는 Disk 이다. 여기에 추가한 Data 가 있을 때, 이를 다시 추가하는 것은 힘든 작업이다. 이를 간단히 하기 위해, Data 가 추가된 인스턴스의 Storage 를 이미지로 만들어서 배포할 수 있다
  • 이 이미지에 AutoScale 을 적용하여 필요에 따라 해당 이미지를 통해 인스턴스를 자동으로 배포하여 인스턴스 수를 늘리거나 줄이게 할 수 있다. 이는 이미지를 통해 배포되는 인스턴스에 대한 AutoScale 이다

4. 보안 그룹 생성 & 규칙 추가

ACL 의 경우에는 서브넷 단위로 보안 정책을 수립한다

  • 보안 그룹은 인스턴스 단위로 보안 정책을 수립한다. 일반적으로 Inbound 와 Outbound 중 주로 Inbound 를 작성한다 ( 서버로 들어오는 것 = Inbound )
  • Outbound 는 기본적으로 모두 허용하는 것으로 설정된다

기존의 보안 그룹 확인

  • Ipv4 / Ipv6 타입에 대해 들어오는 것과 내보내는 것 모두 허용되어 있다

보안 그룹 생성 및 규칙 추가 - DashBoard

Outbound 에 대해서는 기본적으로 모두 허가이므로, 규칙은 기본적으로 Inbound 에 대한 규칙이다

  • 보안 그룹을 하나 생성하자. 이름만 지정해주면 된다

  • 규칙 관리를 눌러주자

  • 규칙 추가를 해주자. CIDR 는 출발지를 말한다. 이는 ICMP ( PING ) 프로토콜에 대해 any ( 모든 주소 ) 에서 들어오는 것을 허가하는 것이다

  • mysql 에 대해 들어오는 것을 허가하는 규칙을 추가해주자

  • 사용자 정의 TCP 규칙으로 TCP 프로토콜에 대해 8080 포트에 들어오는 것을 허가해주자

생성한 보안 그룹은 삭제하자


보안 그룹 생성 및 규칙 추가 - Cli

외부에서 유입되는 트래픽 중 웹접속 ( 80/tcp, 443/tcp ), SSH 접속 ( 22/tcp ), ICMP 는 허용한다. 단, 인스턴스에서 외부로 나가는 것은 모두 허용된다 ( default )

Outbound 에 대해서는 기본적으로 모두 허가이므로, 규칙은 기본적으로 Inbound 에 대한 규칙이다

  • 보안 그룹을 만들자
 openstack security group rule create --proto tcp --dst-port 80 permitweb
 openstack security group rule create --proto tcp --dst-port 443 permitweb
 openstack security group rule create --proto tcp --dst-port 22 permitweb
  • 규칙을 추가하자. 각각 tcp 프로토콜에 대해 해당 포트로 들어오는 것을 허용하는 규칙을 생성한 보안그룹에 추가하였다
 openstack security group rule create --proto icmp permitweb
  • Icmp 프로토콜에 대해서도 들어오는 것을 허가하는 규칙을 추가하자

  • 잘 추가됬는지 확인하자. 아직 허가할 출발지 Ip 는 설정하지 않았다

  • 출발지가 211.183.3.0/24 대역에서만 SSH 연결이 가능하게 규칙을 추가하자. 위에서 Cli 상에서 추가한 22 포트에 대한 규칙은 삭제하자

CentOS 이미지는 방화벽에 대한 설정이 없다. 따라서 해당 이미지로 배포한 인스턴스는 보안 그룹만으로 관리한다


5. Instance 생성

Instance 생성 - Cli

openstack server create --flavor "flavor 이름" --image "image 이름" --security-group "SG 이름" --key-name "Public key 이름" --nic net-id="network id or $(명령 결과)" "인스턴스 이름"
  • 인스턴스 배포 코드는 위와 같은 형식이다
 openstack server create --flavor m1.xsmall --image CentOS7 --security-group permitweb --key-name gildongkey --nic net-id=$(openstack network list | grep mynet1 | gawk '{print $2}') CentOS1
  • 우리가 생성한 요소들을 가지고 인스턴스를 배포하자

  • 잘 배포되었는지 확인하자

  • 위의 버튼을 통해 콘솔을 열어서 들어갈 수 있다

우리는 Disk 의 용량을 20GB 로 설정했지만, 이는 외부 Storage 에서 Mount 해서 사용하는 것이 아닌, local 의 Disk 를 사용한다. 이는 Migration 이 안되고, 또한 local 의 용량이 부족해지므로 좋지 않은 방법이다


Instance 생성 - Dashboard

  • 인스턴스 시작을 눌러주자

  • 이름과 개수를 지정해주자

  • 새로운 볼륨은 생성하지 않으며, 부팅 소스를 이미지로 선택하고, 사용할 이미지를 선택하자

  • Flavor 를 선택하자

  • Network 를 선택하자

  • 보안 그룹 선택

  • 사용할 Key-Pair 를 선택하고, 인스턴스 시작을 누르자

  • 잘 배포되었다

생성한 Instance 들은 전원을 꺼주자

이제 내부적인 구성이 끝났다. 외부로 통신을 위한 외부적인 요소는 다음장에서 이어진다

profile
멋진 엔지니어가 될 때까지

0개의 댓글