1438 Words

Openstack Issue その1―正常に見えるのに大量にネットワークエラーが…

問題概要

VM は正常に起動できているように見えるのに、起動している compute ノードの/var/log/neutron/neutron-linuxbridge-agent.logで 無限に ebtables のエラーを吐き続ける問題

ebtables v1.8.4 (nf_tables): CHAIN_USER_DEL failed (Device or resource busy): chain neutronARP-tapxxxxxxxx-xx

みたいなログが延々と出力され続けている…

参考

方針

  • Bug #1887281 “[linuxbridge] ebtables delete arp protect chain fa…” : Bugs : neutronによれば、 新しいバージョンでは修正されているとのことだが、apt でインストールされる Neutron のバージョンでは Ussuri/Victoria 両リリースともに 修正前のバージョンでした…

    Releaseapt installed Neutron Versionbug fixed Neutron Version
    Ussuri16.2.016.3.0+
    Victoria17.0.017.1.0+

    なので、今回は手動でパッチ処理をおこなう方法で解決してみます

  • !Caution apt パッケージ管理下のソースコードを手動修正するので、もしかしたら何か不具合あるかもしれません

  • (controller ノードは関係なさそうだが、一応同様の処理をしておく)

  • (テストコードの修正は必要ない気もするが一応置き換えます)

解決手順

  1. 修正済みのソースコードを取得する

    1. controller ノードで Neutron リポジトリをgit cloneする

      Controller $any user

      cd /path/to/work/dir
      git clone https://opendev.org/openstack/neutron.git
      cd neutron
      git reset --hard 2207b885449667a7bc377f427b9123165223dbde
      
      • 最新のコミットでパッチをあてると動かなかったりするので修正しているコミットにピンポイントで戻っておく
    2. compute ノードに配布する

      • 手元の PC からscpで受け渡す(配布できればやり方はなんでもよい)

        scp -3 controller:/path/to/work/dir/neutron/neutron/plugins/ml2/drivers/linuxbridge/agent/arp_protect.py compute:~/
        scp -3 controller:/path/to/work/dir/neutron/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_arp_protect.py compute:~/
        
      • compute ノードで一応確認

        Compute $any user

        ls ~
        arp_protect.py test_arp_protect.py ...
        
  2. オリジナルコードのバックアップをとっておく

    Controller Compute #root user

    cd /usr/lib/python3/dist-packages/neutron/plugins/ml2/drivers/linuxbridge/agent
    cp arp_protect.py arp_protect.py.bak
    cd /usr/lib/python3/dist-packages/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent
    cp test_arp_protect.py test_arp_protect.py.bak
    
  3. 修正済みコードに置き換える

    Controller #root user

    cp /path/to/work/dir/neutron/neutron/plugins/ml2/drivers/linuxbridge/agent/arp_protect.py /usr/lib/python3/dist-packages/neutron/plugins/ml2/drivers/linuxbridge/agent/arp_protect.py
    cp /path/to/work/dir/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_arp_protect.py /usr/lib/python3/dist-packages/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_arp_protect.py
    

    Compute #root user

    cp ~/arp_protect.py /usr/lib/python3/dist-packages/neutron/plugins/ml2/drivers/linuxbridge/agent/arp_protect.py
    cp ~/test_arp_protect.py /usr/lib/python3/dist-packages/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_arp_protect.py
    
  4. ファイル権限を修正しておく

    Controller Compute #root user

    chown root:root /usr/lib/python3/dist-packages/neutron/plugins/ml2/drivers/linuxbridge/agent/arp_protect.py
    chown root:root /usr/lib/python3/dist-packages/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_arp_protect.py
    
  5. Linux Bridge Agent 再起動

    Controller Compute #root user

    systemctl restart neutron-linuxbridge-agent
    
  6. 解決確認

    • VM を起動している compute ノードの/var/log/neutron/neutron-linuxbridge-agent.logでエラーが止まっていれば OK
  7. (気になる場合は Neutron のレポジトリを最新コミットに戻しておく)

    Controller $any user

    cd /path/to/work/dir/neutron
    git reset --hard HEAD@{1}
    
    • git reflogの履歴で戻っているので他にもいろいろ git 操作してしまっている場合はHEAD@{1}ではなく適切に戻しましょう

関連記事一覧