在 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 形成一个点对点 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 次)

ps 因为我是 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 期望 chart 名称作为参数

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

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

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

© . All rights reserved.