Oracle® Solaris에서 OpenStack(Havana) 설치 및 구성

인쇄 보기 종료

업데이트 날짜: 2016년 5월
 
 

Neutron L3 에이전트 구성

이 절에서는 외부 네트워크를 나타내는 가상 네트워크를 만드는 방법을 보여줍니다. 이 가상 네트워크에서 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_networksTrue로 설정하고 neutron-l3-agent SMF 서비스를 다시 시작하십시오.

이 모델의 라우터는 테넌트 VM 인스턴스 외부에 대한 연결을 가능하게 해줍니다. 해당 라우터는 인터페이스에서 라우터를 외부 네트워크에 연결하는 양방향 NAT를 수행합니다. 테넌트는 필요에 따라 또는 유동 IP 쿼터에 의해 허용되는 한도에 따라 여러 개의 유동 IP(공용 IP)를 만들어 외부 연결에 필요한 VM 인스턴스와 연결합니다.

다음 그림은 Oracle Solaris 11.2 Neutron 배치 모델을 보여줍니다. 그림에 뒤이어 그림에 대한 설명이 나열됩니다.

그림 9  개인 네트워크 모델을 사용하는 공급자 라우터

image:각각 2개의 내부 네트워크와 2개의 VM 인스턴스가 있는 테넌트 2개

앞선 그림에 표시되는 모델에서 각 테넌트에는 2개의 내부 네트워크와 2개의 VM 인스턴스가 있습니다.

Tenant A
  • 서브넷이 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

Tenant B
  • 서브넷이 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 테이블은 다음 표와 같이 구성됩니다.

내부 IP
유동 IP
192.168.100.3
10.134.13.40
192.168.101.3
10.134.13.9

모든 게이트웨이 인터페이스는 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 에이전트 구성

image:네트워크 및 Compute 노드에서 구성된 내부 네트워크와 VM 인스턴스
VNIC

가상 네트워크 인터페이스입니다.

l3e...

L3 에이전트가 양방향 NAT가 수행되는 외부("e") 네트워크에서 VNIC를 만들었습니다.

l3i...

L3 에이전트가 기본 게이트웨이 IP 주소를 사용하는 내부("i") 네트워크에서 VNIC를 만들었습니다.

다음 목록은 이 구성 예에서 IP 주소가 사용될 방법을 보여줍니다.

10.134.13.1

기본 게이트웨이

10.134.13.2 - 10.134.13.7

테넌트에 OpenStack API(예: Nova, Cinder, Glance)를 노출시키기 위해 별도로 설정된 IP 주소

10.134.13.9 - 10.134.13.254

테넌트 VM 인스턴스에 대한 유동 IP 주소

Neutron L3 에이전트를 구성하는 방법

이 절차에서는 service 테넌트를 사용하여 데이터 센터의 모든 테넌트에 사용될 라우터, 외부 네트워크 및 외부 서브넷을 만드는 방법을 보여줍니다.

데이터 센터 관리자가 이 절차를 수행합니다. OpenStack 대시보드에서는 한 번에 하나씩 테넌트의 리소스를 관리할 수 있기 때문에 사용자는 명령줄을 사용하여 공유된 단일 라우터를 구성하고 여러 테넌트의 네트워크 및 서브넷을 연결해야 합니다.

다음 단계를 수행할 때는 그림 10을 참조하십시오.

시작하기 전에

이 절차를 수행하기 전에 내부 네트워크 구성을 완료해야 합니다.

  1. Solaris IP 필터 기능을 사용으로 설정합니다.
    network# svcadm enable ipfilter
  2. 전체 호스트에서 IP 전달을 사용으로 설정합니다.
    network# ipadm set-prop -p forwarding=on ipv4
    network# ipadm set-prop -p forwarding=on ipv6
  3. EVS가 올바르게 구성되고 외부 네트워크에 필요한 VLAN ID를 사용하는지 확인합니다.

    다음 예제에서 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  --         --
    
  4. service 테넌트가 있는지 확인합니다.
    network# keystone tenant-list
  5. 공급자 라우터를 만듭니다.

    공급자 라우터가 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     |
    +-----------------------+--------------------------------------+
  6. L3 에이전트 구성 파일을 업데이트합니다.

    이전 단계의 라우터 UUID(id)를 사용하여 /etc/neutron/l3_agent.ini 파일에서 router_id 값을 업데이트합니다.

    router_id = 181543df-40d1-4514-ea77-fddd78c389ff  
  7. neutron-l3-agent SMF 서비스를 사용으로 설정합니다.
    network# svcadm enable neutron-l3-agent
  8. 외부 네트워크를 만듭니다.

    가상 네트워크가 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     |
    +--------------------------+--------------------------------------+
  9. 서브넷을 외부 네트워크와 연결합니다.

    외부 네트워크에 대해 연결된 서브넷 네트워크를 만들어 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                 |
    +------------------+--------------------------------------------------+
  10. 라우터에 외부 네트워크를 추가합니다.

    다음 명령에서 첫번째 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"} |
    +-----------------+--------------------------------------------------------+
  11. 라우터에 테넌트의 개인 네트워크를 추가합니다.

    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.

참조

테넌트 사용자로 유동 IP 주소를 만들고 연관시키는 방법

이 절차는 OpenStack Horizon 대시보드를 사용하는 테넌트 사용자가 수행합니다.

  1. OpenStack Dashboard(OpenStack 대시보드)에 로그인합니다.

    테넌트 사용자의 자격 증명을 사용하여 OpenStack 대시보드에 액세스하는 방법에 설명된 대로 로그인합니다.

  2. Project(프로젝트) -> Access & Security(접근 & 보안) -> Floating IPs(유동 IP)를 선택합니다.
  3. external_network를 선택합니다.
  4. Allocate IP(IP 할당) 버튼을 누릅니다.

    Floating IPs(유동 IP) 탭은 유동 IP 주소 10.134.13.9가 할당되었음을 보여줍니다.

  5. Associate(연결) 버튼을 누릅니다.
  6. 풀다운 메뉴에서 VM 인스턴스의 포트를 선택합니다.

    Project(프로젝트) -> Instances(인스턴스) 창은 유동 IP 주소가 VM 인스턴스와 연결되었음을 보여줍니다.

    VM 인스턴스를 구동 중인 동안 Keypair(SSH 공개 키)를 선택한 경우 VM 인스턴스의 root 사용자에 대한 authorized_keys 파일에 해당 SSH 키가 추가됩니다.

  7. 실행 중인 VM 인스턴스에 로그인합니다.
    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

L3 에이전트 구성을 관찰하는 방법

IP 필터 명령(예: ipf, ippoolipnat) 및 네트워킹 명령(예: dladmipadm)을 사용하여 neturon-l3-agent로 완료된 구성을 관찰하고 문제를 해결할 수 있습니다.

  1. neutron-l3-agent로 만들어진 VNIC를 표시합니다.
    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
  2. neutron-l3-agent로 만들어진 IP 주소를 표시합니다.
    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
  3. IP 필터 규칙을 표시합니다.
    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; };
  4. IP NAT 규칙을 표시합니다.
    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]