tl;dr
- AWSでdocker swarmするときにはtcp:2377,7946 udp:7846,4789への同じsecurity groupのノードからのアクセスを相互に許可しよう。
awsで本格的にdocker swarmするときのハマリどころ
- swarm serviceのポートの問題
- swarmサービスは2377に別サーバーとして立ち上がるのだが、docker-machine 0.8.0が自動的に作るsecurity groupは2377を勝手には開けてくれない
- 一旦docker-machineにsecurity groupを作ってもらって、そこに2377をカスタムで自分のsecurity groupからのみ許可する、という風にするのが一番いいような気がする
- overlay networkのポートの問題(結局security groupの設定の問題)
- https://docs.docker.com/engine/userguide/networking/ で必要とされている、overlay networkのためのtcp/udpのポートもdocker-machineはデフォルトで開けない
- 1.で行ったように、udp:4789とtcp/udp:7946を開けてあげる必要がある
- docker-machineがインスタンスを作成した後に設定を足しても、うまくいかなかったことがあったので注意。
最終的なsecurty groupの設定
proto port allow_from
TCP 22 0.0.0.0/0
TCP 2376 0.0.0.0/0
TCP 2377 same security group
UDP 7946 same security group
TCP 7946 same security group
UDP 4789 same security group
所感
多分、docker-machine createに--for-swarmみたいなオプションを足して、その場合swarmに十分な設定を追加で行ってくれるようにすべきなのだろうと思う。
EDIT: docker-machine 0.8.1が出ているようなので、何か対応されているかもしれない