- 外部ネットワークへトンネリングするリバースプロキシ
- 本番レベルのトラフィックを処理し、ホスティング(特にKubernetes上)が簡単になるよう設計されている
- 顧客ネットワークや BYOC(Bring Your Own Cloud)サービスのサービスを公開したり、IoTデバイスに接続したりできる
- 耐障害性、拡張性、無停止デプロイのためにノードクラスターとしてホスティングできる
Pikoの仕組み
- アップストリームサービスは Piko に接続してエンドポイントを登録する
- Piko はアウトバウンド専用接続を通じて、登録されたアップストリームサービスへエンドポイントへのリクエストをルーティングする
- これは公開ポートを開かずにサービスを公開できることを意味する
- 受信した HTTP(S) リクエストは Host ヘッダーまたは
x-pico-endpoint ヘッダーを使って対象エンドポイントの ID を識別する
- 複数のアップストリームサービスが同じエンドポイントを登録している場合、Piko はそのエンドポイントへのリクエストを登録済みアップストリーム間でロードバランシングする
Pikoの設計目標
本番トラフィックの処理
- Piko はテストや開発ツールではなく、本番トラフィックを処理するよう設計されている
- Piko を使って顧客ネットワークにアクセスし、BYOC ソリューションを構築し、IoT デバイスにアクセスできる
- これを支えるため、Piko は耐障害性、水平スケーリング、無停止デプロイのためにノードクラスターとして実行できる
- また、監視とデバッグのための可観測性ツールを提供する
ホスティングの容易さ
- Piko は Kubernetes 上でホスティングしやすいよう設計されている
- Piko クラスターは HTTP ロードバランサーまたは Kubernetes Gateway の背後で、Kubernetes StatefulSet としてホスティングできる
- アップストリームサービス接続とプロキシクライアントのリクエストは、クラスター内のすべてのノードにロードバランシングでき、Piko はリクエストを正しいアップストリームへルーティングすることを管理する
セキュリティ
- アップストリームサービスはアウトバウンド専用接続を通じて Piko に接続する
- Piko はその接続を通じてすべてのリクエストをアップストリームへルーティングする
- そのため、アップストリームはリクエストを受信するためにポートを開く必要がない
- Piko は、アップストリームサービスがエンドポイントを登録する前に認証することをサポートする
- Piko はセルフホスト可能なため、プロキシクライアントと同じネットワーク内でホスティングし、外部ネットワークからのリクエストを受け付けないようにできる
- たとえば、認証済みアップストリームサービスが TLS 経由でインターネットから登録できるようにしつつ、Piko と同じネットワーク内にあるプロキシクライアントに対してのみ内部ルートを提供できる
6件のコメント
これは、公開ポートを開けなくてもサービスを公開できることを意味します。
例えば、情報工学科の学部生Aがプロジェクトをしているとしましょう。
一生懸命開発したAは、いよいよ発表日が近づき、このサービスをデモしたいと考えます。
しかしAは、サーバーを書けるようになったばかりで、サーバーやインスタンスを立ち上げる方法を知りません。
しかも寮に住んでいるため、ポートフォワーディングでサービスを公開することもできません。
そこでトンネリングの出番です。
寮にあるノートPCで
ngork http 8080と打つとランダムなURLが発行され、教室でデモするときにユーザーがこのURLに接続すれば、ngrokサーバー-ngrokクライアント-AのサーバープログラムへとHTTPリクエストが転送され、別途ポートフォワーディングをしなくてもサービスを公開できるようになります。https://github.com/andydunstall/piko/pull/20
プロジェクト名が Pico から Piko に変更されたようです。すでに
picoという名前のエディタがあるため、衝突の問題で変更されたものと思われます。picoエディタを知らないという返答を見て、自分のオッサン力を感じます。nanoの前はpicoだったのに(泣)昨日見つけて整理して投稿したものですが……その間に変わっていましたね(涙) 修正しておきました。