test-network的部署现状

docker+docker-compose

  • ip+端口号:ip不可变,人工维护,不可冲突
  • 脚本化:程度低,部分流程需要登陆到容器中执行
  • 日志收集:无
  • 监控告警:无
  • 容器管理:无
  • 部署流程:复杂,脚本+手工命令行
  • 服务调用:自定义gateway,无法排除异常节点
  • 分布式能力:无,单机部署

为什么需要k8s

鱿物链的现状基本上可以通过k8s相应的组件得到解决。

鱿物链现状

k8s

备注

ip+端口号

service

部署流程脚本化

通过定义yaml实现脚本化

服务调用

ingress

日志收集

sidecar部署日志收集器,sls

监控

prometheus/kmonitor

容器生命周期管理

deployment

分布式能力

天然支持分布式

k8s搭建fabric测试网络

该项目将 Hyperledger fabric网络重新建立为云原生应用程序。关于kubernetes可以参考:

入门 | Kubernetes

fabric-sample地址

GitHub - hyperledger/fabric-samples: Samples for Hyperledger Fabric

目标:

  • 提供一个简单的一键式活动来运行 Fabric 测试网络。
  • 提供在 Kubernetes 上部署生产型网络的参考指南。
  • 为开发链码、网关和区块链应用程序提供云就绪平台。
  • 为 Fabric CA 操作和部署指南提供 Kube 补充。
  • 支持向Chaincode as a Service的过渡。
  • 支持从内部、Docker 守护进程到外部链码构建器的转换。
  • 在任何 Kube 上运行。

先决条件:

  • kubectl
  • jq
  • envsubst(brew install gettext在 OSX 上)
  • K8s环境:
  • KIND + Docker

k8s deployment 部署文件合法性校验 k8s部署fabric_perl

$ go version
go version go1.17 darwin/arm64

$ go install sigs.k8s.io/kind@v0.17.0

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.2", GitCommit:"5835544ca568b757a8ecae5c153f317e5736700e", GitTreeState:"clean", BuildDate:"2022-09-21T14:33:49Z", GoVersion:"go1.19.1", Compiler:"gc", Platform:"darwin/arm64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.3", GitCommit:"434bfd82814af038ad94d62ebe59b133fcb50506", GitTreeState:"clean", BuildDate:"2022-10-25T19:38:29Z", GoVersion:"go1.19.2", Compiler:"gc", Platform:"linux/arm64"}

快速开始

KIND创建一个 K8S 集群

./network kind

核心功能:

  • kind创建k8s集群:
  • kind create cluster --name kind --config=。。。
  • 镜像仓库:
  • 可以使用私有镜像仓库:docker run --detach --restart always --name kind-registry --publish 127.0.0.1:5000:5000 registry:2
  • 也可以使用集团的镜像仓库:docker login --username=xxx
  • 配置docker网络:docker network connect kind kind-registry

k8s集群初始化

./network cluster init

核心功能:

  • 部署ingress-nginx
  • 部署证书平台:cert-manager

k8s deployment 部署文件合法性校验 k8s部署fabric_fabric_02

启动网络

./network up

k8s deployment 部署文件合法性校验 k8s部署fabric_区块链_03

核心功能:

  • 创建fabric测试网络,其中包括3个组织的ca节点,peer节点和order节点,具体见下面的网络架构。其本质就是为每个组织的order或peer节点创建对应的deployment;
  • 普通用户账号注册:fabric-ca-client register
  • 普通用户账号登记: fabric-ca-client enroll
  • 生产msp文件:/fabric-samples/test-network-k8s/build/enrollments/org2/users/org2admin/msp

fabric网络架构:

组织

ca

peer

order

channel

org0

org0-ca

-

org0-order1

org0-order2

org0-order3

mychannel

org1

org1-ca

org1-peer1

org1-peer2

-

mychannel

org2

org2-ca

org2-peer1

org2-peer2

-

mychannel

创建通道

./network channel create

核心功能:

  • admin用户账号注册并生成签名文件,msp文件:fabric-ca-client register/enroll
  • configtxgen创建genesis block
  • 组件加入channel
  • order组织:osnadmin channel join
  • peer组织:peer channel join

备注:新版fabric取消了系统通道,order节点直接通过osnadmin新建channel并加入

备注:新版fabric取消了系统通道,order节点直接通过osnadmin新建channel并加入

部署基本资产转移智能合约

./network chaincode deploy asset-transfer-basic ../asset-transfer-basic/chaincode-java

核心功能:

  • 构建chaincode镜像;编译java 代码;
  • 打包chaincode;
  • 部署chaincode服务;
  • chaincode install,approveformyorg,commit

k8s deployment 部署文件合法性校验 k8s部署fabric_fabric_04

调用和查询链码:

./network chaincode invoke asset-transfer-basic '{"Args":["InitLedger"]}' ./network chaincode query  asset-transfer-basic '{"Args":["ReadAsset","asset1"]}'

使用REST API访问区块链:

./network rest-easy

Fabric REST样例准备就绪。

k8s deployment 部署文件合法性校验 k8s部署fabric_kubernetes_05

通过api接口访问区块链

k8s deployment 部署文件合法性校验 k8s部署fabric_docker_06

等同于

$ peer chaincode invoke -n asset-transfer-basic -C mychannel -c '{"Args":["GetAllAssets"]}' --orderer org0-orderer1.localho.st:443 --connTimeout 10s --tls --cafile /Users/ljs/GoProject/src/fabric-samples/test-network-k8s/build/channel-msp/ordererOrganizations/org0/orderers/org0-orderer1/tls/signcerts/tls-cert.pem

关闭测试网络:

./network down

删除集群:

./network unkind

核心流程总结

./network kind
./network cluster init
./network up
./network channel create
./network chaincode deploy asset-transfer-basic ../asset-transfer-basic/chaincode-java

附:服务发现机制

ingress-nginx

Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。

k8s deployment 部署文件合法性校验 k8s部署fabric_区块链_07

k8s deployment 部署文件合法性校验 k8s部署fabric_区块链_08

k8s deployment 部署文件合法性校验 k8s部署fabric_docker_09

TODO

  1. 调研添加组织;本质就是创建deployment和安装chaincode;
  2. k8s部署fabric,本质就是生产对应的yaml,然后通过kubectl apply -f部署对应的组件,需要预生成对应证书相关的pem文件、身份相关msp文件,以及容器镜像文件,可以达到分钟级部署;

参考

https://ata.alibaba-inc.com/articles/244471

ples · GitHub

Ingress | Kubernetes