尝试使用OpenFlow控制器”Faucet”
首先
鉴于各种情况,我思考要学习OpenFlow,一开始尝试了trema,但是发现trema没有得到维护,运行示例代码时总是让人感到烦躁。于是我继续探索,最终找到了Faucet。下面就是相关的文章。
水龙头控制器:OpenFlow生存的原因
稍微Google了一下,发现关于Faucet的日语文章只有这么少,但是我还是相信它很受欢迎,所以决定玩一玩。
主要的参考文献
-
- https://docs.faucet.nz/zh-cn/latest/tutorials/first_time.html#configure-prometheus
- https://eng-blog.iij.ad.jp/archives/5022
这篇文章主要是按照第一点的内容来写的。
执行环境 (shí shī
这是在Hyper-V上运行的Ubuntu,我没有太认真地进行更新。
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="19.04 (Disco Dingo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.04"
VERSION_ID="19.04"
我的水平
虽然我对TCP等网络知识有一些了解,但基础设施不是我的专业领域。
日常工作主要是使用C语言编写嵌入式固件,涉及存储系统相关方面。
详细
第一次安装水龙头
-
- dockerとかもあるようですが、Package installationをすればいいかなと思います
-
- 一つ注意が必要で、こいつらはやたらディスク容量を使います。
- (おかげでhyper-Vのディスクが枯渇していろいろやってチェックポイントまで戻る破目になりました)
配置
普罗米修斯
-
- FaucetはPrometheus2を経由してGaugeなどのコンポーネントと連携するようなので、Prometheusの設定を行います。
/etc/prometheus/prometheus.yml にすでに基本の設定が書かれています。
ドキュメントに書いてありますが、rule_fileとかjobの設定がデフォルトとドキュメントで違うので追記する形になると思います。
また/etc/default/prometheusの引数を指定することでprometheus.ymlの位置を変えることができます。これは必要なのかどうか不明です。
Grafana3 可以如下译为:图纳3
数据来源→Prometheus的注册
-
- localhost:3000で接続できるよと書いてありますが、IPアドレスを指定してlistenしているわけではないので、仮想マシンなどの場合はホストから見える仮想マシンのアドレス:3000で接続できます。
- 開いた画面の真ん中あたりに並んでいる項目から「Add data source」を選び次の画面でPrometheusを選びます。4
仪表盘⇒水龙头注册
-
- data sourceと同様にDashboardを選択します
-
- 画面左側に+ボタンがあるので、それを押してImportを選択します
Importの画面の右上のUploadからJSONファイルを入れられるので、ドキュメントに書いてある下記のURLのJSONをダウンロードして入れます。
https://docs.faucet.nz/en/latest/_static/grafana-dashboards/faucet_instrumentation.json
ここまで手順が間違っていなければ何かしらのグラフが出てきます。何もプロットされていないグラフになったら何か間違ってます。ここまでの手順をドキュメントどおりにやることをオススメします。
https://docs.faucet.nz/en/latest/_static/grafana-dashboards/faucet_inventory.json
Countroller Countに2って出ると思います
https://docs.faucet.nz/en/latest/_static/grafana-dashboards/faucet_port_statistics.json
ここはたぶん何も出ません。たぶん……
「ただダウンロードしてアップロードしろ」とか書いてある気がしますが、Uploadの画面でPrometheusの登録を選択しないといけないようです。先に登録したPrometheusを選択します。
水龙头 (shuǐ
/etc/faucet/faucet.yamlにたぶんサンプルがすでに書いてありますがドキュメントに合わせます。
switchとかが余分に定義されているので。合わせないとエラーログが出たりします。
规5
/etc/faucet/gauge.yamlにたぶんサンプルがすでに書いてあります。
とりあえずこのままで良いと思う……のですが、もしかしたら下記のようにしないと、あとでiperfをしたときに結果が何も出ないかもしれません。
prometheus:
type: 'prometheus'
- prometheus_addr: '0.0.0.0'
+ prometheus_addr: '127.0.0.1'
prometheus_port: 9303
连接您的第一个数据路径6。
-
- ここではいよいよNetwork namespace(netns)を使って仮想ネットワークを作成して動作を見ていきます。
Open vSwitchが必要です。Ubuntu19.04とかなら普通にapt install できますが、16とかの場合は主要文献1にしたがってインストールしてくださいma
古い環境だともしかしたらipコマンドのインストールも必要かもしれません。
まずnetnsの構築を行います:
https://docs.faucet.nz/en/latest/tutorials/first_time.html#connect-your-first-datapath の3番目の手順:
まずas_ns と create_ns という2つのbash関数を宣言します。私はシェルスクリプトにしました。
create_nsの中ではveth peerの作成と接続なども行います
create_ns を使って host1とhost2のnetnsを作成します
IPアドレスは仮想ネットワークなので何でもいいです。実在のネットワークと被っている場合はもしかしたらダメかもしれません。
次にOpen vSwitchの設定をします:
Configure Open vSwitch のコマンドをそのまま実行すればいいと思います
ここまでできるとGrafanaのdashboard「Faucet Inventory」でDatapath countが1になったりPort Countが2になったりしていると思います。
なっていない場合はログを見ろ、とのことです。
在虚拟主机之间产生流量。
-
- 2つの仮想ホスト(netns)間でデータを流してみます
- まずはping:
> as_ns host1 ping 192.168.0.2
-
- netnsとovsの設定が間違っていなければpingが通ります。/var/log/faucet/faucet.logにL2 learnedとか書かれたログが出てきます
- つぎにiperf。iperfがない場合はインストールします:
> as_ns host1 iperf3 --server --pidfile /run/iperf3-host1.pid --daemon
> as_ns host2 iperf3 --client 192.168.0.1
- pingが通っていればiperfも動くと思いますが、grafanaの設定が正しければ、dashboard「Faucet Port Statistics」にiperfが大量のデータを流したことを示すグラフが出てくると思います
最后/印象
-
- とりあえずfaucetが動いたらしいです
-
- 個人的にはnetnsとかOpen vSwitchの使い方がちょっとだけわかったことの方が収穫でした
- Further stepsがあるようなので理解できたら続編を投稿します
关于附加参考文献/关于netns
只需要一种选项,请用中文将以下内容进行简单转述:
https://qiita.com/hana_shin/items/ab078b5552f5df029030
龙头就是指比特币相关的很多东西,但可能没有关系。
Prometheus是一种与Zabbix等类似的监控管理工具。
(从https://qiita.com/Chanmoro/items/a23f0408f0e64658a775获得)Grafana是Grafana Labs发布的用于日志和数据可视化的工具。
文件中写着,我记得它指导了Prometheus的注册,但是这个打开的页面的项目顺序似乎是指导。不太好理解。
(从https://docs.faucet.nz/en/latest/intro.html#what-is-gauge获得)Faucet有两个主要的OpenFlow控制器组件,Faucet本身和Gauge。根据看到的第二个主要文献,faucet→Gauge→Prometheus/InfluxDB可能是这样的顺序。
我认为数据路径可能是指到交换机或设备的路径。因为没有术语的解释,所以我不确定。