2021年11月5日金曜日

docker swarm で load balancing を無効にする方法

docker swarm で load balancing を無効にする方法

概要

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 件のコメント:

コメントを投稿