第35回 Open vSwitchで作るDockerのネットワーク(OVSで構築する編)古賀政純の「攻めのITのためのDocker塾」(1/6 ページ)

Dockerでは、OpenStackなどクラウド基盤ソフトウェアでも広く採用されている「Open vSwitch」(OVS)を利用してネットワークを構築することができます。今回は、実際にOVSを利用したネットワークを構築してみましょう。

» 2017年02月08日 07時30分 公開

OVSでフラットなネットワークを構築し、コンテナを通信させる

 今回は、前回ご紹介したOpen vSwitch(Open Virtual Switch、通称「OVS」)を利用するネットワークを構築していきます。以下では、実際にOVSを使ってホストOSとDockerコンテナを同一LANセグメントに所属させることで、マルチホストのコンテナ間通信を行う設定の手順を示します。OSは、CentOS 7.3を想定します。ネットワーク構成は次の通りです。


ホストOS ホストOS コンテナc1 コンテナc2 クライアント
役割 Dockerホスト クライアント Webサーバ クライアント
OSの種類 CentOS 7.3 CentOS 6.8 CentOS 6.8 CentOS 7.2
Dockerエンジン 1.12.5 - - -
IPアドレス 172.16.1.100/16 172.16.1.171/16 172.16.1.172/16 172.16.1.253/16
ゲートウェイ 172.16.1.1 172.16.1.1 172.16.1.1 172.16.1.1
DNS参照先 172.16.1.254 172.16.1.254 172.16.1.254 172.16.1.254

マシン NIC ブリッジ MACアドレス
ホストOS eth0 br-ex 6C:3B:E5:50:3B:30
コンテナc1 eth0 - 00:01:02:03:04:05
コンテナc2 eth0 - 00:01:02:03:04:06

 今回は、コンテナc2にWebサーバをインストールし、コンテナc1および同一LANセグメント上のCentOS 7.2がインストールされたクライアントマシンから、コンテナc2の提供するテスト用のWebコンテンツにアクセスできるかどうかをテストします。

Docker 今回構成するネットワーク構成

OVSのインストール

 まずは、ホストOS上にOVSをインストールします。OVSは、OpenStackのコミュニティーの1つである「RDO」が提供するリポジトリを追加することで入手できます。リポジトリは、以下のようにyumコマンドで追加可能です。一般的にOpenStackコミュニティーが提供するリポジトリのURLは、OpenStackのバージョンによって異なりますが、今回は2017年1月時点でのOpenStackコミュニティーの最新版「Newton」に対応したリポジトリを追加します。


# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-newton/rdo-release-newton-4.noarch.rpm

 RDOが提供するリポジトリを追加し、ホストOSにOVSをインストールします。


# yum install -y openvswitch

 ホストOSにOVSをインストールできたら、次にホストOS用のブリッジ・インタフェース「br-ex」の設定ファイル「ifcfg-br-ex」と、それに対応するNICのeth0の設定ファイル「ifcfg-eth0」を作成します。今回は、br-exの固定IPアドレスとして「172.16.1.100/16」を割り当てます。ifcfg-eth0ファイル内の「HWADDR=」の行には、物理NICのMACアドレスを指定しますので注意してください。


# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 org.ifcfg-eth0
# vi ifcfg-eth0
NAME="eth0"
HWADDR="6C:3B:E5:50:3B:30"
ONBOOT=yes
TYPE=OVSPort
DEVICETYPE=ovs
NM_CONTROLLED=no
OVS_BRIDGE=br-ex

 OVSブリッジbr-ex用のifcfg-br-exを編集します。OVSブリッジの設定では、「DEVICETYPE=ovs」を指定し、さらに、「TYPE=OVSBridge」を指定します。OVSブリッジの設定ファイルには、通常の物理NICの場合と同様に、IPアドレス、ネットマスク、デフォルトゲートウェイ、参照先DNSサーバを記述できます。


# vi ifcfg-br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=172.16.1.100
NETMASK=255.255.0.0
GATEWAY=172.16.1.1
DNS1=172.16.1.254
ONBOOT=yes

 OVSブリッジの設定ファイルを用意したら、ホストOSを再起動します。この際に、OVSブリッジのみで外部と通信を行う設定になっている場合は、設定に不備があると、リモートからホストOSにログインできなくなります。必ずローカルのキーボードとディスプレイで再設定できるようにしておくか、サーバのマザーボードに搭載された遠隔管理チップ(HPE iLO4など)が提供する仮想コンソール経由のリモート接続ができる状態であることを確認してください。


# reboot

 ホストOSが再起動した後、IPアドレスを確認します。


# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN qlen 1000
    inet 172.16.1.100/16 brd 172.16.255.255 scope global br-ex
       valid_lft forever preferred_lft forever
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever

 次に、OVSの状況を確認します。以下のように、OVSが提供する「ovs-vsctl」コマンドに「show」を付与して実行します。


# ovs-vsctl show
25d8ffb2-b620-469f-9944-df87cb829aa7
    Bridge br-ex
        Port "eth0"
            Interface "eth0"
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "2.5.0"

 上記のように、eth0のポートと仮想ブリッジbr-exのポートが両方表示されていることを確認してください。またipコマンドで、IPアドレスの付与状況と、仮想ブリッジのbr-ex経由で外部のネットワークと通信できるかどうかも併せて確認してください。

       1|2|3|4|5|6 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ