在 Kubernetes 上部署 Hyperledger Fabric

Fabric 和 Kubernetes 结合使用,为处理区块链交易提供了一个强大而安全的平台。
312 位读者喜欢这个。
Improve your DevOps security game with Ansible Vault

Opensource.com

Hyperledger Fabric 是一个开源区块链框架实现,也是由 Linux 基金会托管的 Hyperledger 项目 之一。它是一个用于分布式账本解决方案的平台。

本文旨在通过使用 Kubernetes 来简化 Fabric 操作。这个工具非常适合以下原因:

  • 使用 Kubernetes 很容易实现高可用性 (HA)。
  • Fabric 构建在容器镜像中,Kubernetes 在编排、扩展和管理容器方面非常有用。
  • Kubernetes 支持多租户,使得开发和测试区块链应用程序成为可能。

注意:在本文中,我假设读者对 Kubernetes、Helm、Docker 和 Hyperledger Fabric 有基本的了解。

我将部署一个包含一个 Peer 节点、一个 Orderer 节点、两个组织和一个频道的网络。

Hyperledger Fabric 用例

  1. 企业对企业 (B2B) 合约:这项技术可以用于以可信的方式自动化商业合约。

  2. 资产托管:资产可以在区块链网络上非物质化,使得所有资产类型的利益相关者都可以在无需通过中介或中间人的情况下访问每个资产。目前,资产在许多账本中被追踪,这些账本必须进行协调。Hyperledger Fabric 用一个单一的去中心化账本取代了这些多个账本,提供了透明度并消除了中间人。

  3. 忠诚度:忠诚度奖励平台可以安全地建立在区块链(在本例中为 Hyperledger Fabric)和智能合约技术之上。

  4. 分布式存储以增加各方之间的信任。

Hyperledger Fabric 的优势

  • 许可制成员资格:所有参与者都有已知的身份
  • 高性能和可扩展性
  • 更高的信任级别
  • 数据始终基于“需要知道”的原则
  • 支持对不可变的账本进行丰富的查询

术语定义

  1. Peer:Peer 节点是网络上维护账本状态和管理链代码的节点。任何数量的 Peer 节点都可以参与到一个网络中。Peer 节点可以是背书节点或提交节点。Peer 节点形成一个 Peer-to-Peer Gossip 网络。

  2. Orderer:管理一个可插拔的信任引擎,该引擎执行交易的排序。

  3. 频道:一种数据分区机制,将交易可见性仅限于利益相关者。共识在频道成员之间在频道内发生。

配置文件

网络的所有配置文件都可以在 GitHub 上找到。

  1. configtx.yamlconfigtxgen 工具根据此文件生成创世区块(初始化区块链网络或频道的配置区块),该文件用于启动 Orderer 节点并限制频道创建的权限。创世区块根据 crypto-config.yaml 文件中组织的定义生成。

  2. crypto-config.yaml:cryptogen 工具根据此文件为 Fabric 成员生成证书。

要生成网络工件,请运行 network-artifacts-gen.sh。这将创建 crypto-config 和 channel-artifacts 文件夹。内容将如下所示:

Cryto-config Channel artifacts.png

Orderer channel.tx.png
  1. fabric-ca.yaml:这是 Fabric 的 CA 服务的 Kubernetes 部署模板。它用于组织中的证书管理。

  2. fabric-orderer.yaml:Orderer 节点的 Kubernetes 部署模板。

  3. fabric-peer.yaml:Peer 节点的部署模板

部署

  1. 克隆或 Fork 示例配置。

  2. 将目录更改为 HLF 文件夹。

  3. 安装 Composer(如果您尚未安装),因为我们将使用它在步骤 4 中生成网络工件期间导入身份:npm install -g composer@0.13.0

  4. 如果您想重新生成网络工件,请运行 network-artifacts-gen.sh 文件:sh network-artifacts-gen.sh

  5. 如果您重新生成了网络工件,请提交所有内容并推送到 GitHub 仓库。您需要按照步骤 1 中的说明克隆仓库。

  6. 修改 org1.example.com.yaml 文件以匹配此任务的仓库详细信息。

  7. 记住要浏览 templates 文件并进行相应的修改。

  8. 我将使用 Helm,它是 Kubernetes 的包管理器,来管理部署。Mac 用户可以通过 brew install kubernetes-helm 安装它。Linux 用户:curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash

  9. 通过运行此命令启动本地 Kubernetes 环境:minikube start

  10. 接下来,使用命令 helm init 初始化 Helm。给它十秒钟来完成 Helm 的配置。然后运行

    helm install --name test ./fabric-artifacts -f org1.example.com.yaml

    这将部署 Orderer 节点、Peer 节点和 CA。

    通过列出 Pod 来确认部署:kubectl get po

kubectl get po.png

或者只需启动 Kubernetes 仪表板:kubectl proxy,然后访问链接 http://localhost:8001/api/v1/namespaces/kube-system/services/http:kuber…

Kubernetes workloads pods.png

现在让我们创建并加入频道。运行 channel.sh (即,sh channel.sh)。这将创建一个名为 mychannel 的频道,并将我们的 Peer 节点加入到创建的频道中。检查日志以确认一切正常。

Orderer 节点日志

orderer logs.png

Peer 节点日志

peer logs.png

CA 日志

Ca logs.png

网络现在已准备好供应用程序处理交易。在您的应用程序中,您将拥有一个客户端,它将通过 Fabric REST 服务器向 Fabric 发出请求。这意味着在您的应用程序中的客户端和 Fabric 之间应该有一个网络配置。应用程序可以是移动应用程序、Web 应用程序等。在本文中,我只是想展示使用 Kubernetes 和 Hyperledger Fabric 是多么简单。

User profile image.
我是一名 DevOps 工程师,目前正在对由区块链驱动的应用程序进行运维工作。  我也精通 Javascript、PHP 和 Go。

4 条评论

在仪表板上看到以下错误
test-orderer
PersistentVolumeClaim 未绑定:“orderer-datadir-test-orderer-0”(重复 3 次)

另外,因为我是 k8s 和区块链的新手,请帮助我

PVC 需要一个 PV 才能绑定。您可以描述一下 PVC 并在此处分享结果吗?

回复 作者 Ashish Karpe (未验证)

[ec2-user@ip-192-168-1-135 HLF]$ sh network-artifacts-gen.sh

export VERSION=1.0.2
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')

MARCH=`uname -m`
uname -m

FABRIC="$MARCH-$VERSION"
BIN="$ARCH-$VERSION"
SLEEP_TIMEOUT=10

ORG_DOMAIN="org1.example.com"

if [ ! "$(docker images | grep hyperledger/fabric )" ]; then
docker pull hyperledger/fabric-peer:$FABRIC
docker pull hyperledger/fabric-ca:$FABRIC
docker pull hyperledger/fabric-ccenv:$FABRIC
docker pull hyperledger/fabric-orderer:$FABRIC
docker pull hyperledger/fabric-couchdb:$FABRIC
fi

if [ ! -d "bin"]; then
curl https://nexus.hyperledger.org/content/repositories/releases/org/hyperle…${BIN}/hyperledger-fabric-${BIN}.tar.gz | tar xz
fi
network-artifacts-gen.sh: line 24: [: missing `]'

sleep $SLEEP_TIMEOUT

./bin/cryptogen generate --config=./crypto-config.yaml
network-artifacts-gen.sh: line 30: ./bin/cryptogen: cannot execute binary file

我无法让以下命令工作,因为它 helm 期望图表名称作为参数

`helm install --name test ./fabric-artifacts -f org1.example.com.yaml`

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。

下载开放组织 IT 文化变革指南

用于交付无与伦比的业务价值的开放原则和实践。

© . All rights reserved.