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へのデプロイが可能になる。