PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

Hyperledger FabricをKubernetesで動かすという、なかなか骨の折れる挑戦

記事の要点

まず、何の記事なのか

この記事は、Hyperledger Fabricという企業向けのブロックチェーン基盤を、Kubernetes上に構築していく開発日記の4日目の記録です。

タイトルだけ見るとかなり硬そうですが、内容はむしろ「地味で面倒なところを、どうやって本番運用に耐える形へ持っていったか」という実践寄りの話です。
ここが面白いところで、ブロックチェーンって「未来っぽい」響きがありますが、実際に動かすとなると、かなり泥臭いインフラ作業になるんですよね。この記事はその現実をちゃんと見せています。

Hyperledger FabricとKubernetesを組み合わせる意味

まず前提として、Hyperledger Fabricは許可型ブロックチェーンです。
ざっくり言うと、「誰でも参加できる公開チェーン」ではなく、​参加者を管理できる企業向けの仕組みです。サプライチェーン、金融、医療のような場面で使われやすい、と記事では説明されています。

一方のKubernetesは、コンテナをまとめて管理するための仕組みです。
簡単に言えば、​壊れたら自動で立て直す、必要なら増やす、設定をコードで管理するための土台ですね。

この2つを組み合わせると、

image_0003.svg

がやりやすくなります。
ただし、記事でもはっきり書かれている通り、​便利だけど学習コストは高いです。これは本当にその通りで、私も「ブロックチェーンをKubernetesで」と聞くと、かっこよさの裏で相当な苦労があるだろうなと思います。

この記事で作っている構成

ネットワークは主に次の要素で構成されています。

image_0004.svg

加えて、これらは専用の fabric namespace に置かれ、通信はNetworkPolicyで制限されています。
要するに、「同じKubernetesクラスタの中でも、Fabric用の閉じた区画を作って運用している」ということです。これはかなり筋がいい設計だと思います。

プロジェクト構成がちゃんとしている

記事ではディレクトリ構成も紹介されています。

この構成の良さは、「人間が頑張る運用」から「再現できる運用」へ寄せている点です。
インフラは、手で1回動かせることより、​同じ手順を何度でも安全に繰り返せることのほうがずっと大事です。ここは地味ですが、かなり重要です。

image_0005.svg

自動デプロイの工夫がかなり実用的

記事で特に印象的なのが、kubectl apply をただ並べるのではなく、​デプロイ用スクリプトをちゃんと作り込んでいる点です。

たとえば、

といった工夫があります。

これ、派手さはないですが、現場ではとても効きます。
深夜2時に障害対応する側の気持ちになれば、「失敗したら直近のログを出してくれる」だけでだいぶ救われます。かなり親切です。

image_0006.svg

deploymentの待機

kubectl rollout status を使って、Deploymentがちゃんと立ち上がるまで待っています。
これは「作ったつもり」ではなく「実際に起動した」と確認するための大事な処理です。

jobの待機

チャネル作成やchaincodeインストールはKubernetes Jobsで実行し、その完了を待ちます。
もしタイムアウトしたら、関連ログの最後の50行を出してから失敗扱いにしています。

このあたりは、運用の現実感があります。
「動かなかったら人間が見に行く」のではなく、「スクリプトが先回りして情報を出す」。こういう設計は本当に強いです。

セキュリティの考え方もまっとう

この記事では、セキュリティ面の判断もかなり丁寧です。

1. podをrootで動かさない

securityContext で、次のような設定をしています。

image_0007.svg

要するに、​​「もし壊れても被害を広げにくい」ように、権限をかなり絞っているわけです。
個人的には、これは「本番を意識しているかどうか」が一目でわかるポイントだと思います。雑なPoCだとここが甘くなりがちです。

2. NetworkPolicyで通信を制限

Ordererには、必要なpeerだけが通信できるようにしています。
Kubernetesは便利ですが、何もしないとクラスタ内の通信がゆるくなりがちです。だからこそ、​​「誰が誰に話せるか」を明示するのは大事です。

3. 秘密情報をGitに入れない

証明書や鍵、パスワードは、環境変数やKubernetes Secretsから読み込む設計です。
.env.example だけを置いておくのも、協力者に必要な項目を伝えつつ、本物の秘密は守れるので良いやり方です。

4. 事前チェック

kubectl があるか、クラスタに接続できるかを最初に確認しています。
これも地味ですが大事で、「そもそも接続先がないのにデプロイして失敗する」という無駄を防げます。まさに fail fast, fail loud です。

つまずきポイントはやっぱり証明書管理

Fabricで特に厄介なのが、​crypto material management です。
これは証明書や秘密鍵などの管理のことですが、Fabricではこれが大量に出てきます。

image_0008.svg

記事では、cryptogen が大量の証明書と鍵を生成し、それらがどのコンポーネントでどれと対応しているかを追うのに、かなり苦労したと書かれています。
これは本当に想像がつきます。証明書周りは、1つでもズレると通信が全部こけるので、デバッグがとにかく面倒です。

ここは「ブロックチェーンだから難しい」というより、​分散システムと暗号の面倒さが合体している感じですね。そりゃ大変です。

RAFTのリーダー選出も意外な落とし穴

もうひとつの学びとして、​RAFT leader election の話があります。

RAFTは複数ノードの合意形成で使う仕組みですが、初期起動時に orderer のPodが揃わないと、​election timeout の間にまとまらず、ネットワークが立ち上がらないことがあります。

ここで効いたのが、

image_0010.png

です。
つまり、「立ち上がっていることをちゃんと確認しながら次へ進む」ことが、ただの親切ではなく、ネットワーク全体の起動条件になっていたわけです。これもかなり実践的な話です。

Jobsを“一回きりの作業”に使うのは賢い

記事の中で、Kubernetes Jobsを使ってチャネル作成やanchor peer更新をしている点も紹介されています。

これは面白いです。
なぜなら、こういう作業って「起動時に一度だけやりたい」ものが多いからです。

Jobsにすると、

image_0012.png

という利点があります。
私も、こういう「一度きりの操作をちゃんと一級市民として扱う」設計はかなり好きです。スクリプトの闇鍋よりずっと健全です。

今後やりたいこと

記事では次の展開も挙げられています。

ここを見ると、まだ「完成」ではなく、​本番運用に向けた土台作りの途中だとわかります。
逆に言えば、この記事は「デプロイできた!」で終わらず、監視・秘密管理・自動化まで見据えているのが良いです。インフラは動かして終わりではなく、​見守れて初めて本物ですからね。

個人的におもしろいと感じたところ

正直、この記事でいちばん面白いのは、ブロックチェーンそのものより、​ブロックチェーンを“運用できる形”に落とし込んでいることです。

image_0013.png

世の中には「ブロックチェーンを作った」で止まる話が多いですが、この記事はそこから一歩進んで、

まで踏み込んでいます。
この視点があると、話が一気に現実味を帯びます。私はこういう「キラキラ技術の裏にある地味な実装」が好きです。

まとめ

この記事は、Hyperledger FabricをKubernetes上で運用するための、かなり実践的なメモです。
派手なデモというより、​本番に近い形で安全に動かすには何が必要かを丁寧に積み上げているのが魅力です。

特に重要なのは、

image_0014.png

あたりです。

ブロックチェーンとKubernetesは、どちらも単体で難しいのに、組み合わせるとさらに難しい。
でもそのぶん、ちゃんと設計できたときの価値は大きいはずです。この記事は、その「しんどいけど、やる価値はある」感じをうまく伝えていると思います。


参考: Developer Journal day4..Deploying a Hyperledger Fabric Network on Kubernetes — From Zero to Production-Ready published

同じ著者の記事