概要
docker swarm は Published しているポートがあるとそのポート感で自動的にロードバランシングしてくれます
外部のロードバランサなどを使わない場合は便利ですが Nginx や HAProxy、ELB などクラウドロードバランサを使う場合には無効にしたおいたほうが良いです
今回は Swarm のロードバランシングを無効にする設定を紹介します
結論: endpont_mode: dnsrr を使う
docker service create するときに --endpont-mode dnsrr
を使います
docker-compose で記載すると以下のようになります (一部抜粋)
まず Ports の設定で mode: host を指定します
mode はデフォルトだと ingress なのですが ingress モードでは dnsrr が使えないので host モードを指定します
ingress と host モードの違いはこちらが参考になります
ports:
- target: 8080
published: 8080
protocol: tcp
mode: host
次に deploy で endpoint_mode を指定します
deploy:
mode: replicated
replicas: 3
endpoint_mode: dnsrr
これで OK です
docker-compose のバージョンは v3.2 以上が必要
もしエラーになる場合はバージョンが 3.2 以上になっているか確認してください
動作確認
docker-compose に記載した場合は再度 stack deploy すれば OK です
もし反映されない場合は一度対象のサービスを削除してから stack deploy してください
docker-compose を使ってない場合は直接 service update で上記のオプションを指定すれば OK です
最後に
外部のロードバランサを使っている場合は忘れずにオフにしましょう
ちなみにオン+外部のロードバランサでも動作しますが swarm 側でもバランシングしてしまうせいで外部のロードバランサで指定しているバランシングルール通りに動かなくなるので注意してください
0 件のコメント:
コメントを投稿