Stein 오픈스택 클라우드 서버 구축(8) - 테넌트 네트워크 환경 구축

blog post 

 

본 포스팅에서는 테넌트 네트워크를 제공하기 위한 설정을 진행해 보도록 하겠습니다.

 

앞서 네트워크 서비스 포스트에서 구성을 마무리하며 말씀드린 것과 같이 실제 VM이 사용하기 위한 가상의 테넌트 네트워크를 구성하기 위한 추가 설정이 필요합니다. 

 

가상 네트워크를 구성하기 위해 오픈스택에서 제공하는 l2 네트워크 인터페이스 타입에는 여러가지가 있습니다. 대표적으로 flat, vlan, gre, vxlan 등의 l2 네트워크 인터페이스 타입을 지정할 수 있습니다. 각 인터페이스를 어떻게 사용하는가에 따라 호스트 시스템에서 동작하는 네트워크 인터페이스 구성이 달라집니다. 각 l2 인터페이스에 대해서는 추후에 별도로 다루도록 하겠습니다.

 

본 클라우드 구축 과정에서는 다음과 같이 구성해 보도록 하겠습니다.

  • Private 가상 네트워크: VxLAN 오버레이 네트워크 타입
  • Public 가상 네트워크(외부 공용네트워크로 연결): Flat 타입

Private 네트워크는 말 그대로 오픈스택 클라우드 시스템 내부에서 구성된 가상의 네트워크로, 외부 물리 네트워크와는 직접 연결이 기본적으로 차단되어 있습니다. 물론 구성에 따라 가상의 l3 라우터를 통해 외부와 연결할 수도 있습니다. 또한 하나의 내부 네트워크(혹은 private 네트워크)는 호스트 시스템의 vxlan 인터페이스를 통해 생성된 가상의 오버레이 네트워크입니다. 각 오버레이 네트워크는 호스트 시스템에서 같은 VNI를 가진 인터페이스 간의 통신이 가능하도록 구성됩니다. 

 

반면 Public 네트워크의 경우, 실제 외부 네트워크와 직접 연결된 네트워크 입니다. 호스트 시스템에서 외부 네트워크와 연결하기 위한 인터페이스를 생성하는데, 이 인터페이스는 일반적으로 가상 라우터가 가지고 있으며, 호스트 네트워크 대역의 ip를 직접 할당받습니다. 이러한 Public 네트워크 역시 Vxlan을 통해 구성될 수 있으나, 본 예시에서는 Flat 네트워크 타입으로 구성해 보도록 하겠습니다. Flat 네트워크는 VxLAN이나 VLAN 과 달리, 별도의 태깅 없이 물리 네트워크(호스트 네트워크)에 직접 매핑되는 네트워크 입니다. 

 

결과적으로 라우터가 NAT 기능을 제공함으로써 물리 네트워크와 가상의 테넌트 네트워크 간의 연결을 지원합니다.

 

이러한 기본 내용을 바탕으로 가상의 테넌트 네트워크 구조를 살펴보면 아래 그림과 같습니다.

 

External_Net: Public Network, Internal_Net: Private Network

 

위의 네트워크 구조는 가상의 테넌트 네트워크에 속한 인스턴스(VM1)의 트래픽이 Public 네트워크를 거쳐 최종적으로 인터넷으로 향하기 까지의 전체적인 네트워크 구성을 표현한 것입니다. 가상의 Router1을 거쳐 VM1의 Private 네트워크가 외부 IP로 NAT 되어 인터넷으로 향합니다.

 

이러한 네트워크를 구축하기 위해 아래 과정을 진행합니다.

 

 

1. 컨트롤러 노드

 

 

ml2 에이전트를 설정합니다.

 

[root@dlp ~(keystone)]# vi /etc/neutron/plugins/ml2/ml2_conf.ini

# ml2 섹션에서 아래 내용 추가합니다.
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan

# 아래 두 개의 섹션을 추가합니다.
[ml2_type_flat]
flat_networks = physnet1

[ml2_type_vxlan]
vni_ranges = 1:1000

 

 

 서비스를 재시작 합니다.

 

[root@dlp ~(keystone)]# systemctl restart neutron-server

 

 

2. 네트워크 노드 

 

 

네트워크 노드에서 오픈스택의 public 과 private 네트워크를 구성하기 위한 인터페이스 설정 작업을 진행합니다. 네트워크 노드에서는 Private 네트워크의 vm 간 통신 및 라우팅, dhcp 기능 등, 실제 온프레미스 환경에서 필요한 대부분의 네트워크 관련 기능을 수행합니다.

 

특히 중요한 부분은 본 네트워크 구성에서는 VM트래픽이 외부 네트워크(혹은 인터넷)로 나가고자 하는 경우, 관리망 인터페이스 (eno16777736)를 타고 나간다는 점입니다. 앞서 시스템 구성 포스트에서 언급한 것과 같이 네트워크 노드에서 외부와 연결된 인터페이스는 192.168.0.0/24 대역의 eno16777736 입니다. 따라서 VM의 인터넷 접근 및 외부 서버 접근을 위해서 해당 인터페이스가 사용되어야 합니다.

 

빨간색 화살표: VM의 트래픽 흐름. VM이 인터넷 접속을 시도하는 경우.

 

이러한 구성을 위해 위 그림과 같이 eno16777736과 내부 VM 트래픽을 전달받을 인터페이스(위 예시에서 phy-br-eth1)를 묶어주기 위한 브릿지가 필요합니다. 그 브릿지가 바로 위 그림에서 br-eth1 입니다. 따라서 아래와 같이 브릿지를 생성하고 물리 인터페이스(eno1677736)를 바인딩 합니다.

 

[root@Network ~]# ovs-vsctl add-br br-eth1 
[root@Network ~]# ovs-vsctl add-port br-eth1 eno16777736 

 


다음으로 아래와 같이 ml2 에이전트를 추가 설정합니다.

 

[root@Network ~]# vi /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan

# 아래 섹션들을 추가해 줍니다.
[ml2_type_flat]
flat_networks = physnet1

[ml2_type_vxlan]
vni_ranges = 1:1000

 

다음으로 openvswitch 에이전트 관련 설정을 합니다.

 

[root@Network ~]# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini

# 아래 항목을 파일 마지막에 추가해 줍니다.
[agent]
tunnel_types = vxlan
prevent_arp_spoofing = True

[ovs]
# ip는 현재 노드인 네트워크 노드의 ip로 지정합니다.
local_ip = 10.0.0.27
bridge_mappings = physnet1:br-eth1

 

네트워크 관련 서비스들을 재시작 합니다.

 

[root@Network ~]# for service in dhcp-agent l3-agent metadata-agent openvswitch-agent; do
systemctl restart neutron-$service
done

 

 

방화벽을 사용중이면 중단합니다.

 

[root@Network ~]# systemctl stop firewalld 
[root@Network ~]# systemctl disable firewalld 

 

 

3. 컴퓨트 노드

 

 

컴퓨트 노드에서도 마찬가지로 앞서 네트워크 노드에서의 설정과 비슷한 과정을 거칩니다. 다만 별도의 ovs 브릿지를 생성하지 않습니다.

 

우선 ml2 에이전트 설정을 진행합니다.

 

[root@Compute0 ~]# vi /etc/neutron/plugins/ml2/ml2_conf.ini

# 파일 마지막에 아래 내용을 설정하빈다.
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan

# 아래 섹션들을 추가합니다.
[ml2_type_flat]
flat_networks = physnet1

[ml2_type_vxlan]
vni_ranges = 1:1000

 

openvswitch 에이전트 관련 설정을 진행합니다.

 

[root@Compute0 ~]# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini

# 아래 섹션들을 문서 하단에 추가합니다.
[agent]
tunnel_types = vxlan
prevent_arp_spoofing = True

[ovs]
# 현재 노드인 컴퓨트 노드의 ip로 수정합니다.
local_ip = 10.0.0.25

 

 openvswitch 서비스를 재시작 합니다.

 

[root@Compute0 ~]# systemctl restart neutron-openvswitch-agent

 

 

방화벽이 동작 중이면 중단합니다.

 

[root@Compute0 ~]# systemctl stop firewalld 
[root@Compute0 ~]# systemctl disable firewalld 

 

 

여기까지 테넌트 네트워크 생성에 필요한 기본 환경 구성을 마쳤습니다. 다음으로 가상 네트워크가 정상적으로 생성되는지 확인하면 되지만, 이는 이후 오픈스택 대시보드 구성까지 마치고 VM 생성과 함께 진행하도록 하겠습니다.

 

다음 포스팅에서는 대시보드 서비스를 제공하는 horizon 서비스를 구축하는 과정에 대해 다루도록 하겠습니다.

 

TAGS.

Comments