$30 off During Our Annual Pro Sale. View Details »

AccessPoint Operator on Raspberry Pi

RyuSA
July 21, 2021

AccessPoint Operator on Raspberry Pi

Wi-FiのアクセスポイントをCRDで管理できるようにしたKubernetes Operatorを実装した話です
Kubernetes Meetup Tokyo #43

@bell17 さんのKubebuilder資料:https://speakerdeck.com/bells17/kubebuilder-introduction
ブログ:https://ryusa.hatenablog.com/entry/ap-operator-on-raspberrypi
Gtihub:https://github.com/RyuSA/accesspoint-operator

RyuSA

July 21, 2021
Tweet

More Decks by RyuSA

Other Decks in Technology

Transcript

  1. RyuSA
    Raspberry Pi上にWi-Fi APを⾃動構築︕
    - してくれるKubernetes Operatorを作ったよって話 -
    Kubernetes Meetup Tokyo #43

    View Slide

  2. Financial Service Engineer
    Java & SpringBoot / TypeScript & React
    Docker / Kubernetes
    : ryusa_eng
    RyuSA
    : RyuSA

    View Slide

  3. 寝室にいるとWi-Fiの電波が弱い問題
    • ブロードバンドルーターから寝室までの距離が遠いため減衰しやすい🥺
    • さらにルーターと寝室の間にはキッチンと壁……もうこれはわからんな……
    • 時折Wi-Fiが途切れることもあり、かなり困る
    • Wi-Fiルーターのグレードアップをすれば︖
    • そんなお⾦がない︕︕︕︕
    • せっかくなので、何か作りたい︕
    キッチン
    ルーター

    ⽞関
    寝室

    ここが︕遠い︕

    View Slide

  4. そこで、hostapd
    • hostapd = ワイヤレスネットワークインタフェースをAPモードとして管理してくれるソフトウェア
    • APモード ≒ Wi-Fiアクセスポイント稼働
    • 設定ファイルでSSIDやパスワード、バンド帯などを指定して起動できる
    • UNIX SocketでAPの状態を確認することができ、可観測性もGood
    • Raspberry Pi 4をWi-Fi APとして動かすことができる
    • ポータビリティ(物理)との相性抜群
    • hostapd on ラズパイを寝室に配置して電波弱い問題を解決︕
    • 先⼈たちの轍を踏んでいけ……︕

    View Slide

  5. こんな感じのストーリーを達成したい
    1. 定義ファイルを投げつける
    2. いい感じに計算する
    4. Wi-Fi、⼤地に⽴つ︕
    3. 設定ファイルが分配される

    View Slide

  6. おぼろげながら、浮かんできたんです。このアーキテクチャが。
    AccessPoint Operator
    eth0 wlan0
    br0
    hostapd
    eth0 wlan0
    br0
    hostapd
    AccessPoint Resource
    (SSID / Password / etc.)

    View Slide

  7. Operatorの実装にはKubebuilderを採⽤
    • Kubebuilderを使ってAccessPointリソースを監視するOperatorを実装
    • KubebuilderはOperatorを実装するためのフレームワークのひとつ
    • @bells17 さんがHello worldデモをしてくださったのがきっかけ
    • https://speakerdeck.com/bells17/kubebuilder-introduction
    • 実際にはAccessPointとAccessPointDeviceの2種類のリソースを実装
    • Wi-FiのAPには物理側の情報も必要(インタフェースなど)であるため責任を分離した
    • AccessPointにはSSIDやパスワード、Wi-Fi APのデプロイ先など「利⽤者」が責任を持つ情報を含ませる
    • AccessPointDeviceにはインタフェースやブリッジなど「管理者」が責任を持つ情報を含ませる
    • 正しくリソースを分離できてるか……だれか……

    View Slide

  8. 結論︓たのしかった
    • つまるところ、Kubernetesをhostapdデーモンのランチャーとして使ったサンプルでした
    • https://github.com/RyuSA/accesspoint-operator
    • 実運⽤するのであればk3sなどの軽量なディストリビューションを使う⽅がベター
    • 実はまだ課題⼭積み
    • エンハンスやバグがちょいちょい残ってる
    • AccessPointDeviceだけ削除しても対応しているDaemonSetが削除されない
    • Wi-Fiチップの制限を反映できていない(SSIDの数とか)
    • 特権PodをバラまくDaemonSetってどうなんだろう……
    • 継続して適当に実装できたらなぁと👍

    View Slide

  9. Thank you

    View Slide