2014年11月21日金曜日

OpenStack Juno ML2 PluginでDVRが正常に動いた

以前のエントリーでDVRが動かないと書いたが、動いたので報告です。
原因はml2_conf.iniの [agent] セクションの設定を書いていなかったのが原因。
 というわけで、再度設定方法のまとめ。
 ※ソースまで読んで確認してないので、無駄な設定が入っているかも知れません。

OpenStackの通常のインストールが終わってから、DVRの設定を行う。
NeutronもNeutron Server、Network Node、Nova Computeへ適切にインストールを行う。
Nova ComputeでもL3エージェントが動くことになるので、Networkノード同様ex-brの設定とL3エージェントをインストールしておく。

JunoからDVR(Distributed Virual Router)が実装されたことで、L3エージェントのモードが追加になっている。
今までのnetworkノードのみを使う実装は"legacy"モードになり、DVRのモードは"dvr-snat"と"dvr"の二つがある。
DVRを使っても、DHCPとSNATはnetworkノードで行う。Floating IPはNova Computeで行う。
この、SNATを行うノードは"dvr-snat"のモードとなり、Nova Computeは"dvr"のモードで動く。
 
コンフィグが必要なのは以下の3つのファイル
neutron.conf
l3_agent.ini
ml2_conf.ini

neutron.confの設定
#router_distributed = false を router_distributed = true に変更する。
Neutronサーバのコンフィグ例
[DEFAULT]
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_password = password
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller:8774/v2
nova_admin_username = nova
router_distributed = True 
lock_path = $state_path/lock
core_plugin = ml2
nova_admin_tenant_id = f5c9d49a31ba4b3c900e56c656ecd146
nova_admin_password = password
nova_admin_auth_url = http://controller:35357/v2.0
rabbit_port=5672
[matchmaker_redis]
[matchmaker_ring]
[quotas]
[agent]
root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
[keystone_authtoken]
auth_uri = http://controller:5000
uth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service 
admin_user = neutron
admin_password = password
[database]
connection = mysql://neutron:password@10.0.0.71/neutron
[service_providers]
service_provider=LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
service_provider=VPN:openswan:neutron.services.vpn.service_drivers.ipsec.IPsecVPNDriver:default

Networkノード,Nova computeのコンフィグ例
[DEFAULT]
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_password = password
router_distributed = True 
lock_path = $state_path/lock
core_plugin = ml2
dvr_base_mac = fa:16:3f:00:00:00
rabbit_port=5672
[matchmaker_redis]
[matchmaker_ring]
[quotas]
[agent]
root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = neutron
admin_password = password
[database]
connection = mysql://neutron:password@10.0.0.71/neutron 
[service_providers]
service_provider=LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
service_provider=VPN:openswan:neutron.services.vpn.service_drivers.ipsec.IPsecVPNDriver:default
※keystoneとdatabaseの設定はいらないかも?


ml2_conf.iniの設定
tenant_network_typesにl2populationを追加
NetworkノードとNova Computeは[ovs][agent]セクションに以下の2つを設定[ovs]
tunnel_type = vxlan
enable_vxlan = True
vni_ranges = 1:1000
enable_tunneling = true
l2_population = True
enable_distributed_routing = True
[agent]
l2_population = True
enable_distributed_routing = true

Neutronサーバのコンフィグ例
[ml2]
type_drivers = flat,vlan,vxlan,gre
tenant_network_types = vxlan
mechanism_drivers = openvswitch,l2population
[ml2_type_flat]
[ml2_type_vlan]
[ml2_type_gre]
[ml2_type_vxlan]
vni_ranges = 1:1000
vxlan_group = 239.1.1.1
[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True

Networkノード,Nova computeのコンフィグ例
[ml2]
type_drivers = flat,vxlan
tenant_network_types = vxlan
mechanism_drivers = openvswitch,l2population
enable_distributed_routing = true
[ml2_type_flat]
[ml2_type_vlan]
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[ml2_type_vxlan]
vni_ranges = 1:1000
vxlan_group = 239.1.1.1
[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True
[ovs]
local_ip = 10.0.1.72
tunnel_type = vxlan
enable_vxlan = True
vni_ranges = 1:1000
enable_tunneling = true
l2_population = True
enable_distributed_routing = True
tunnel_bridge = br-tun
ent_peer_patch_port = patch-tun
tun_peer_patch_port = patch-int
tenant_network_type = vxlan
[agent]
root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf
tunnel_types = vxlan
vxlan_udp_port = 4789
l2_population = True
enable_distributed_routing = true

l3_agent.iniの設定
コンフィグ自体はシンプルでl3_agent.iniの"agent_mode"を変更するだけ。
Networkノードは"dvr-snat"に設定し、Nova Computeは"dvr"に設定する。

Networkノードのコンフィグ例
[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True
agent_mode = dvr_snat

Nova computeのコンフィグ例
[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True
agent_mode = dvr 

NetworkノードとNova Computeのインターフェイスの設定は以下のようにした。
外部接続用ネットワークbr-ex 10.0.0.0/24、VXLAN用ネットワーク10.0.1.0/24

Networkノード
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual 
        up ip address add 0/0 dev $IFACE
        up ip link set $IFACE up
        down ip link set $IFACE down
auto eth1
iface eth1 inet static         
        address 10.0.1.72      
        netmask 255.255.255.0  
        network 10.0.1.0 
auto br-ex
iface br-ex inet static
        address 10.0.0.72
        netmask 255.255.255.0
        network 10.0.0.0
        broadcast 10.0.0.255
        gateway 10.0.0.1

Nova computeノード
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual 
        up ip address add 0/0 dev $IFACE
        up ip link set $IFACE up
        down ip link set $IFACE down
auto eth1
iface eth1 inet static         
        address 10.0.1.73      
        netmask 255.255.255.0  
        network 10.0.1.0 
auto br-ex
iface br-ex inet static
        address 10.0.0.73
        netmask 255.255.255.0
        network 10.0.0.0
        broadcast 10.0.0.255
        gateway 10.0.0.1

あとはいつもどおり、各プロセスを再起動して設定を反映させる。 設定反映後、NeutronサーバにOpen vSwitch Agentの情報を確認すると、l2_populationとenable_distributed_routingがTrueになっているのが確認できる。
root@juno1:~# neutron agent-show cf370cb4-5c5c-4f62-8031-47d193eccaab
+---------------------+-------------------------------------------+
| Field               | Value                                     |
+---------------------+-------------------------------------------+
| admin_state_up      | True                                      |
| agent_type          | Open vSwitch agent                        |
| alive               | True                                      |
| binary              | neutron-openvswitch-agent                 |
| configurations      | {                                         |
|                     |      "arp_responder_enabled": false,      |
|                     |      "tunneling_ip": "10.0.1.73",         |
|                     |      "devices": 5,                        |
|                     |      "l2_population": true,               |
|                     |      "tunnel_types": [                    |
|                     |           "vxlan"                         |
|                     |      ],                                   |
|                     |      "enable_distributed_routing": true,  |
|                     |      "bridge_mappings": {}                |
|                     | }                                         |
| created_at          | 2014-11-18 18:29:55                       |
| description         |                                           |
| heartbeat_timestamp | 2014-11-19 19:49:06                       |
| host                | juno3                                     |
| id                  | cf370cb4-5c5c-4f62-8031-47d193eccaab      |
| started_at          | 2014-11-19 17:22:12                       |
| topic               | N/A                                       |
+---------------------+-------------------------------------------+

後は通常通り仮想マシンを作成すると、DVRの機能を使って通信できる。 Floating IPを設定するとNova ComputeでNATするため、Nova Computeのex-brは外部ネットワークに通信できるようにしておくこと。

0 件のコメント:

コメントを投稿