Dockerでは、OpenStackなどクラウド基盤ソフトウェアでも広く採用されている「Open vSwitch」(OVS)を利用してネットワークを構築することができます。今回は、実際に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コンテンツにアクセスできるかどうかをテストします。
まずは、ホスト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経由で外部のネットワークと通信できるかどうかも併せて確認してください。
Copyright © ITmedia, Inc. All Rights Reserved.