Help us understand the problem. What is going on with this article?

Docker + Consul + Swarm でoverlayネットワーク~複数の物理サーバーでネットワークを共有しよう

概要:

こんにちは、はにおかさいです
Dockerが複数ホストにまたがるとき、コンテナ同士の通信はどうしようかと思います。
DockerとConsulとSwarmで仮想ネットワークを構築し互いに通信できるようにしましょう。

環境:

  • Ubuntu 18.04 on Linode *2 をクリーンインストールで。
  • Consul: 1.5.3
  • Docker: 19.03.1

Host1

メインのサーバーとして使用
- hostname: con1
- IP: 111.111.11.11

Host2

子サーバー
- hostname: con2
- IP: 222.222.22.22

インストール:

byobuを使うとよいでしょう

Host1&2
echo なにがし>/etc/hostname #ほかのホストとダブるとconsulがエラーを起こす。

##Dockerのインストール
curl -sSL https://test.docker.com/ | sh

##Consulのインストール
apt install unzip 
wget https://releases.hashicorp.com/consul/1.5.3/consul_1.5.3_linux_amd64.zip
unzip consul*
sudo cp consul /usr/local/bin/

Consulの起動

Host1(サーバー)
consul agent -server -bootstrap -data-dir=/tmp/consul -bind=111.111.11.11
Host2(クライアント)
consul agent -data-dir=/tmp/consul -bind=222.222.22.22 -join=111.111.11.11
Host1&2
consul members

Dockerの設定

Host1&2
 echo 'DOCKER_OPTS="--cluster-store=consul://localhost:8500 --cluster-advertise=eth0:2376"' >> /etc/default/docker

service docker restart

Swarmの設定

Host1
 docker swarm init --advertise-addr=111.111.11.11
Host2
適宜swar参加コマンドを実行

ネットワークの作成

どのマシンでもよい
docker network create --driver=overlay --subnet=192.168.0.0/24 --attachable 0ver

コンテナの作成

Host2とする
docker run --name=ctr1 --net=0ver -it ubuntu:latest /bin/bash
Host1とする
docker run --name=ctr1 --net=0ver -it ubuntu:latest /bin/bash

疎通テスト

コンテナctr1@Host2
apt update
apt install iputils-ping net-tools
ifconfig
#######################################
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.0.1.2  netmask 255.255.255.0  broadcast 10.0.1.255
        ether 02:42:0a:00:01:02  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.3  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:03  txqueuelen 0  (Ethernet)
        RX packets 3809  bytes 20879442 (20.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2837  bytes 194063 (194.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0

#####################################
hostname -I | cut -f1 -d' ' #eth0
hostname -I | cut -f2 -d' ' #eth1

apt install nginx
コンテナctr1@Host1
apt update
apt install iputils-ping net-tools wget
ping 10.0.1.2
wget 10.0.1.2
cat index.html

まとめ

無事できました。
どこの情報よりもスラっとしていると思います。

編集後記

地理的に離れていてもオーバーレイネットワーク作れそうじゃね?

追伸

Conoha Linodeでもオーバーレイできたで。
image.png

おすすめ

ネットワークいろいろ
・「単一のDockerホスト内の色々なネットワーク構成例」
https://www.memotansu.jp/docker/865/
・「Ubuntu 16.04でDockerコンテナに複数NICをブリッジする」
https://qiita.com/hiconyan/items/b4015fa174d333c060a9
・「Docker swarm mode overlay network security model」
https://docs.docker.com/v17.09/engine/userguide/networking/overlay-security-model/

参考元:

https://thinkit.co.jp/article/8414?nopaging=1
https://thinkit.co.jp/story/2015/08/24/6343
https://blog.bitmeister.jp/?p=4043
https://qiita.com/Arturias/items/dd7f9e2365626dd4ad51
https://qiita.com/tukiyo3/items/0785bde8733417093957
http://yuzuma-yuzuma-yuzuma.hatenablog.jp/entry/2017/11/05/193710
https://stackoverflow.com/questions/41847656/network-not-manually-attachable-when-running-one-off-command-against-docker-sw
https://moomindani.wordpress.com/2014/09/17/linux-command-ip-address/

haniokasai
男子大学生の暇人です。ブログで活動していましたが。VPSオタク。アンチGCPとAWS。国内外のサーバーをたくさん借りてました。JavaとPythonを主に使います。 アイコンはらてちさんから。
https://haniokasai.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした