DockerとOpen vSwtich、その後

読む前に

この記事はkstmアドベントカレンダーの2日目です。

尚、下記の記事の続きのようなもので、内容は実質ポエムなので注意されたし。 仮想化以前に構築した自宅インフラをDockerとOpen vSwtichで何とかする話 - Qiita

何故続いたか

下記に上げる既存手法は、帯に短し襷になんちゃらということで、あがく、放置する、を繰り返し結果、1年経ったが結局救われていないことに気付いたので記事にすることにした。

現状、Hostアダプタとdocker-composeでの自動立ち上げで多少幸せになったが、ホストマシンのOSインストールが終わったら、自宅インフラを一発で復旧できるような状態には未だなっていない。

ovs-dockerの運用をやめてしまった要因として以下のものがある 1. 再起動耐性がない 2. あくまでシェルスクリプト

現状、Hostアダプタを運用していて発生してる問題としては以下のものがある 1. Rawソケットを使うデーモンをTagVlanで使えない 2. ホストの構成、IP変更に振り回される

そして、一時期検討した、kubernetes等の基盤とかの問題点として以下のものがある 1. アカウンティング、テナンティング、クラスタリングしないので機能の8割が邪魔 2. L2でひっぱりだすのが大変(contivとかあるらしいけどまだ熟れていない)

つまり、既存手法にはほぼ救いがない。

Dockerのネットワークドライバを実装しようとした話

Go言語でOVSDBを叩くDockerのネットワークドライバがあれば最高じゃないかと思って、libnetworkのドライバのコード・リーディングを進めているが、さっぱりわからん。

特に、OSのネットワーク周りに対応して秘匿し、互換性を持たせる機能も読み込まなければならず、早々簡単に読めるものではなかった。

手段として大きくなりすぎている気がするので、勉強としては多少読み続けるが、実装しようとは思わなくなった。

kea-dhcp on Dockerの話

Rawソケットを使うデーモン、それはkea-dhcpである。

kea-dhcpをホストアダプタのVlanなI/Fに割り当てると、見事にコケる。 理由はとても簡単、Rawソケットを使っているため、カーネルドライバであるVlanを認識しない。

つまりVlanなI/Fを仮想スイッチで「剥く」ことができるOpen vSwitchは非常に魅力的なのだ。

詳細はここに書かれている。 [Kea-users] (Can’t get KEA to work here - VLAN issues

他にも、HostアダプタでVlanなI/Fを掴んだ場合、Rawソケットを使っているデーモンは全て死亡することになる。

ovs-dockerに再起動耐性をつける話

ovs/ovs-docker at master · openvswitch/ovs

この実装を読んでみたが、ovs-dockerの実装であるシェルスクリプトがステートレスなのが問題であって 手前味噌ではあるが、インターフェイスとDockerのコンテナIDあたりの整合性を保持するDBを持っていれば、 もしかしたらなんとかなるんじゃないかと思った。

シェルスクリプトではなくツールとして再実装したら美味しいのでは。

こんなポエムを書いている間に、上記のような着想を得たので、アドベントカレンダー期間内に実装し、 成果が出たら記事として公開しようと思った。

おわり。