이번 포스팅에서는 지난 글에서 준비한 OpenStack Stein 을 이용해 인스턴스를 연결할 네트워크를 구성해보겠습니다.
PackStack을 이용한 OpenStack Stein 설치는 아래 포스팅을 참고해주세요
2020/03/26 - [OpenStack] - PackStack을 이용한 단일 노드 OpenStack Stein 설치 2편 - PackStack 사용하기
PackStack을 이용한 단일 노드 OpenStack Stein 설치 2편 - PackStack 사용하기
이번 포스팅은 지난 글에서 준비한 CentOS7 환경에서 PackStack 패키지를 이용한 OpenStack Stein Allinone을 설치해보겠습니다. OpenStack Stein 설치 환경인 CentOS 7 준비는 아래 포스팅을 참고해주세요 2020/0..
blog.moonsh.me
지난 포스트 2편까지 OpenStack Stein을 CentOS 7 가상머신에 설치해보았습니다.
하지만 설치된 OpenStack에 새로운 인스턴스를 생성하고 외부 네트워크에 접속하기 위해서는 추가적인 네트워크 설정이 필요합니다.
OpenStack의 네트워크 구성은 호스트 머신의 CLI 또는 Horizon 대시보드에서 가능하지만 대시보드는 몇몇 설정사항에 제한이 있기때문에 해당 포스트에서는 CLI를 이용하는 방법에 대해 알아보겠습니다.
1. SSH를 이용한 openstack 명령어 사용
지난 번 OpenStack을 설치한 CentOS 가상머신에 SSH를 이용해 접속해줍니다.
현재 OpenStack은 아래의 옵션을 이용해 설치되었기에 네트워크가 전혀 구성되어 있지 않는 공백상태입니다.
### OpenStack의 Demo모드를 비활성화 합니다.
config_provision_deomo = n
다음 명령어를 사용하여 현재 CentOS 머신에 어떤 네트워크 인터페이스가 부착되어 있는지 확인해 줍니다.
### ifconfig와 동일하지만 더 많은 기능을 가지고 있습니다.
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
link/ether 36:5e:f1:57:89:fc brd ff:ff:ff:ff:ff:ff
inet6 fe80::345e:f1ff:fe57:89fc/64 scope link
valid_lft forever preferred_lft forever
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 22:6b:98:97:8c:7e brd ff:ff:ff:ff:ff:ff
inet 10.0.0.160/24 brd 10.0.0.255 scope global dynamic ens19
valid_lft 6214sec preferred_lft 6214sec
inet6 fe80::206b:98ff:fe97:8c7e/64 scope link
valid_lft forever preferred_lft forever
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a6:7a:29:26:7c:4a brd ff:ff:ff:ff:ff:ff
5: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 36:5e:f1:57:89:fc brd ff:ff:ff:ff:ff:ff
inet 10.25.1.2/24 brd 10.25.1.255 scope global dynamic br-ex
valid_lft 6209sec preferred_lft 6209sec
inet6 fe80::345e:f1ff:fe57:89fc/64 scope link
valid_lft forever preferred_lft forever
6: br-tun: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 62:18:43:c4:18:46 brd ff:ff:ff:ff:ff:ff
9: br-int: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN group default qlen 1000
link/ether ea:2b:34:4a:8f:43 brd ff:ff:ff:ff:ff:ff
이전 포스트에서 설정해둔것과 같이 ens18과 ens19가 각각 vmbr3, vmbr1 브릿지에서 IP를 할당 받은 것으로 확인되며 OpenStack 이 설치되며 자동으로 생성된 br-ex, br-int, br-tun 과 같은 Open vswitch 스위치가 생성되어 있는것을 확인할 수 있습니다.
아래 명령어를 이용하여 네트워크가 공백상태인지 확인해줍니다.
### openstack 명령어를 사용하기 위한 사용자 정보를 입력합니다.
### keystonerc_admin 파일은 보통 /root 또는 $home/ 에 위치합니다.
$ source keystonerc_admin
### openstack 명령어를 이용하여 네트워크 구성정보를 확인합니다.
$ openstack network list
아래와 같이 아무런 값도 없음을 확인합니다.
+--------------------------------------+----------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+----------+--------------------------------------+
+--------------------------------------+----------+--------------------------------------+
2. openstack 명령어를 이용한 네트워크 생성 및 관리
네트워크가 비어있음을 확인하면 아래의 명령어를 이용하여 인스턴스가 사용할 프라이빗 네트워크를 생성해줍니다.
### private1을 이름으로 하는 네트워크를 생성합니다
### private1 네트워크는 내부 인스턴스의 접속이 가능한 ovs 스위치로 사용합니다.
$ openstack network create private1
### private1 네트워크에 서브넷을 생성합니다.
### private1_subnet 을 이름으로 갖는 서브넷을 생성한 뒤
### 172.32.0.0/24 를 IP 범위로 지정합니다.
### 해당 IP 범위 중 172.32.0.100 ~ 172.32.0.200 사이의 IP를 인스턴스가 가질 수 있습니다.
### 당연히 IP 범위는 원하시는 범위로 설정하실 수 있습니다.
$ openstack subnet create --network private1 --allocation-pool \
start=172.32.0.100,end=172.32.0.200 --dns-nameserver 8.8.8.8 \
--subnet-range 172.32.0.0/24 private1_subnet
위에서 생성한 네트워크는 public이 아니기에 OpenStack 인스턴스가 접속되어도 외부로의 접속은 불가능합니다.
이를 해결하기 위해 외부 접속이 가능한 public 네트워크를 새로 생성합니다.
### public 이름을 가진 Provider 네트워크를 생성합니다.
### 네트워크 타입은 flat이며 외부 연결이 가능한 extnet 물리 네트워크와 연결됩니다.
$ openstack network create --provider-network-type flat \
--provider-physical-network extnet --external public
### private1 네트워크와 마찬가지로 public 네트워크도 서브넷을 생성합니다.
$ openstack subnet create --network public --allocation-pool \
start=10.25.1.100,end=10.25.1.200 --no-dhcp \
--subnet-range 10.25.1.0/24 public_subnet
위 명령어를 통해 인스턴스가 사용할 private1 네트워크와 외부접속이 가능한 public 네트워크를 생성했습니다.
하지만 단지 2개의 네트워크를 생성했을 뿐, 아직 private1 네트워크에 접속된 인스턴스는 여전히 외부 접근이 불가능합니다.
이를 위해 private1 네트워크와 public 네트워크를 서로 연결해 줄 가상 라우터가 필요합니다.
아래의 명령어를 이용해 라우터를 생성하고 private1 네트워크와 public 네트워크를 연결해줍니다.
### router1 이름의 라우터를 생성하고
### private1 과 public 네트워크의 서브넷을 서로 연결해줍니다.
$ openstack router create router1
### 우선 public 네트워크에 외부 gateway로써 연결합니다.
$ openstack router set --external-gateway public router1
### private1 네트워크에도 연결해줍니다.
$ openstack router add subnet router1 private1_subnet
3. 생성한 네트워크 정상작동 검증하기
생성 과정이 마무리되면 아래 명령어를 이용해 라우터의 작동여부를 확인합니다.
### 라우터와 dhcp서버가 생성되었는지 확인합니다.
$ ip netns show
[denmark11@localhost ~(keystone_admin)]$ ip netns
qrouter-fed7b424-20a2-4b22-aadd-b8c2117ec545 (id: 1)
qdhcp-ba0687da-75cd-45e9-a70b-fe787ff27550 (id: 0)
위의 출력 결과와 같이 qrouter와 qdhcp가 생성되어 있는것을 확인할 수 있습니다.
아래 명령어를 이용해 실제로 라우터가 외부 네트워크에 접속이 가능한지 확인할 수 있습니다.
### qrouter-ID 에서 ID는 위 명령을 통해 출력된 ID를 사용합니다.
$ sudo ip netns exec qrouter-fed7b424-20a2-4b22-aadd-b8c2117ec545 ping www.speedtest.net
PING zd.map.fastly.net (151.101.26.219) 56(84) bytes of data.
64 bytes from 151.101.26.219 (151.101.26.219): icmp_seq=1 ttl=54 time=133 ms
64 bytes from 151.101.26.219 (151.101.26.219): icmp_seq=2 ttl=54 time=130 ms
64 bytes from 151.101.26.219 (151.101.26.219): icmp_seq=3 ttl=54 time=132 ms
생성된 qrouter 를 이용해 www.speedtest.net 사이트에 ping을 보낸 결과 정상적으로 라우터가 작동하고 있음을 확인할 수 있습니다.
추가로 아래 명령어를 이용해 OpenStack에 정상적으로 네트워크가 생성되었는지 확인합니다.
$ openstack network list
+--------------------------------------+----------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+----------+--------------------------------------+
| adc93995-4d12-49bc-a3d7-dcee3b539c4d | public | d6d1ea17-e046-4401-8af4-83db4859410c |
| ba0687da-75cd-45e9-a70b-fe787ff27550 | private1 | 078f5748-c925-422d-9fdb-00ce98a81114 |
+--------------------------------------+----------+--------------------------------------+
처음엔 비어있었던 OpenStack의 네트워크가 방금 생성한 public, private1 네트워크를 보여주는 것을 확인할 수 있습니다.
Horizon 대시보드에도 접속해 네트워크 > 네트워크 토폴로지 메뉴에서 네트워크 구조를 확인합니다.
왼쪽의 파란색 바는 public 네트워크를 의미하며 오른쪽의 주황색 바는 private1 네트워크를 의미합니다.
그리고 public과 private1 네트워크의 사이에 라우터가 두 개의 네트워크를 연결하고 있음을 확인할 수 있습니다.
저는 이미 인스턴스를 2개 생성했기에 private1 네트워크의 오른쪽에 표시되는것을 확인할 수 있습니다.
여기까지 OpenStack에서 인스턴스를 위한 네트워크를 설정했습니다.
다음 포스트에서는 OpenStack에서 제공하는 기본이미지 CirrOS를 이용해 간단한 인스턴스를 런치해보겠습니다.
'OpenStack' 카테고리의 다른 글
PackStack을 이용한 단일 노드 OpenStack Stein 설치 4편 - 인스턴스 만들기 (0) | 2020.03.31 |
---|---|
PackStack을 이용한 단일 노드 OpenStack Stein 설치 2편 - PackStack 사용하기 (0) | 2020.03.26 |
PackStack을 이용한 단일 노드 OpenStack Stein 설치 1편 - 설치환경준비 (0) | 2020.03.25 |