lndmonをremoteLNDに接続する

lndのノード監視ツールであるlndmonをローカルからremoteのLNDに接続したのでメモ。

まず、macaroonsとtlsを用意する。 macaroonはreadonly.macaroonsをコピーしてくる。

kubectl cp lnd-btcd-0:root/.lnd/data/chain/bitcoin/simnet/readonly.macaroon ./readonly.macaroon -c lnd  

続いて、tlsをコピーする。前提として、このtlsは、gkeでservice立ち上げ後に再作成したものである必要がある。 再作成は、下記のshellの実行で取得できる。podのdeleteをしているが、statefulsetを前提としているので、勝手に再起動される。

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

.envファイルとdocker-composeを編集する必要があった。 まず、docker-composeは下記のように、--lnd.macaroondir=$MACAROONPATH --lnd.tlspath=$TLSCERT_PATHを固定値から環境変数に置き換える。

  lndmon:
    build: .
    ports:
      - "9092:9092"
    volumes:
      - ${TLS_CERT_PATH?}:/root/.lnd/tls.cert
      - ${MACAROON_PATH?}:/root/simnet/
    command: --prometheus.listenaddr=0.0.0.0:9092 --lnd.network=$LND_NETWORK --lnd.host=$LND_HOST --lnd.macaroondir=$MACAROON_PATH --lnd.tlspath=$TLS_CERT_PATH

.envは言われた通りでよい。

# lnd settings

# LND_HOST is the IP of the default docker interface.
LND_HOST=x.x.x.x:10009  
LND_NETWORK=simnet  
# Fill in these fields as directed. Note that `MACAROON_PATH` must be the path
# to your readonly macaroon.
TLS_CERT_PATH=./root/.lnd/tls.cert  
MACAROON_PATH=./root/simnet/  

そして、docker-compose upをやる。

docker-compose up  

一定時間がたつと、0.0.0.0:3000からgrafanaに入れる。初期passはadmin/admin。 いい感じだ。