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
$ 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
启动网络
./network up
核心功能:
- 创建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
调用和查询链码:
./network chaincode invoke asset-transfer-basic '{"Args":["InitLedger"]}' ./network chaincode query asset-transfer-basic '{"Args":["ReadAsset","asset1"]}'
使用REST API访问区块链:
./network rest-easy
Fabric REST样例准备就绪。
通过api接口访问区块链
等同于
$ 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 路由。
TODO
- 调研添加组织;本质就是创建deployment和安装chaincode;
- k8s部署fabric,本质就是生产对应的yaml,然后通过kubectl apply -f部署对应的组件,需要预生成对应证书相关的pem文件、身份相关msp文件,以及容器镜像文件,可以达到分钟级部署;
参考
https://ata.alibaba-inc.com/articles/244471
使用kind快速搭建本地k8s集群 - 春光牛牛 - 博客园
fabric-samples/test-network-k8s at main · hyperledger/fabric-samples · GitHub
Ingress | Kubernetes
kubernetes上部署hyperledger-fabric 2.4.3 - 人艰不拆_zmc - 博客园