LND-GC-DEPLOY

LNDをGKE上で構築しようとしていて、最も参考になるのはこのリポジトリだ。
lightning peachは、bitfuryの中でlightningに専任するengeneerチームだという理解である。

LND-GC-DEPLOY

これは、自分でLNDを構築する簡単な方法を提供しているコードだ。
GKEを使うことを前提としていて、さらに、neutrinoを使うことを前提としている。
ちなみに、接続先は、proxy.lightningpeach.com:8333である。

基本的なnetworkは、下記のような図になるか。

neutrinoを使うことについて

この軽量な仕組みは、neutrinoを使っているから成り立っている。
LNDを導入したいユーザは、ここに書かれているreadme通りに動かせば、簡単にLNDを自分でつかうことができるだろう。

BTCD側も、portさえ公開していればLNDのクライアントを増やせるので、とてもシンプルな構成だ。

素晴らしいように見えるが、Why I don’t celebrate Neutrinoという記事もあるので、賛否両論のようだ。
lightning peachの提供するフルノードを完全にtrustする必要は残る。

TLSの管理について

persistance volumeに設定しているのは、/root/.lndである。ここには、macaroonやTLSなど、認証周りのファイルに加え、LNDの保存データなども保存されるので、これを設定しているのは正解だ。

ただし、このTLSはローカルホストからアクセスされることを前提としているため、K8Sのサービスのように、あとからIP addressが定まるサービスの場合は、そのIPアドレス向けにTLSを再作成する必要がある。

具体的なアプローチは、一度LNDノードを構築し、external IPが発行されたあとに、cfsslを用いて再構築をするという方法だ。

#!/bin/bash
IP=$(kubectl get services | grep lnd-pod | awk '{print $4}')  
kubectl exec lnd-pod -- rm /root/.lnd/tls.cert  
kubectl exec lnd-pod -- rm /root/.lnd/tls.key  
# kubectl exec lnd-pod -- cat server.json > tmp.json
cat server.json >> tmp.json  
sed -i "s/address/$IP/g" tmp.json  
kubectl cp tmp.json lnd-pod:/server.new.json  
rm tmp.json  
kubectl exec lnd-pod -- sh -c 'cfssl gencert -initca server.new.json | cfssljson -bare ca -'  
kubectl exec lnd-pod -- sh -c 'cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=config.json server.new.json | cfssljson -bare server'  
kubectl exec lnd-pod -- sh -c 'mv /server.pem /root/.lnd/tls.cert'  
kubectl exec lnd-pod -- sh -c 'mv /server-key.pem /root/.lnd/tls.key'  
kubectl delete pod lnd-pod  

この方法を使えば、比較的容易にK8Sへのデプロイが可能になる。