WSL2 で Podman を使っていて、こんな悩みはありませんか?
これらの問題を解決するために、Flatnet というプロジェクトを開発しています。そして今回、その管理ツールである Flatnet CLI を公開しました。
Flatnet は、WSL2 + Podman 環境の「NAT 地獄」を解消するためのツールセットです。
従来の構成: 社内LAN → Windows → WSL2 → コンテナ(3段NAT)
Flatnet を使った構成: 社内LAN → Gateway → コンテナ(フラットに到達)
Windows 上で動作する Gateway が、社内 LAN からのリクエストを WSL2 内のコンテナに直接ルーティングします。クライアント側は HTTP でアクセスするだけ。特別なソフトウェアのインストールは不要です。
Flatnet CLI は、この Flatnet システムを管理するためのコマンドラインツールです。
$ flatnet status ╭─────────────────────────────────────────────────────╮ │ Flatnet System Status │ ├─────────────────────────────────────────────────────┤ │ Gateway ● Running 10.100.1.1:8080 │ │ CNI Plugin ● Ready 10.100.x.0/24 (5 IPs) │ │ Healthcheck ● Running 5 healthy, 0 unhealthy │ │ Prometheus ● Running :9090 │ │ Grafana ● Running :3000 │ │ Loki ● Running :3100 │ ╰─────────────────────────────────────────────────────╯
Containers: 5 running
一目でシステム全体の状態がわかります。Gateway、CNI Plugin、モニタリングスタック、すべてのステータスを統合表示。
$ flatnet doctor Running system diagnostics...
Gateway [✓] Gateway Connectivity [✓] Gateway API
Network [✓] Windows host reachable [✓] Container network connectivity
Monitoring
[✓] Prometheus
[!] Grafana (port 3000 not responding)
→ Start Grafana: podman start grafana
[✓] Loki
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Summary: 7 passed, 1 warnings, 0 failed
問題があれば、解決方法まで提案してくれます。「動かない」で終わらず、「どうすれば動くか」がわかる。
$ flatnet ps CONTAINER ID NAME IMAGE FLATNET IP STATUS a1b2c3d4e5f6 web nginx:latest 10.100.1.10 Up 2 hours b2c3d4e5f6a7 api myapp:v1 10.100.1.11 Up 1 hour c3d4e5f6a7b8 forgejo codeberg/forgejo:9 10.100.1.12 Up 3 hours
Podman の ps コマンドとの違いは、Flatnet IP が表示されること。このIPアドレスを使えば、社内LANから直接アクセスできます。
# Gateway のログを確認 $ flatnet logs gateway --since 1h
# コンテナのログを確認 $ flatnet logs myapp --follow
# エラーだけ抽出 $ flatnet logs gateway --grep error
Gateway、CNI Plugin、各コンテナのログを統一されたインターフェースで確認できます。Loki が動いていればそこから取得し、なければ Podman にフォールバック。
$ flatnet upgrade Current version: 0.1.0 Latest version: 0.2.0
Downloading flatnet v0.2.0... [########################################] 100% Download complete.
Upgraded successfully to v0.2.0!
GitHub? Releases から最新版をダウンロードして自動更新。パッケージマネージャ不要。
ワンライナーでインストールできます。
curl -fsSL https://raw.githubusercontent.com/khayashi4337/flatnet/master/scripts/install-cli.sh | bash
これだけで ~/.local/bin/flatnet にインストールされます。
Flatnet CLI は Rust で書かれています。
| ライブラリ | 用途 |
| clap | コマンドライン引数のパース |
| tokio | 非同期ランタイム |
| reqwest | HTTP クライアント |
| serde | JSON シリアライズ |
| colored + tabled | ターミナル出力の装飾 |
シングルバイナリで配布されるため、依存関係のインストールは不要です。
flatnet doctor は CI/CD パイプラインでも使えます。
# エラーがあれば非ゼロで終了 flatnet doctor --quiet
# JSON 出力でスクリプトから利用 flatnet doctor --json | jq '.summary.failed'
デプロイ前のヘルスチェックや、デプロイ後の検証に便利です。
Flatnet プロジェクトは現在も開発中です。
| Phase | 内容 | 状態 |
| Phase 1 | Gateway 基盤 - NAT 越えの基本機能 | 完了 |
| Phase 2 | CNI Plugin - コンテナの自動 IP 割り当て | 進行中 |
| Phase 3 | マルチホスト - 複数の WSL2 ホスト間通信 | 予定 |
| Phase 4 | 本番運用準備 | 予定 |
Flatnet CLI を使えば、WSL2 + Podman 環境の管理が格段に楽になります。
ぜひ試してみてください。
curl -fsSL https://raw.githubusercontent.com/khayashi4337/flatnet/master/scripts/install-cli.sh | bash flatnet status
フィードバックや Issue は GitHub? でお待ちしています。