openvswitch on EC2

タイトルと話がズレますが、まずは、宣伝から


JPOUG> SET EVNETS 20140907


IIJさんの新しいオフィスが会場となります。みなさま奮ってご参加ください。

詳細は、こちら
JPOUG> SET EVNETS 20140907



さて、本題に入ります。


openvswtich をEC2で使う方法がどこ探しても見つからなかったので、真面目に調べてみました。
一応使えるところ(パフォーマンスは別として)までいったので軽くメモします。

ポイントは
・ブリッジのMACをeh0と同じにする
・ブリッジを固定IPにする。
です。


なお、Amazon Linuxでは動きません。
また、eth0にブリッジしているので、手順を誤ると接続不能になりますので、試す際には十分注意してください


環境
AMI ami-4c85ee7c(CentOS 6.5 HVM SRIOV) ・・・・ @understeer さんの公開しているCent OS 6.5(HVM) oregonリージョン(東京だったら ami-7fa6fe7e)
openvswtich 1.10(RDOから入るもの)
openvswtich間はgreで接続
tap0/tap1はvlanで分離

構成

ホスト名 実IP tap0 tap1
ホストA 172.31.10.220 192.168.0.11 192.168.1.11
ホストB 172.31.10.221 192.168.0.12 192.168.1.12
ホストC 172.31.10.222 192.168.0.13 192.168.1.13


インストール(各ホスト共通)

yum -y install https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm
yum -y install openvswitch
service openvswitch start
chkconfig openvswitch on

ブリッジの設定(各ホスト共通)

LANG=C
#NETMASKの取得
MyMASK=`ifconfig eth0 | grep 'inet addr' | awk -F '[: ]' '{print $19}'`
#eth0 IPの取得
MyIP=`ifconfig eth0 | grep 'inet addr' | awk -F '[: ]' '{print $13}'`
#eth0のMACアドレスの取得
MyHWADDR=`ifconfig eth0 | grep 'Link encap' | awk '{print $5}'`
ovs-vsctl add-br br0

cat > /etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
DEVICE=br0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=$MyIP
NETMASK=$MyMASK
EOF

sed -i 's/BOOTPROTO/#BOOTPROTO/'  /etc/sysconfig/network-scripts/ifcfg-eth0
echo "MTU=1546" >> /etc/sysconfig/network-scripts/ifcfg-eth0

ovs-vsctl set bridge br0 other-config:hwaddr=$MyHWADDR
ovs-vsctl add-port br0 eth0 && service network restart

最後のnetwork restartで一瞬接続が切れます。

openvswtich間接続(ホストA)

ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=172.31.10.221
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre options:remote_ip=172.31.10.222
ovs-vsctl set bridge br0 stp_enable=true

最後のovs-vsctl set bridge br0 stp_enable=trueで応答が10秒ほど途絶えます。

openvswtich間接続(ホストB)

ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=172.31.10.220
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre options:remote_ip=172.31.10.222
ovs-vsctl set bridge br0 stp_enable=true

最後のovs-vsctl set bridge br0 stp_enable=trueで応答が10秒ほど途絶えます。

openvswtich間接続(ホストC)

ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=172.31.10.220
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre options:remote_ip=172.31.10.221
ovs-vsctl set bridge br0 stp_enable=true

最後のovs-vsctl set bridge br0 stp_enable=trueで応答が10秒ほど途絶えます。

tap設定(ホストA)

cat > /etc/sysconfig/network-scripts/ifcfg-tap0 <<EOF
DEVICE=tap0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.11
NETMASK=255.255.255.0
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-tap1 <<EOF
DEVICE=tap1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.11
NETMASK=255.255.255.0
EOF

ovs-vsctl add-port br0 tap0 tag=1 -- set Interface tap0 type=internal
ovs-vsctl add-port br0 tap1 tag=2 -- set Interface tap1 type=internal
ifconfig tap0 192.168.0.11
ifconfig tap1 192.168.1.11

tap設定(ホストB)

cat > /etc/sysconfig/network-scripts/ifcfg-tap0 <<EOF
DEVICE=tap0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.12
NETMASK=255.255.255.0
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-tap1 <<EOF
DEVICE=tap1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.12
NETMASK=255.255.255.0
EOF

ovs-vsctl add-port br0 tap0 tag=1 -- set Interface tap0 type=internal
ovs-vsctl add-port br0 tap1 tag=2 -- set Interface tap1 type=internal
ifconfig tap0 192.168.0.12
ifconfig tap1 192.168.1.12

tap設定(ホストC)

cat > /etc/sysconfig/network-scripts/ifcfg-tap0 <<EOF
DEVICE=tap0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.13
NETMASK=255.255.255.0
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-tap1 <<EOF
DEVICE=tap1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.13
NETMASK=255.255.255.0
EOF

ovs-vsctl add-port br0 tap0 tag=1 -- set Interface tap0 type=internal
ovs-vsctl add-port br0 tap1 tag=2 -- set Interface tap1 type=internal
ifconfig tap0 192.168.0.13
ifconfig tap1 192.168.1.13


参考サイト
http://trickycloud.wordpress.com/2014/05/02/multiple-private-networks-with-open-vswitch-gre-tunnels-and-libvirt/