ネットワークプログラマビリティ勉強会 #npstudy #11 参加メモ

ネットワークプログラマビリティ勉強会 #11 に参加してきました。いつものメモです。公開資料についてはconnpassの方を参照ください。

npstudy 方針

  • ネットワーク系の勉強会あまりないので
  • 10回はやろうと言って11回目になりました
  • トピック
    • いろいろ。ちょっとでもNWとプログラマビリティ要素が絡めばOK

募集中

  • 発表ネタは随時募集しています
    • 一般枠(30min), LT枠(10min), デモがあれば+5分程度。
  • スタッフとして手伝ってくれる人・司会進行してくれる人
  • 場所貸してくれる人がいると嬉しいです。
    • 場所貸してもらえれば、懇親会はスポンサー可能

連絡事項

  • 過去発表枠がなかなか消費されないので過去3回にしてみました。
  • Hash Tag : #npstudy
  • 発表する方はconnpassで資料公開してもらえるとハッピーになります
    • もしくは #npstudy で tweet を。
  • 懇親会をやってます
    • 簡単な軽食+お酒
    • 参加者同士の交流を。
    • 懇親会も残ってほしいなーというのがあるので、今回FD.ioのLTは懇親会でやります

お願い

  • キャンセルはお早めに
  • 忘れ物に注意!!

物理ネットワーク受入テストの自動化を考える

@qb0C80aE, OOL Network Test System Project + Trema/NetTester Team

npstudy#7で話したものの続きです

  • npstudy#7 の時の話は何か?
    • 一言でいうと、物理ネットワークのテストを自動化するための仕組みを作って、有効性を試してみた、というもの。

背景

  • ネットワークの変化が早くなってる。
    • これを変えたらネットワーク全体がどうなるか?

ネットワークの課題

  • 自動化が難しい。
    • つながる前提かどうかで考え方が違う。物理NWやるような場合はそもそもつながる保証がない。
    • つながらないとその場に行かないといけない。
    • 機器ごとに固有の操作体系
  • 全体の動作確認の難しさ
    • 個々の操作 → 全体が望んだ状態になるか?
    • あれをやったらこっちが死ぬのでは? みたいなのが多い

結果

  • どうしても人手
  • 影響範囲の読みにくさ → ずっとレビュー
    • リクエストにすぐに答えられない
    • いざやってみたらこけた…

アプロ―チ

  • 実機を使って、実際のものを
  • 自動化して、人ではやれない範囲をフォロー
    • npstudy#7 のときはping test pattern の記述
    • 今回は BDD ベースでやってみようという方向

BDD

  • BDD: 要求仕様に対する end-to-end のテスト。
    • acceptance test, integration test
  • TDDは細かい、unit test レベルの話が中心
  • 最終的にほしい動作の実現

Why BDD?

  • 実際的な・意味のあるテストを作る

ネットワークのふるまい?

  • 静的なふるまい: 定常状態のネットワークで要件通りに通信できるか
  • 動的なふるまい: ネットワークの状態が変化する

自動化するときに何が必要か?

  • テスト用のノード生成・配置
  • NW機器の操作
  • 個々のテストの実行

NetTester

  • テストシナリオから、仮想ホストを立てて、テストを実行する

デモ

  • Cucumber, 日本語でテストシナリオ書いてる
  • 動的なテスト
    • 間に挟み込んでいるopenflow switchを操作して実際にリンクダウン発生させている
  • 仕様変更対応
    • NAT IPの変更
    • テストファーストなやりかたで
    • 直接変更したところ
    • そのほかの使用確認、余計な影響やミスがないか?

できたこと

  • トポロジ操作含めたテストの記述・実行
    • 障害試験とかも自動化。人手でケーブル抜くとかしなくてもいいように
  • 要求変更→修正・テスト・本番デプロイ、というサイクル
    • CI/CDへ
  • 実機固有のトラブルも発見
  • DPI的な動作のテスト

難しい

  • Setup/Teardown
    • 物理機器のTeardownが非常に面倒。前のテストのステータスが残ってしまう。
  • テストが通らなかったときの原因調査がちょっと大変。(慣れてこないと難しい)

まとめ

  • こういうネットワークにしたい、という要求ベースのテストシナリオを
  • ソフトウェア開発のノウハウを使いながら
    • BDD/Cucumber, そのほかのツールからでもOK
  • 静的・動的なふるまいのテスト

展望

  • リスクを減らしながら迅速にテストをしてデプロイしていく

今後

  • 「できないこと」のテスト
    • ユーザがしたい事・管理者がさせたい事 etc
  • CI/DevOps的なプロセスを考えた周辺システム連携・ツールチェインみたいなところ
  • 実用トライアル
    • 一緒にNW自動テストやってみたい人を募集しています!

QA

  • テスト繰り返すときに初期状態に戻す。具体的に何をしている?
    • arp tableのクリアとか。再起動するのがベストだろうけど時間がかかるので。
  • SSG仕様不明だけど、zeronize, configuration 初期化などをしている?
    • いまはコマンドを個別にん投げている。装置ごとに個別んい動作が違うので。
  • 実際、SIer的にはそういう機能があるとうれしい?
    • このテストシステム的には初期化をしたい。

ネットワーク運用とIoT

@Clorets8lack

自己紹介

  • 本業はユーザ企業の情シス、国際インフラ担当
  • 副業で、トラブルシューティングを効率化するパケットレコーダーとかを開発・販売

今日の話

  • ユーザ企業のネットワークにIoTを
  • 現場で情シスの厄介なことをやっている。やってみたこと・考えたことを

IoT?

  • NWにつながった機械で情報を取って分析したら便利になるんじゃない?
  • それってNWの人たちはすでにやってるんじゃない?
  • ちょっと違うやり方を考えてみよう

情シスが抱える悩み

  • 定期的にやる必要はないけど、ピンポイントでほしい情報
    • 企画業務、障害対応、サイジング、監査…

パターン1

  • そもそも可視化のしくみが現場にない
  • データが取れないと、設計の制度が変わる。
    • リプレースや新規導入があいまいに
    • 後工程に影響…思ってたのと違った、過負荷がかかった、負荷テストをかけてもこれでいいかが判断できない…

パターン2

  • 可視化していても取れない情報・取りにくい情報がある
  • いろんな製品使っていると、とっ散らかり気味

まとめ

  • 計測、可視化、定量化、というのが単純に難しい
    • そもそも取れない
    • 導入すればとれる…製品導入のコストパフォーマンス
  • データ取れるなら取りたい
    • 精神衛生上よくなる

作った

どうつかう?

  • 拠点においてインターネット境界ルータからミラー
  • データ集積しながら解析
    • 時々データ見に行く
  • 置いても既存のNWに影響を与えない

中身?

  • tshark + bash + php + sqlite
    • tshark filter でユーザ定義カウンタを作る

ユースケース

事例1

  • private addr 同士のコネクションを抽出、再送数が増えると警告
  • ケーブル不良やduplex mismatchなどの発見を目的に → 結果として勝手に設置された無線/有線converterを発見

事例2

  • MAC追跡: Kerberos/POPなどでユーザ名・ホスト名・MACとの紐付
    • 大量ダウンロードをした人とかを追いかける。ルール違反について証拠をそろえてクレーム。
    • ひとつのMACに複数ユーザが紐づき → 無許可設置ルータの発見

事例3

まとめ

  • 机上で考えたことと実際の現場は違う
    • 予想外のものが見つかる
    • 情報集めは楽に
  • filter rule 入れるのがちょっと面倒

今後

  • 開発の背景
    • 情シス部門は自分で解決できないトラブルの責任を持たされていたりする → 不安感が付きまとう → ベンダーへの過剰な要求の原因に
    • 一般的なトラブルシュートが楽にやれると負荷が減る
  • トラブル解決を楽に
    • パケットキャプチャ有効。ただ解析は難しい。
    • 条件: 同じ条件で取得した正常時・異常時のパケットキャプチャを比較できると簡単になる。

パケットキャプチャの難しさ

  • 本質的には間違い探し
  • 間違い…違和感はあっても確証を持つのは難しい

対比によるトラブルシューティング

  • どういう応答で中断しているか
  • 正常時と比べてどうか

伝達手段としてのパケットキャプチャ

  • 説明しやすいかどうかが重要
    • 「正常時はこうだけど、異常時はこうだ」という話ができると楽

教育効果

  • 正常時のキャプチャがない
    • 初見の間違い探し → 予備知識でカバー
    • プロトコルやふるまいに関する知識…トラブル事例・ナレッジ化

問題がうまく解決できるとよいサイクルができる

  • 振り返りをやろう
  • 余裕 → 将来への投資

想い

  • トラブルに振り回されたくない
  • 不安→不幸をなくしたい
    • 不安はテクノロジでなくせる

SonarMan-R は Amazon で販売しています!

  • 「これ検証ルームでノーパソもってうろうろしなくていいじゃん」
  • 半径5mで始めるIoT?

QA

  • データためておいてどっかにアップロードする?
    • キャプチャ取ったのを別なDBに移すとかもできるけど、コンセプトとして、1回か2回使えればいいデータを集めたいというだけ。受け側に手間をかけないという方針。仕掛けておいてそこに見にいく形。
  • NWオペレーションがプッシュ型、テレメトリ、ある程度の情報を上にためておいて異常検知に使っていくというのがある。
    • 異常検知: キャプチャデータの直接解析。機械の中にデータためてその中で解析・検知させる

Lagopus + Docker のDPDK接続

hibitomo

  • インターンの人がいろいろ検証したんですが諸事情により代理で。

「すごーい! LagopusはDockerとDPDKで接続できるスイッチなんだね! #npstudy」

Lagopus

  • OpenFlow Switch実装
    • DPDKを使って高速パケット転送可能。汎用x86サーバで動作可能
    • >10Gbps, OpenFlow1.3準拠 + tunneling

最近のリリース

  • '16/7-8月でaction=normalにも対応

DPDKによる仮想環境との接続

  • Interop 2016 ShowNet, vhost-user PMDによるVM-DPDK接続
  • QEMU2.1以上はvhost-netバックエンドをユーザ空間に: コピーが1回でvirtio-netでパケットとれる

VMとつながるのはわかった

  • コンテナはどうなのか?
  • これまで、SR-IOVで物理NIC VFわけてDPDKで取ってくるのはできてたが、vswitchを挟めていなかった。
    • vxlan tunnelとかする時にしんどい
    • vswitch はさんで encap/decap, networking したい
  • dpdk16.07以降でやれる

コンテナとの接続

  • virtio-user を使う。コンテナの中のユーザ空間で動く
    • qemuの中の仕掛けをdpdkのところに再インプリした形

どうやればlagopusとdocker(docker container)がつながるのか?

  • 準備
    • Hugepages, virtio-user 使うのであれば1G必須
    • hugetlbfs, ホストと各コンテナそれぞれにマウントが必要
  • 起動
    • docker run するときに hugepageとか指定する

ポイント

  • virtio-userをつかめるのはdpdkだけ。kernelはつかめない。
    • dpdk17.02ではKNI使えるが性能劣化する
  • コンテナで使うHugepageは8ページ以下しか使えない
    • vhost - virtio-user 間のパケット受け渡し。コンテナから見るアドレスとホスト側から見るアドレスの変換テーブルがあって、そこの受け渡しの高速化のため
  • 複数CPUソケットがある場合、Dockerで使用するノードを明示的に指定しないと死ぬ。
    • リンクアップするけどパケット送らないというつらいパターンの死に方
    • エラー見つけるにはデバッグオプションつけてコンパイルしないといけないのでつらい。

性能評価

  • docker0経由/lagopus経由
    • lagopus, 512byteくらいからpacketgenフルレート到達, 性能的には2倍くらい違う

新しいlagopus

  • lagopus switch → lagopus routerへ
    • OFSの柔軟な制御 + BGPとかも
    • 暗号化(IPsec)終端機能も

アーキテクチャ

ユースケース

  • BGP router
  • IPsec router

まとめ

  • 「すごーい! LagopusはdockerとDPDKで接続できるルータになるんだね! #npstudy」

OpenConfigで実現するベンダーニュートラルなコントロールプレーン

Arista/野田さん

ネットワークの管理API: OpenConfigの話を聞くようになってきた。どういうものなのか?

OpenConfig?

  • google, FB, AT&T, MS, etc...北米の大規模事業者有志による集まり。
  • 旧来の管理APIの限界…次の世代の管理API
  • "vendor-neutral, model-driven network management designed by users"

目指しているもの

  • ベンダーニュートラルなデータモデル、トランスポートとの分離
  • リアルタイムでスケールする状態監視を可能とするストリーミング

ニュートラルなデータモデル・トランスポート分離

  • マルチベンダ環境: ベンダが違うとconfigが違う, snmpの表現も違う, OSバージョンが違うとコマンドの出力が違う…
    • ひとつのメーカー/ベンダーだけでも複数の管理ツールが必要
    • マルチベンダ・複数世代、それに合わせたツール管理…

OpenConfig のaddress

  • YANGでデータモデル定義
    • ベンダ・世代に依存しない、共通のデータモデルで表現
  • データのやり取り(transport protocol)は別
    • netconf,restconf, gRPC,...

リアルタイムでスケールする状態監視ストリーミング

  • 細かい状態ポーリング
    • 管理台数が増えると粗くなる/細かくすると負荷が上がる
    • 実際には、なるべく細かくデータ取りたい
  • ストリーミングによるアプローチ
    • NW機器から状態変化をマネージャに送信(streaming)する
    • 送るデータはyangで定義
    • 送るプロトコルは grpc etc
  • NW機器の負荷を押さえながらリアルタイムの可視性を

demo

  • yang による状態取得やconfiguration
  • openconfig + grpc
    • サーバ側はgo実装なgrpcでコマンド送付
  • get config, set config

まとめ

  • openconfig: management plane の SDN化のひとつの選択肢
  • 今後3-5年後、snmp/CLIでどうにかできるか?
  • ユーザ視点で使いやすい管理APIをベンダ側にプッシュさせるチャンス

See also:

FD.io VPP事始め

tetz

ちょっと動かしてみる方法がわかるくらいの話の紹介

FD.io

VPP

  • FD.ioの中核。
  • dpdkを使ったユーザ空間なプリとして動作する仮想ルータ・仮想スイッチ
  • Vector packet processing
    • forwarding feature が有効グラフで表現
  • 対比: scalar packet processing: 1パケットずつ処理。インストラクション観点でパケット入ってから出ていくまでの処理をper packetにするとキャッシュミスが。
  • VPPは複数のパケットを同時に処理。極力メモリにアクセスせずキャッシュヒットさせながらパケットを処理する

機能

  • いろいろある
    • 中途半端だったりするのもあるけど。
  • IPsecやってみたけど、initiaterになれない。どこかからトンネル張りに来てもらわないといけない。

インストール

  • package installできる容認合っている

接続方法

  • dpdk pdm (host machine interface)
  • vhost (KVM)
  • veth (container)
  • tap

VPPへのNICの見せ方

  • 接続方法ごとにそれぞれ

さいごに

  • GW前にnpstudy#12を予定しています。
  • npstudyはベンダーニュートラルです!

VyOS Users Meeting #3 参加メモ

VyOS Users Meeting Japan #3 に参加してきたのでいつものメモです。例によってLTについてはメモ取ってません。

開会

ギークナビとは?

I have a VyOS, I have a SoftEther

いしばしさん/ギークナビ

Yamahaルータを使ったVPNサービスとかを仕事でやってる。

AWS標準VPNではなくてvyosをつかっている

  • やすい
  • 接続時ログとかが取れる
  • 使い勝手が良い

仕事で使うリモートアクセスVPN

  • CiscoASA をよくつかう
    • でも高い
    • AnyConnect等の使い勝手が…

VPNなんだからリモートアクセスもvyosでもいいんじゃないか

  • VyOS: できんかった(同時接続が1になる?)
  • SoftEther
    • あわせてしまえばいいのでは

拠点間はVyOS, リモートアクセスはSoftEther

クラウドへのアクセスも含めて VyOS/SoftEther でできるのでは?

Demo

  • AWSでVyOSを起動
  • debian repos 追加
    • "apt install build-essentials git" とか
  • softether のダウンロード
  • softether のインストール
  • softether server の設定
  • AWSの場合セキュリティグループ設定も。
  • softether server-manager/client から接続

本当はこうしたかった

  • L2TP over IPSec つかえば windows 側に vpn client いれなくても
    • ただ、拠点間VPNIPSecと競合しちゃうので、vyos側でNICわける
    • が、うまくいかず

QA

  • キャパシティ・性能
    • いまのところ t2.micro で試している。性能・キャパシティ的なお試しはこれから。
    • クラウドなので拡張性は。
  • VTIだと拠点間VPNとリモートの接続できなかったよ
  • 接続機器
    • Ciscoとか。Fortiはやってない。

Troublesome at vyos on aws

かみたさん/ギークナビ (急遽代打)

Trouble1: VyOSのVPN接続が切れる

  • 複数拠点とのVPN接続でVPNが切れる
    • 切れる。あるけど通信できない。あるけど通信できず経路なし。などなど
    • 回避策: keepalive等を入れて迂回
    • 回避はできるようになったので原因調査中

Trouble2: VyOSのディスク容量圧迫

  • auth.log の肥大化 (接続拠点が多いのでログがでかい)

Trouble3: AWSでのVyOS構成

  • AWS VPCの使用上、192.168.0.0/16をVPC内部ルーティングしようとする

AWSと複数拠点間でのBGP冗長化構成について

ふじいさん/ギークナビ

拠点間接続/dynamic routing の話をやってた

  • 今の会社はstatic routingだいすき
  • vyos はまだはじめたばかり

Cisco/VyOS接続検証

  • VyOS on AWS で対向はCisco(1812, ISR4331)で拠点間VPN
    • 1対1では問題ないけど複数拠点つなぐと通信できなくなる障害
      • VTI Interface が admin/down になる →まだ原因がつかめてない
    • Workaround: VTI Interface reset ("run reset vpn ipsec-peer") をping lossをトリガに自動実行

全部VPNじゃなくて、2拠点だけにしてdynamic routingで迂回いうのは?

  • bgp, 通常経路と迂回経路で使い分け
  • 拠点追加の増減で設定変更するのも面倒だよね
  • route map による制御とかの話はまだこれから

VyOSとLXCと僕

@gentaさん

JSONを投げると雲の中にルータが爆誕するやつの話

LXCとは?

  • 「コンテナ」をLinuxで実現する
    • VM: Kernel部分のオーバーヘッド
    • コンテナ: Kernel部分のオーバーヘッドがない分高密度に収容できるように
  • Linuxの提供するリソース分離機能を使う
    • 頑張ると、mount point は別なのに見えるNWインタフェースが見える、みたいなちょっと変なものもできる。
  • LXC: 簡単に仮想環境みたいのができる。VMたくさん並べるよりもいっぱい詰め込める。

それでVyOSうごかしてみよう

  • VyOSをひとつのVMの中でたくさん動かしてお金を減らしたい
    • ユーザが増えたらそれなりにスケールするようにしたい
    • それなりにいろいろできるようにしたい

構成

  • vxlanベース: VTEPはホストOS側で。
  • コントローラにjson投げるとコントローラがvyosをホストOS上に立てていく
    • 12RPM(Router per Minutes)

特徴

  • LXCを直接たたくので軽い
  • 網構成はコンテナ内ネットワークで割といろいろおやれる
    • vxlan id ごとにブリッジを作ってvethでVyOS(container)につなぐ

ストレージ構成

  • 普通にやるとCD1枚分くらいある。たくさん作るときついので、Overlay FS で実装。
    • Clone しても zero copy (mount point 操作のみ), ログとか書き込まれたら差分だけ別ディレクトリに入れる。

フロー

はまったこと

  • LXC由来の問題は今のところほとんどない
  • bind mount:
    • VyOS起動時: /config → /opt/vyatta/etc/config とかを bind mount してる。
    • 落とした時に umount してない
    • LXC の hook script で回避
  • start-stop-daemon
    • debian の start stop script がへぼくて killall とかやる…
  • overlayfs + VM Snapshot の問題

まとめ

  • 「意外と動いている」
    • マニアックな機能テストはしてないけど
  • コンテナごとにbgpdが増えるのが地味につらい
    • bgpdでnetns対応してVRFみたいに動いてほしい

なぜVyOS?

  • PCルータを手軽に使う
    • 設定ノウハウの蓄積…config generatorの部分だけ把握して、VyOSじゃなくてふつうのlinux上の話でいいんじゃ…
  • お客様との責任分界点

QA

  • LXC wrapper みたいので LXD というのが。そちらはためした?
    • 作った後に出てきて、気にはなっているけど調べられていない。便利機能があれば、と思うけど。
    • ストレージバックエンドをZFSにできる。overlayfs のスナップショットのところはZFSに任せられるのでは
  • コンテナ内プロセス、NTPとか動作がkernelに依存するプロセスはどうする?
    • ホスト側起動するときに事前にinsmodして合わせる…kernel環境はvyosから見て一緒になるように合わせる。

vyos-buildでつくるカスタムVyOS

@m_asamaさん

VyOSのカスタムイメージを作る

vyos-build

  • あたらしいvyos install imageを作るための仕組み
  • 1.1.7まではdebian/squeezeベース。1/2からはjessyベース。
    • 1.1まではbuild-iso → 1.2からはvyos-buildでインストールイメージを作る
    • debian-live がベースになってる。

ISOイメージ作る流れ

  • debian jessie 環境をつくる
  • git clone vyos-build
  • git checkout -b current
  • README読む
  • 必要なdeb packageいれる
  • configure && make iso

カスタマイズする場合

  • vyos-build/packages に deb file をおいてから make iso (2015/12/22からの機能)
  • vyatta-* vyos-* の修正
    • git submodule update --init packages/vyatta-cfg とかをやる
    • current checkout
    • 修正
    • fakeroot make: packages に deb が書き出されてれば make isoではいる

カスタムカーネルに差し替えたい

  • ビルドの仕方がよくわからない。ドキュメントも見当たらず。

今後

  • 1.2でjessieベースだけど、CLIとかはそのまま
  • vyos2.0とかからは、vyatta-cfg-*, vyatta-op-* とかがスクラッチのものに変わるといわれている。

余談

VTIが落ちる話 : http://bugzilla.vyos.net/show_bug.cgi?id=183

  • admin downしてなぜかupしない
    • strong-swan の中で、IPsec SA焼失したときにinterface落とすような設定がある。
    • vyatta static route で interface route 設定できる。これでnext hopしているとき、経路切り替わるように、interfaceもおとす。
  • ときどき route-client で上がらないのがある。up-client もつかう
    • ほかのところでも問題が、というコメントがあっておいといたらrevertされちゃった。
    • 1.1.7だおこのパッチでよくなるかもしれない。このパッチで安定しているところがあるのであてたほうがいい。
  • IPsecのSA切れる理由
    • DPD(dead peer detection)でheartbeatとかが死んでるなって時にSA落とすケース
    • DPD生きてるけどIKE鍵交換がうまくいかない(回線品質悪いとうまくいかないケースがある気配)
      • パケロスが多いところで頻繁におこるかも

最近のVyOSの様子 2017/01

@higebuさん

Webサイトとかシステムが変わりました

  • 公式HP, 開発ブログ
    • BTS(bugzilla→fabricator): 重要そうじゃないのは移行されてないみたい
  • RocketChat を自分たちでホスティング
    • 日本語channelもある
  • Forum
    • 各言語(日本語も)のフォーラムができた

1.2/2.0とかいつでる?

  • 公式Blogをみましょう : "Change is coming to VyOS project"

次のバージョンについて

  • 1.2
    • build-iso → vyos-build (debian live base)
    • Jessieベース + いろんなパッケージを新しく (新しくしたら壊れてるのもある)
    • テストがんばるしかない(使う機能が動けばいいや…というながれ)
  • Perl scriptしんどい → python に統一しようという流れ
    • コーディング規約とかもでてる。
  • 2.0
    • vyconfがOCamlでかかれてる (バックエンドなので普通の人は触らない)
    • コマンドテンプレートがXML
    • コンフィグのスキーマが変わりそう。古いのもサポートはしそうだけど。fabricatorで投票している。
    • 内部APIが protobuf に
    • ベースOSも見直しそう
    • Web UI Project も
    • development digest を読みましょう

自分が最近やっていること

  • vyos-buildにいろんな仮想環境用のスクリプトを足している (packer based)
  • vyos-cloudinit
    • EC2だけcloudinit的なのがある。いろんなところで動きそうなのに書き換え中
  • vyos自体のテスト



所感。

とりあえずみんないろいろやってみてはまったところの話であーそれ見たみたいな話がわらわらっとあがってるのをみると、やっぱりこういうミーティングとかは有用なんだなあと思う次第であります。開催自体は有志によるベストエフォートだからなかなか定期的にやるのも難しいというのはわかりつつ。平日昼間開催でキャンセルは入ったもののそれでも20-30人くらいは参加者がいるというのを考えると、やっぱりそれなりに関心がある人が多いんだなあ、とおもったのでした。あと、LTネタあったのを全部終わった後にああそういえばアレがあったなとか思い出したりしたので、ネタの収集/吸い上げという意味でもそれなりに定期開催されるのがいいんじゃないかなーと思いました。自分でやったことを忘れている…。

NetOpsCoding #4 参加メモ

NetOpsCoding #4 に参加してきたのでいつものメモです。公開資料などについては atnd のページを参照してください。

ネットワーク機器運用自動化の傾向と対策, Fixpoint/服部さん

Kompila

  • 定型的な処理を「ジョブフロー」として登録しておくことで自動実行でいる
    • bash, ruby, python, なども
    • パラメータをWebから入力してフローをキックとかもできる。

今回手伝ったNW運用自動化(運用チーム)のしごと

  • 日々いろんな作業依頼がある

現状の運用

  • いわゆる「ガチガチ」な運用
  • アプリ開発者 → NW運用チームに作業依頼(メール)
  • NW作業担当者は依頼内容に基づいたExcelで作業手順書作成 → 責任者レビュー・承認リレー
  • 承認が下りたら作業実施 → 作業担当者へ手順書を渡して実行

毎回同じような手順書書かないといけない。実際の作業は手作業なので入力ミスや誤設定とかのリスクがある。

スクリプト実行で自動化だ!

  • 作業担当とかみんなノンプログラマ
  • 簡単なスクリプトと行ってもプログラム書くハードルが高い。
  • 責任者もノンプログラマなので、プログラム見ても判断が難しい。

ノンプログラマがやりやすい手順書みたいなのってないか?

  • YAML手順書へ
  • 日本語キーワードで可読性をあげる
  • キーワードの表記揺れに対応する

Kompiraによる自動運用

  • Excelのかわりに YAML 手順書
  • 承認リレーとかは従来通りにしてある
  • 作業実施は Kompila がYAML手順書を自動実施する。

実行の流れ

  • parse
  • パラメータのチェックとか手順書の内容が意味的に合っているかどうかをいまの設定情報を元にチェック。
    • 今のコンフィグ情報を取ってきて、YAML手順書のパラメータの整合性チェック。存在しないオブジェクトの参照や二重登録など。

自動化システム実現の際にあたった壁

  • CLIの壁
  • Telnetの壁
    • Telnetでしかアクセスできない機械がある
    • expect script
    • 踏み台の処理
  • 冗長構成の壁
    • 機械によっては active 側にだけコマンド入れるモノがある。どっちがActiveなのかを判断して動かないといけない。
  • 設定リカバリの壁
    • 間違えたときに切り替えたい、というのが発生する。
    • リブートさせたくない
    • コマンドを取り消すコマンドを入力する…

CLIの壁

  • SSG: get config → shlex で字句解析
  • コマンド生成: YAML を解析して構文木 → トラバースしてコマンドを生成

Telnetの壁

  • 実行したコマンドの結果とプロンプトの区別がない。
    • コマンドが終わってプロンプトが出てからコマンド入れないといけない。
    • コマンドによってはプロンプトが変わる
    • プロンプトが出る前にエラーメッセージが出ることがある。
    • エラーメッセージハンドリングは地道にやるしかない。
      • expect script が秘伝のタレ化…

冗長構成の壁

  • Activeにだけコマンドを来る。ログインした上で状態チェックをする。

設定リカバリの壁

  • 誤投入に対して元に戻したいけど、リブートするのはいやだ
  • 逆コマンド実行をする。
    • 投入したコマンドから逆コマンドが特定できるとは限らない
    • 設定差分(diff)から逆コマンドを生成する。
  • 単純に diff とれれば良いわけではない…

まとめ

  • Kompila でNW運用自動化システムを
  • 実際に現場で使うには、細かい処理を入れ込まないと行けなくて非常に面倒くさい。
  • 今のところ銀の弾丸はない
    • 地道にやるしかない
  • 自動化することで、手作業より確実にオペレータ工数削減はできる。

QA

  • 構成管理
  • YAMLのモデル、スキーマ?
    • つくってない。入れられるパラメタは決めてあるけど。
  • 機械のバージョンによって文字列パースが違ったりする。DB内とつらいんじゃない?
    • たぶんきつくなる。いまのところ、新しい機器に対してやるときは事前に動作チェックを屋って、処理追加を入れていって対応させる、という方向。

構成管理DBをGitで管理したいネットワーク管理者の憂鬱, internet Multifeed/川上さん

Internet Exchange とは?

  • 平たく言うとL2スイッチがある。
  • 各社がBGPルータをつないで、経路交換をして、トラフィックを交換する。
  • 100くらいの顧客(AS)がつながってる

NagiosMRTGの設定を自動生成

  • 設定作業
    • プロビジョニング、開通作業、バックボーン作業(影響がある・ない)
  • いままで手作業
    • コンフィグファイルが非常にわかりにくい。不幸な人為ミスのオンパレード, 開通作業に5時間かかる…とか。
    • DBから自動生成したい。

どういうデータベースを?

  • RDB, Text, NoSQL, Other(Excel?)
  • 自分たちの運用方法や文化にあった技術を選ばないと、現場が崩壊してしまう。
    • 運用を無視したツールファーストはNG

例: スイッチのファームウェアアップデート

  • 設定変更手順
  • オペレーション
    • 作業者+確認者の2名体制
    • サーバ系設定
      • 各ステップのコンフィグは前日までに確認・承認しておきたい
      • 全体の作業内容は変化があるので、コンフリクトが起こる可能性がある。衝突が起きたら回避できるような仕組みじゃないといけない。

DBがRDBだったとすると…

  • コンフリクトに気づけないといけないし、気づいたら担当者が変えられないといけない。
    • SQLとかまでやるのはハードルが高い。生SQLとかやらないでしょう。モデルやインタフェースのオブジェクトをどう考えるか?
  • WebUI?
    • WebUIの手順書は書くのが大変。その通りに行われる保証がない。
    • 実装コストが高い…
  • rails console?
    • つらい

Gitならなんとかなるんじゃない?

  • 運用者が読み書きしやすい・機械処理ができる・バージョン管理できる。
    • ファイルなので誰でもいじれる。(中身はYAML)
    • 意味のあるコミット単位
    • ブランチを切ってコンフィグを作れる
    • ssh + git pull でデプロイできる

ワークフローの変化

  • 作業用ブランチ → テキストでコンフィグ → レビュー
    • 差分確認、コマンドの確認を担当者がやれる。入力するコマンドのチェック。
  • メンテナンス前に担当者が rebase して変更停止(master freeze)
  • 作業実施後に branch 削除

2年半くらい運用している

  • YAML, git にカンするトラブルは特になし。
    • どっちかというと人為ミス。typoとか。
  • Good
    • ブランチ斬る運用
    • 意味のある単位でのコミット、差分によるダブルチェック
  • Bad
    • オブジェクト管理レーションが相互参照
      • pry debug がつらい
      • stack trace がおもい
    • git pull デプロイに時間がかかる
      • gitlab のパフォーマンス
    • プログラムからDB変更する

運用自動化の段階

  • phase.1, スクリプトにパラメタ渡して人が実行
  • phase.2, DBから全部コンフィグ作って機器にデプロイ
    • 機器側にコンフィグリロードの仕組みがないといけない
  • phase.3, イベントドリブンで必要なコンフィグ差分を機器に投入
  • YAML をもとにしているとつらみ
    • コメントは消える
    • 人が書いたモノと出力されるモノに違いがある
    • 人の編集とシステムによる編集のコンフリクト…

phase2→3

  • イベントごとにコンフィグ全生成というのはつらい
  • DBが半端に更新されているタイミングでコンフィグ生成しているとNG
    • branch 切れるDBというのもあるらしいけど (noms)

phase.3

規模

自動化実行に当たっての壁

  • 自動化のための整理

QA

  • デプロイを早くすることはやらない?
    • いまのところやってない。早くしても timing issue, デーモンリロードとかを伴うというのもある。早くはしたいけど。いま時間がかかる理由→ MRTGが5分間隔で動く。バックアップ側デプロイ→確認→メイン側デプロイ。過去、MRTGデプロイでバグを踏んでCPU食って死ぬ、というのがあって、サーバ側正常性の確認を入れている。そこの運用をあきらめられるのであれば2秒デプロイみたいなのも検討したいが。

LT

例によってLTについてはメモを取っていません。いくつか思うところや感想などを。

  • スマホのセンサーでネットワークを操る
    • スマホを振ったら Ansible Tower をたたいて経路変更 → 振った方向へ経路を切り替える。
    • LTでは残念ながらでも環境への接続が上手くいかず…
    • 懇親会で動くところを見せてもらえました!
    • デモ動画ができてた!

  • NetTesterで物理ネットワークのテストをプログラム!
    • あとで fixpoint の方とちょっと話をしたんだけど、感じている課題感や直面している課題はもうそのままですね。いろんなアプローチでどうにかできないかを試していけると良いと思います。
  • イベント紹介: TremaDayってどんなイベント?

感想

どれも何かしらの実装やコーディングの話が出てきて、具体的な話に突っ込んできているのが良かったなあと。まあその分泥臭い話も多めではありました…。最初の、fixpoint さんの取り組みとか、LTの "そろそろSSH/Telnetを離れて" の話ともそうなんだけど、このCLIベース自動化の話の泥沼からどうにか抜けたいところだなあ、と。あのへんの自動化実装の泥沼加減がわかりすぎるので


というツイートをしてしまいました。Ansible とか、いろんなツールややり方がいろいろ試してみるのはイイと思うんだけど、ちょっと気になるのは、こういうのをやるための地道な作り込みをどうもみんな何かしら再発明しているような気がするところかな…。いや、自分も最近ちょっとやってたというのもあるからなんだけど。APIで操作可能なガワを用意しても結局中身のCLI処理回すところの仕掛けやナレッジは自分で頑張らないといけないのがつらいなあ……とかね。プロンプトの正規表現作るとか、エラーメッセージ調べるとかのあれこれが超しんどい。何かこの辺をもうちょっと共有する・共通化するようなものがあればなあ、と思いました。