Hyperledger Fabric on openshift 3.11

添加3个openshift node 节点

登录管理员账号

oc login

给新加节点添加label fabric=true

for i in 82 83 84
do
    oc label node node$i.pld.paradeum fabric=true
done

安装 fabric 二进制

wget https://github.com/hyperledger/fabric/releases/download/v2.0.1/hyperledger-fabric-linux-amd64-2.0.1.tar.gz
tar -xzf hyperledger-fabric-linux-amd64-2.0.1.tar.gz
# 移动 bin 目录二进制
mv bin/* /bin
# 检查是否安装成功
configtxgen --version
# configtxgen:
#  Version: 2.0.1
#  Commit SHA: 1cfa5da98
#  Go version: go1.13.4
#  OS/Arch: linux/amd64

下载fabric-external-chaincodes

初始化配置

configtx.yamlcrypto-config.yaml 已经配置好3 个 RAFT orderer 服务,2个组织,每个组织有一个peer(org1和org2),每个组织有一个CA。默认不需要修改这些文件。

生成所有密钥文件、channel的创世块、CA证书文件使用下面脚本

同步 fabric-external-chaincodes 目录到fabric 节点

在/etc/ansible/hosts中添加fabric 组

同步目录,设置buildpack/bin 脚本执行权限

创建project

部署 orderer-service

分别在orderer-service/orderer[0-2]-deployment.yaml 文件中添加节点选择亲和性

发布orderer-service

检查服务启动状态

部署 org1 (组织1)

检查服务状态

部署 org2 (组织2)

检查服务状态

设置 channels(通道)

进入cli-org1 容器中

创建 channel

org1 从创建块 加入 mychannel

进入cli-org2 容器中

获取 mychannel

org2 从创建块 加入 mychannel

查看 当前 peer 加入的 channel 列表

Peer节点安装外部 Chaincode(链码)

配置连接 chaincode 信息

进入 cli-org1

打包链码连接信息,并部署

记下上面的 链码包标识符, 后面会使用,如果没记住,可以使用下面命令查询 链码包标识符

现在我们为org2重复上面的步骤,但是由于我们希望用另一个pod为org2的peer节点提供链码服务, 因此我们需要修改connection.json中的地址配置:

进入 cli-org2

同样记录链码包的标识符,它应该与之前org1的不同。

Fabric外部链码的构建与部署

制作 chaincode docker 镜像

因为部署openshift 3.11 使用的docker版本为1.13.x, 不支持多层dockerfile 构建 ,所以在hub.docker.com 创建了自动根据 Dockerfile 打镜像的repo

没有修改需求的可以直接使用 ss75710541/chaincode-marbles:1.0 镜像

部署chaincode

修改 k8s/org1-chaincode-deployment.yaml 中下面内容

修改 k8s/org2-chaincode-deployment.yaml 中下面内容

观察 pod 状态

进入cli-org1 审批org1 chaincode 定义, 注意修改命令中的--package-id

进入cli-org2 审批org2 chaincode 定义, 注意修改命令中的--package-id

检查chaincode 提交准备状态

在通道中提交这个链码的定义(可以在任意peer cli)

查询已经提交了的 链码定义

测试外部chaincode

我们可以从cli pod中测试链码的查询和交易调用。尝试创建一个宝石并初始化链码:

查询 创建的宝石 marble1,报错提示不存在

可能是因为上面创建宝石命令使用了 --isInit 只是初始化了链码,但是没有真正创建宝石marble1,去掉 --isInit, 再创建一次

查询宝石信息:

创建另一个宝石:

查询宝石信息:

也可以执行如下命令查询链码日志:

参考链接

https://medium.com/swlh/how-to-implement-hyperledger-fabric-external-chaincodes-within-a-kubernetes-cluster-fd01d7544523

http://blog.hubwiz.com/2020/03/12/fabric-2-external-chaincode/

Last updated

Was this helpful?