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