PSA - bond0を使用したカスタムDockerネットワークの問題

私は現在、すべてのDockerコンテナをNAS上で稼働させています。NASはそれらをうまく動かしてくれています。NAS上でdocker network CLIを使ってdockerネットワークを作成した際に、興味深い状況に気付きました。

docker network create -d qnet --opt=iface=bond0--ipam-driver=qnet --ipam-opt=iface=bond0 --subnet 192.168.1.0/23 --gateway 192.168.1.1  qnet-static-bond0-custom

上記のコマンドは、LAGでボンディングされた10GBネットワークを使ってdockerネットワークを作成します。その後、さまざまなDockerアプリケーションをこのネットワークに割り当てています。

問題は、このコマンドを実行すると、ボンディングされた10GBネットワークアダプタの下に仮想スイッチが作成され、その仮想スイッチがアダプタに割り当てられていたIP情報を引き継いでしまうことです。

この状態になると、NASのGUI上のネットワーク&スイッチアプリでアダプタ情報を変更できなくなります。元の状態に戻すには、dockerネットワークを削除し、仮想スイッチも削除するしかありません。

上記のコマンドは、eth0のような単一のアダプタに紐付ける場合は問題なく動作します。

これがネットワーク&スイッチアプリの制限なのか、単に非推奨の設定なのかは分かりません。ボンディングした10GBをDockerアプリのベースとして使えると便利なのですが、今のところは標準のeth0で運用しています。

同じようにQNAP NASでより複雑なdockerアプリを動かしている方の参考になればと思い、共有します。

Container StationのGUIでこれを行うことはできませんか?私はいつも特定のコンテナで使用したいネットワークアダプターを選択しています。ボンディングされたアダプターも選択できるはずです。

はい、シンプルなコンテナのプルデプロイを行う場合は通常のGUIを使うことができます。それは実際かなりうまく機能します。

しかし、より高度なネットワーク要件があるdocker composeファイルを使う場合は、ファイル内やコマンドライン経由でdockerネットワークを定義できます。私はこれでこの方法を知りました。dockerアプリ用に様々なネットワークパラメータを設定するためにネットワークを作成していました。

docker composeファイルでは、以下のように新しいdockerネットワーキングを追加することができます。

# appセクションの下に追加-
services:
  app:
    networks:
    qnet-static-bond0-custom:
      mac_address: xx:xx:xx:xx:xx:xx
      ipv4_address: 192.168.1.112

#composeファイルの最後に追加
networks:
  qnet-static-bond0-custom:
    external: true

はい、私もいくつかのYAMLスクリプトでそれを行っています。では、YAMLでボンディングされたポートを追加するのは正しく動作しないのでしょうか?

私はbond0でセットアップを使うことができ、Dockerアプリも正常に動作します。ただ、ネットワークの設定がNASのGUIにあるNetwork&Switchアプリで正しく表示されず、後でアダプター設定を変更する必要がある場合に問題が発生します。DockerアプリもNetwork&Switchアプリ内でアダプターが見つからないという警告が表示されます。そのため、すべてが正常に動作するように、Dockerネットワーク作成時にはeth0を使うことにしており、これで期待通りに動作しています。

Networking&Switchの問題がそのバリエーションに対応したコーディングになっていないせいなのかは分かりません。

NAS自体はbond0構成をサポートしているものの、すべてのアプリが正しく利用できているわけではないようです。これまで何度もQNAPにbond0ネットワークの対応を修正するようチケットを出してきました。

ご意見ありがとうございます!こちらの内容は社内チームに共有し、調査・分析を行います。ありがとうございます!