Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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にはインタフェースやブリッジなど「管理者」が責任を持つ情報を含ませる • 正しくリソースを分離できてるか……だれか……

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Thank you