이 절에서는 외부 네트워크를 나타내는 가상 네트워크를 만드는 방법을 보여줍니다. 이 가상 네트워크에서 DHCP는 사용되지 않습니다. 대신 유동 IP 주소가 만들어집니다. 이러한 유동 IP 주소는 특정 테넌트에 지정되며 해당 테넌트에 속하는 사용자용으로 Nova VM 인스턴스에 지정될 수 있습니다. Neutron L3 에이전트는 Nova 인스턴스에 지정된 주소와 유동 IP 주소 간에 자동으로 일대일 NAT 매핑을 만듭니다.
OpenStack Neutron의 Oracle Solaris 11.2 구현은 개인 네트워크 배치 모델과 함께 공급자 라우터를 지원합니다. 이 배치 모델에서 각 테넌트에는 하나 이상의 개인 네트워크가 포함될 수 있으며 모든 테넌트 네트워크는 동일한 라우터를 공유합니다. 데이터 관리자가 라우터를 만들고 소유하며 관리합니다. 테넌트의 네트워크 토폴로지 뷰에는 라우터가 표시되지 않습니다. 라우터가 한 개뿐이므로 테넌트 네트워크는 겹치는 IP 주소를 사용할 수 없습니다. 관리자는 테넌트 대신 개인 네트워크를 만듭니다.
기본적으로 이 모델의 라우터는 동일한 테넌트에 속하는 개인 네트워크 간의 경로 지정을 금지합니다. 즉, 특정 개인 네트워크의 VM 인스턴스는 다른 개인 네트워크의 VM 인스턴스와 통신할 수 없습니다. 해당하는 모든 인스턴스가 동일한 테넌트에 속하는 경우에도 마찬가지입니다. 이 동작을 변경하려면 /etc/neutron/l3_agent.ini 구성 파일에서 allow_forwarding_between_networks를 True로 설정하고 neutron-l3-agent SMF 서비스를 다시 시작하십시오.
이 모델의 라우터는 테넌트 VM 인스턴스 외부에 대한 연결을 가능하게 해줍니다. 해당 라우터는 인터페이스에서 라우터를 외부 네트워크에 연결하는 양방향 NAT를 수행합니다. 테넌트는 필요에 따라 또는 유동 IP 쿼터에 의해 허용되는 한도에 따라 여러 개의 유동 IP(공용 IP)를 만들어 외부 연결에 필요한 VM 인스턴스와 연결합니다.
다음 그림은 Oracle Solaris 11.2 Neutron 배치 모델을 보여줍니다. 그림에 뒤이어 그림에 대한 설명이 나열됩니다.
그림 9 개인 네트워크 모델을 사용하는 공급자 라우터
앞선 그림에 표시되는 모델에서 각 테넌트에는 2개의 내부 네트워크와 2개의 VM 인스턴스가 있습니다.
서브넷이 192.168.100.0/24이며 게이트웨이가 192.168.100.1인 HR 네트워크
서브넷이 192.168.101.0/24이며 게이트웨이가 192.168.101.1인 ENG 네트워크
HR에 연결되며 고정 IP 주소가 192.168.100.3인 VM1
ENG에 연결되며 고정 IP 주소가 192.168.101.3인 VM2
서브넷이 192.168.102.0/24이며 게이트웨이가 192.168.102.1인 IT 네트워크
서브넷이 192.168.103.0/24이며 게이트웨이가 192.168.103.1인 ACCT 네트워크
IT에 연결되며 고정 IP 주소가 192.168.102.3인 VM3
ACCT에 연결되며 고정 IP 주소가 192.168.103.3인 VM4
양방향 NAT 테이블은 다음 표와 같이 구성됩니다.
|
모든 게이트웨이 인터페이스는 neutron-l3-agent SMF 서비스가 실행되고 있는 노드에서 인스턴스화됩니다. 클라우드에 여러 개의 Neutron 인스턴스가 포함될 수 있지만 클라우드당 하나의 neutron-l3-agent만 필요합니다.
외부 네트워크는 외부에서 연결할 수 있는 서브넷 10.134.13.0/24와 연결된 공급자 네트워크입니다. 테넌트는 이 네트워크에서 유동 IP 주소를 만들어 해당 VM 인스턴스와 연결합니다. VM1과 VM2에는 각각 유동 IP 10.134.13.40과 10.134.13.9가 연결됩니다. 해당 IP 주소를 통해 외부에서 VM1 및 VM2에 연결할 수 있습니다.
다음 다이어그램은 해당 테넌트 리소스가 네트워크 노드 및 2개의 Compute 노드에서 구성되는 방법을 보여줍니다. 그림에 뒤이어 그림에 표시된 일부 기능에 대한 설명이 나열됩니다.
그림 10 Neutron L3 에이전트 구성
가상 네트워크 인터페이스입니다.
L3 에이전트가 양방향 NAT가 수행되는 외부("e") 네트워크에서 VNIC를 만들었습니다.
L3 에이전트가 기본 게이트웨이 IP 주소를 사용하는 내부("i") 네트워크에서 VNIC를 만들었습니다.
다음 목록은 이 구성 예에서 IP 주소가 사용될 방법을 보여줍니다.
기본 게이트웨이
테넌트에 OpenStack API(예: Nova, Cinder, Glance)를 노출시키기 위해 별도로 설정된 IP 주소
테넌트 VM 인스턴스에 대한 유동 IP 주소
이 절차에서는 service 테넌트를 사용하여 데이터 센터의 모든 테넌트에 사용될 라우터, 외부 네트워크 및 외부 서브넷을 만드는 방법을 보여줍니다.
데이터 센터 관리자가 이 절차를 수행합니다. OpenStack 대시보드에서는 한 번에 하나씩 테넌트의 리소스를 관리할 수 있기 때문에 사용자는 명령줄을 사용하여 공유된 단일 라우터를 구성하고 여러 테넌트의 네트워크 및 서브넷을 연결해야 합니다.
다음 단계를 수행할 때는 그림 10을 참조하십시오.
시작하기 전에
이 절차를 수행하기 전에 내부 네트워크 구성을 완료해야 합니다.
network# svcadm enable ipfilter
network# ipadm set-prop -p forwarding=on ipv4 network# ipadm set-prop -p forwarding=on ipv6
다음 예제에서 VLAN ID 및 범위 값은 Step 9에서 완성한 EVS 구성을 기반으로 합니다.
network# evsadm show-controlprop -p vlan-range,l2-type PROPERTY PERM VALUE DEFAULT HOST l2-type rw vlan vlan -- vlan-range rw 13,1000-2000 -- --
network# keystone tenant-list
공급자 라우터가 service 테넌트에 OpenStack neutron 사용자로 만들어집니다.
새 라우터의 UUID(id)를 기록해 둡니다. 이 UUID는 다음 단계에서 사용합니다.
network# export OS_USERNAME=neutron network# export OS_PASSWORD=neutron-password network# export OS_TENANT_NAME=service network# export OS_AUTH_URL=http://controller-name:5000/v2.0 network# neutron router-create provider_router Created a new router: +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | admin_state_up | True | | external_gateway_info | | | id | 181543df-40d1-4514-ea77-fddd78c389ff | | name | provider_router | | status | ACTIVE | | tenant_id | f164220cb02465db929ce520869895fa | +-----------------------+--------------------------------------+
이전 단계의 라우터 UUID(id)를 사용하여 /etc/neutron/l3_agent.ini 파일에서 router_id 값을 업데이트합니다.
router_id = 181543df-40d1-4514-ea77-fddd78c389ff
network# svcadm enable neutron-l3-agent
가상 네트워크가 service 테넌트에 OpenStack neutron 사용자로 만들어집니다.
network# neutron net-create --provider:network_type=vlan \ --provider:segmentation_id=13 --router:external=true external_network Created a new network: +--------------------------+--------------------------------------+ | Field | Value | +--------------------------+--------------------------------------+ | admin_state_up | True | | id | f67f0d72-0ddf-11e4-9d95-e1f29f417e2f | | name | external_network | | provider:network_type | vlan | | provider:segmentation_id | 13 | | router:external | True | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | f164220cb02465db929ce520869895fa | +--------------------------+--------------------------------------+
외부 네트워크에 대해 연결된 서브넷 네트워크를 만들어 DHCP가 사용 안함으로 설정되었으며 서브넷이 외부 경로 지정에 사용될 것임을 지정합니다. 유동 IP 주소가 지정될 위치에서 경로 지정이 가능한 IP 서브넷을 지정합니다. 이 예에서는 서브넷이 VLAN ID 13과 연관됩니다.
network# neutron subnet-create --enable-dhcp=False \ --allocation-pool start=10.134.13.8,end=10.134.13.254 \ --name external_subnet external_network 10.134.13.0/24 Created a new subnet: +------------------+--------------------------------------------------+ | Field | Value | +------------------+--------------------------------------------------+ | allocation_pools | {"start": "10.134.13.8", "end": "10.134.13.254"} | | cidr | 10.134.13.0/24 | | dns_nameservers | | | enable_dhcp | False | | gateway_ip | 10.134.13.1 | | host_routes | | | id | 5d9c8958-0de0-11e4-9d96-e1f29f417e2f | | ip_version | 4 | | name | external_subnet | | network_id | f67f0d72-0ddf-11e4-9d95-e1f29f417e2f | | tenant_id | f164220cb02465db929ce520869895fa | +------------------+--------------------------------------------------+
다음 명령에서 첫번째 UUID는 provider_router UUID이며 두번째 UUID는 external_network UUID입니다.
network# neutron router-gateway-set \ 181543df-40d1-4514-ea77-fddd78c389ff \ f67f0d72-0ddf-11e4-9d95-e1f29f417e2f Set gateway for router 181543df-40d1-4514-ea77-fddd78c389ff network# neutron router-list -c name -c external_gateway_info +-----------------+--------------------------------------------------------+ | name | external_gateway_info | +-----------------+--------------------------------------------------------+ | provider_router | {"network_id": "f67f0d72-0ddf-11e4-9d95-e1f29f417e2f"} | +-----------------+--------------------------------------------------------+
neutron net-list 명령으로 표시되는 네트워크가 이전에 구성된 것입니다.
network# keystone tenant-list +----------------------------------+---------+---------+ | id | name | enabled | +----------------------------------+---------+---------+ | 511d4cb9ef6c40beadc3a664c20dc354 | demo | True | | f164220cb02465db929ce520869895fa | service | True | +----------------------------------+---------+---------+ network# neutron net-list --tenant-id=511d4cb9ef6c40beadc3a664c20dc354 +-------------------------------+------+------------------------------+ | id | name | subnets | +-------------------------------+------+------------------------------+ | c0c15e0a-0def-11e4-9d9f- | HR | c0c53066-0def-11e4-9da0- | | e1f29f417e2f | | e1f29f417e2f 192.168.100.0/24| | ce64b430-0def-11e4-9da2- | ENG | ce693ac8-0def-11e4-9da3- | | e1f29f417e2f | | e1f29f417e2f 192.168.101.0/24| +-------------------------------+------+------------------------------+
다음 명령에서 첫번째 UUID는 provider_router UUID이며 두번째 UUID는 HR 서브넷 UUID입니다.
network# neutron router-interface-add \ 181543df-40d1-4514-ea77-fddd78c389ff \ c0c53066-0def-11e4-9da0-e1f29f417e2f (HR subnet UUID) Added interface 7843841e-0e08-11e4-9da5-e1f29f417e2f to router 181543df-40d1-4514-ea77-fddd78c389ff.
다음 명령에서 첫번째 UUID는 provider_router UUID이며 두번째 UUID는 ENG 서브넷 UUID입니다.
network# neutron router-interface-add \ 181543df-40d1-4514-ea77-fddd78c389ff \ ce693ac8-0def-11e4-9da3-e1f29f417e2f Added interface 89289b8e-0e08-11e4-9da6-e1f29f417e2f to router 181543df-40d1-4514-ea77-fddd78c389ff.
참조
이 절차는 OpenStack Horizon 대시보드를 사용하는 테넌트 사용자가 수행합니다.
테넌트 사용자의 자격 증명을 사용하여 OpenStack 대시보드에 액세스하는 방법에 설명된 대로 로그인합니다.
Floating IPs(유동 IP) 탭은 유동 IP 주소 10.134.13.9가 할당되었음을 보여줍니다.
Project(프로젝트) -> Instances(인스턴스) 창은 유동 IP 주소가 VM 인스턴스와 연결되었음을 보여줍니다.
VM 인스턴스를 구동 중인 동안 Keypair(SSH 공개 키)를 선택한 경우 VM 인스턴스의 root 사용자에 대한 authorized_keys 파일에 해당 SSH 키가 추가됩니다.
global# ssh root@10.134.13.9 Last login: Fri Jul 18 00:37:39 2014 from 10.132.146.13 Oracle Corporation SunOS 5.11 11.2 June 2014 root@host-192-168-101-3:~# uname -a SunOS host-192-168-101-3 5.11 11.2 i86pc i386 i86pc root@host-192-168-101-3:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 2 instance-00000001 running / solaris excl root@host-192-168-101-3:~# ipadm NAME CLASS/TYPE STATE UNDER ADDR lo0 loopback ok -- -- lo0/v4 static ok -- 127.0.0.1/8 lo0/v6 static ok -- ::1/128 net0 ip ok -- -- net0/dhcp inherited ok -- 192.168.101.3/24
IP 필터 명령(예: ipf, ippool 및 ipnat) 및 네트워킹 명령(예: dladm 및 ipadm)을 사용하여 neturon-l3-agent로 완료된 구성을 관찰하고 문제를 해결할 수 있습니다.
network# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VIDS l3i7843841e_0_0 net1 1000 2:8:20:42:ed:22 fixed 200 l3i89289b8e_0_0 net1 1000 2:8:20:7d:87:12 fixed 201 l3ed527f842_0_0 net0 100 2:8:20:9:98:3e fixed 0
network# ipadm NAME CLASS/TYPE STATE UNDER ADDR l3ed527f842_0_0 ip ok -- -- l3ed527f842_0_0/v4 static ok -- 10.134.13.8/24 l3ed527f842_0_0/v4a static ok -- 10.134.13.9/32 l3i7843841e_0_0 ip ok -- -- l3i7843841e_0_0/v4 static ok -- 192.168.100.1/24 l3i89289b8e_0_0 ip ok -- -- l3i89289b8e_0_0/v4 static ok -- 192.168.101.1/24
network# ipfstat -io empty list for ipfilter(out) block in quick on l3i7843841e_0_0 from 192.168.100.0/24 to pool/4386082 block in quick on l3i89289b8e_0_0 from 192.168.101.0/24 to pool/8226578 network# ippool -l table role = ipf type = tree number = 8226578 { 192.168.100.0/24; }; table role = ipf type = tree number = 4386082 { 192.168.101.0/24; };
network# ipnat -l List of active MAP/Redirect filters: bimap l3ed527f842_0_0 192.168.101.3/32 -> 10.134.13.9/32 List of active sessions: BIMAP 192.168.101.3 22 <- -> 10.134.13.9 22 [10.132.146.13 36405]