クソメモです。
ある程度情報そろったらきれいにします。。。
参考
https://tech.uzabase.com/entry/2017/08/07/172411
https://tech.uzabase.com/entry/2017/08/23/175813
https://docs.docker.com/network/overlay/
https://docs.docker.com/network/network-tutorial-overlay/
Docker マルチホストネットワーク
1. Docker Swarm mode (swarm service network?)
[メモ]
古いバージョンのSwarmだとこの機能を使用するため、分散KVS(etcd,consul,zookeper)が必要であったが、新しめのバージョンではDockerに機能が組み込まれているため、不要になった
-> いつのバージョンから??
SwarmにてOverlay Networkを利用することでコンテナのマルチホスト間通信を実現する
Breakdown
overlay Networkにて使用されるポート
- TCP 2377 -> クラスタ管理通信
- TCP/UDP 7946 -> ノード間通信
- UDP 4789 -> overlay Network通信
セキュリティ
管理用通信はすべてAESにより暗号化されている
overlay network作成時に"--opt encrypted"オプションを付与してあげることでアプリケーション通信(overlay Network通信?)もIPSECにより暗号化される。(Dockerノード間でIPSECトンネリング)
IPSECも結局AESアルゴリズムにより暗号化されている
-> ネットワークパフォーマンスに影響する可能性があるため、テストはマスト
おまけ: encryptedしているoverlay networkはwindowsに対応していない
docker swarmを初期構築およびworkerとしてswarmに追加した際に以下のネットワークが作成される
- ingress
- swarmの管理用トラフィックの送受信用
- swarm serviceを構築時、ネットワークを選択しない場合はデフォルトでこれに接続される
- docker_gwbridge
- Swarmに関係する個々のdockerデーモン同士が通信する際に利用する
- ingressをdockerホストのIFに接続する
- これによりswarm manager/worker間の通信が可能?
overlay networkはserviceにて要求されたタイミングで自動で作成される
-> managerだけで定義すればOK
Control traffic と Data trafficを分割
swarmに登録する際に --advertise-addrおよび--datapath-addrを分ける
2. Overalay Network 構築ツールを使う
flannel -> もともとk8sにてマルチホストネットワークを実現する機能だった
3. 手動で構築
分散KVSとdocker network create -d overlay コマンドを使って構築する
Tutorial
# docker network create --driver=overlay --attachable test-net
wpwhkxk5ovxfheq0z37fi6t0p
# docker run -it --name alpine1 --network test-net alpine
# docker network ls
managerで作成したnetworkは表示されない
# docker run -dit --name alpine2 --network test-net alpine
# docker network ls
managerで作成したnetworkが表示される
# ping alpine2
PING alpine2 (10.0.3.10): 56 data bytes
64 bytes from 10.0.3.10: seq=0 ttl=64 time=0.679 ms
64 bytes from 10.0.3.10: seq=1 ttl=64 time=0.408 ms