VMware中国研发现先进技术中心技术总监 张海宁:使用Kubernetes部署超级账本Fabric

慕菊华

2017/11/14 发布于 技术 分类

本演讲探讨实现超级账本Fabric的区块链即服务(Blockchain as a Service)的方法。区块链是相当复杂的分布式系统,用户需要掌握多种技能,使用门槛非常高。区块链即服务目的是提高系统易用性和可管理性,使开发人员关注在应用的业务逻辑开发上。 Kubernetes是目前最主流的云原生应用平台,可以灵活地部署、监控和运维容器应用。基于容器技术开发的Fabric项目,可以很好的结合Kubernetes,实现区块链即服务的能力。

文字内容
1. 使用KuberneSteAsC部C署20超17级账本Fabric 张海宁(Henry Zhang) VMware中国研发现先进技术中心技术总监
2. 自我介绍 • VMware中国研发先进技术中心首席架构师、技术总监 • Harbor开源企业级容器Registry项目创始人 • Cloud Foundry中国社区最早技术布道师之一 • Hyperledger Cello项目贡献者 SACC2017• 《区块链技术指南》、《软件定义存储》作者之一 公众号:亨利笔记 《区块链技术指南》 《软件定义存储》
3. 议程 1 超级账本项目概览 2 3 用KuKbuebrSneerAnteeCst架eCs部构20简署1介F7abric 4 总结
4. 超级账本项目概S览ACC2017
5. 商用区块链的要求 多方共享数据 访问权限控制 交易具有合适的可见性 交易需认证身份 共享S账A本 CC201智能7合约 隐私性 共识算法 用代码描述业务 可验证和签名确认 多方共同认可交易 满足需求的吞吐量 5
6. 公有链的不足之处 • 比特币、以太坊等公有链项目,不能满足商用的需求 – 无保密性(Confidentiality) – 无法溯源(Provenance) 7– 确认时间长(Slow confirmation) 201– 无最终性(Finality) C– 吞吐量低(Throughput) AC– 软件许可(license) S– 极客主导 • 需要新的解决方案 6
7. 超级账本项目 (Hyperledger) • Linux基金会于2015年12月成立超级账本项目 • 30个创始成员 – 科技巨头( IBM、Intel、思科等) 17– 金融大鳄 (摩根大通、富国银行、荷兰银行等) 20– 专注区块链的公司( R3,ConsenSys等) CC• 目前已经超过120个成员 SA• 150+ 贡献者 • 8000+ commits 7
8. 超级账本成员 Premier Member SACC2017 General Member 8
9. 超级账本目标 • 基于区块链的企业级分布式账本技术(DLT) 7• 用于构建各种行业的商业应用平台 201• 模块化、性能和可靠性 SACC• 提供商业友好的许可(Apache V2.0) 9
10. 区块链项目对比 项目定位 管理方式 货币 挖矿 状态数据方式 共识网络 网络 Hyperledger (Fabric) Bitcoin 通用联盟链平台 数字货币系统 Linux基金会 社区 SACC2017无 无 键值数据、文档数据 PBFT等 BTC 比特币 有 交易数据 PoW 公开或私有 公开 Ethereum 通用公有链平台 社区(众筹) Ether 以太币 有 帐号数据 PoW, PoS 公开 隐私性 有 无无 智能合约 Go, Java等多种开发语言 无 Solidity 10
11. 超级账本项目生命周期 • 多个子项目并存 • 提每个案子项目孵可化有S5个A阶C活段C跃2017弃用 终止 11
12. 超级账本子项目 Fabric SACC2017Sawtooth Lake Iroha Blockchain Explorer Cello Burrow Indy Composer 12
13. Fabric • 2015年12月开源 • 主体由IBM的OBC(Open Blockchain)开源代码转化过来 • 增加了DAH和Blockstream两家公司的代码 017• 项目以Go语言为主 C2• 90+贡献者 SAC• 5000+commits 13
14. Hyperledger Fabric 1.0 特点 • 提供了交易的机密性 • 权限管理和控制 • 分离了共识和记账职能 17• 节点数动态伸缩 C20• 吞吐量有望提升 AC• 可升级的智能合约(chaincode) S• 成员服务是高可用 14
15. 供应链场景(1) • 公共链: – 共享公开信息(如商品种类、报价等) • 私有链 – 私密的交易信息(如A购买X的产品) 公链共享 信息: A,B,C,X,Y,Z SAB CCC2017 A与X的私链 记录交易: A,X A 商店 15 Z Y 农场 X
16. 供应链场景(2) • 不同群体之间构建不同的私链(和账本) • 互相独立,分别记账 SACC2017A,D,X A,E,X A,F,X 商店 A 海关 D 运输 E 银行 F 农场 X 1 6
17. Fabric v1.0部署方式 用户A 应用 用户C 应用 身份服务 COP SACC2017Peer ( Endorser & Committer) Peer ( Endorser & Committer) Orderer Orderer 应用 用户 B Orderer Orderer Peer ( Endorser & Committer) Peer ( Endorser & Committer) 为简明起见,部分箭头未标注 应用 用户D 17
18. Kubernetes架S构A简C介C2017
19. Kubernetes (K8s)项目 • 开源的容器管理平台 • • • • 自运优自动化维动容化化资编扩源器化排展使应用和用部S署ACC2017 • CaaS,介于PaaS和IaaS之间 19
20. Kubernetes 架构 SACC2017 20
21. K8s 集群模型 K8s Cluster • 一个或多个主节点 (master) • 一个或多个工作节点(worker) 017• 命名空间(Namespaces) SACC2– 用于命名分隔资源的逻辑组 Master Worker node 1 Worker node 2 Worker node 3 21
22. Pod的概念 • Pod是K8s中一个或多个容器组成的部署单位 • 容器共享一个IP地址和端口空间,互相之间用 localhost访问 • • 有容器点间类还似共虚享拟数机中据S卷的A多VCo个lCu进m2e程s017 22
23. Pod部署在K8s中 Pod 1 Pod 2 Container 1 Tools, Libs, SW SACC2017Container 2 Tools, Libs, SW Container 1 Tools, Libs, SW Container 2 Tools, Libs, SW Kubernetes 23
24. Kubernetes 的存储:Persistent Volume Claim 管理员 • 创建 • 注册PV • 回收PV Administrator Owned 开发者 • 申请 Volume Claim • 释放Volume Claim Developer Owned SACC2017Kubernetes Cluster VSAN VMFS NFS Pool of Persistent Volumes Claim Pod Worker 24
25. Kubernetes的Services • 服务类型 – ClusterIP Worker Node Node IP:'>IP: 192.168.10.10 – NodePort 7– LoadBalancer SACC201• 服务发现 Service – DNS – 环境变量 Pod 1 Pod 2 IP:'>IP: 10.2.3.14 DNS: service1.cluster.local Port:'>Port: 9443 NodePort:'>Port: 31233 Protocol: TCP Pod N Port:'>Port: 9443 25
26. 复制控制器Replication Controller • 自动恢复 • 手动扩展 • 滚动更新 • 多版本追踪 ReplicaSet.yaml ContainerImage1 Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas: 3 DeCpolnotyamienetr_IYm.aygaem2l Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas: 2 ContainerImage1 Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas: 1 K8s Cluster SACC2017API Master P1R1 P2R1 P2R1 P1R1 K Worker (Container Host) P1R2 P2R1 P1R1 K Worker (Container Host) P1R3 P2R2 P2R2 P1R2 K Worker (Container Host) ContainerImage2 Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas:'>Replicas: 2
27. 在KubernetesS中A部C署CF2a0b1r7ic
28. 机遇与挑战 • Fabric的应用面临几个问题: – 大量配置文件,繁琐且容易出错。 SACC2017– 开发人员无法专注于应用开发。 – 基于Fabric身份管理的设计,网络中节点增减的步骤繁多。 – 节点的状态不易监控,节点宕机后需手动重启。 • 降低使用门槛,提高易用性成为区块链应用落地的 首要条件。 28
29. 为什么采用Kubernetes • Fabric特点 • 组件都封装成容器,很方便部署在容器平台上 • 需要灵活地配置和调整 2017• Kubernetes优势 CC• 面向微服务架构的容器平台,扩展方便 SA• 提供高可用、监控管理、自动化运维等能力 • 具备多租户的能力,可运行多个互相隔离的 Fabric实例 29
30. Kubernetes部署Fabric的网络拓扑 CMD 客户机 kube_dns 10.0.0.10 Fabric Pod flannel Master 10.0.0.1/16 SACC2017Fabric Pod Fabric Pod Fabric Pod Fabric Pod flannel Worker1 10.0.0.1/16 flannel Worker2 10.0.0.1/16 192.168.0.1/24 NFS Server
31. 架构 - 网络 (1) • Kubernetes集群包含一个overlay网络(flannel),容器 (Pod)都接入到这个网络。 • K8s的namespace与Fabric的organization做映射,org通 7过域名进行区分。 201• 采用namespace分隔各个组织的组件,配上网络策略来实 SACC现多租户的能力。 31
32. 架构 - 网络 (2) • Chaincode容器的不在Kubernetes管理范围内,因此worker 都需对docker daemon进行DNS配置。 017"--dns=10.0.0.10 --dns=192.168.0.1 --dns-search \ C2default.svc.cluster.local --dns-search \ SACsvc.cluster.local --dns-opt ndots:2 --dns-opt \ timeout:2 --dns-opt attempts:2 " 32
33. 架构 – 共享存储 • 集中生成和存放配置文件,按需导入Pod。 • 支持Pod在各个worker之间的迁移。 SACC2017• K8s的PV和PVC可以确保每个Fabric的节点只能看到所需要的文件。 33
34. 架构 – Fabric组件映射成Pod • Peer Pod:包括Fabric peer,couchDB(可选), 代 表每个组织的peer节点 • CA Server Pod: Fabric CA Server 017• CLI Pod:(可选)提供命令行工具的环境,方便操作本 2组织的节点 SACC• Orderer Pod:运行Orderer节点 • Kafka Pod:运行kafka节点 • Zookeeper Pod: 运行zookeeper节点 34
35. 用namespace分隔各个组织的Pod … … Pod service Pod service Peer0 CouchDB PeerN CouchDB Container SACC2017PVC Pod service CA PVC PVC Pod CLI PVC NFS Namespace:'>Namespace: org1 Namespace:'>Namespace: orgN
36. Orderer和Kafka Pod Pod service orderer0 …. Pod service ordererM PVC PVC SACC2017Pod service Kafka 0 NFS Namespace:'>Namespace: orgorderer1 Pod service …. Kafka N Pod service zookeeper0 Pod service …. ZookeeperN Namespace:'>Namespace: Kafka
37. 整体架构 SACC2017 37
38. Service的外部调用 • 在K8s集群外能访问到Fabric中的各个服务 • CA、peer和Orderer的service类型定义为NodePort, • 端口映射规则如下(N和M的范围分别为N>=1,M>=0): – 组织orgN端口范围:30000+(N-1)*100 ~ 30000+(N)*100-1 017– CA服务的映射关系:ca.orgN:7054 -> worker:30000+(N-1)*100'>worker:30000+(N-1)*100'>worker:30000+(N-1)*100'>worker:30000+(N-1)*100 SACC2– 每个peer需要映射7051和7052两个端口,映射关系如下: peerM.orgN:7051 -> worker:30000+(N-1)*100'>worker:30000+(N-1)*100'>worker:30000+(N-1)*100'>worker:30000+(N-1)*100 + 2 * M + 1 peerM.orgN:7052 -> worker:30000+(N-1)*100'>worker:30000+(N-1)*100'>worker:30000+(N-1)*100'>worker:30000+(N-1)*100 + 2 * M + 2 – ordererN的映射关系为:ordererN:7050 -> worker:23700+N
39. 部署- 生成Fabric配置文件 通过cryptogen工具生成证书。cryptogen工具根据cluster-config.yaml来 生成证书,并按一定目录存放这些证书: crypto-config OrdererOrgs: - Name:'>Name: Orderer 17Domain:'>Domain: orgorderer1 20Template:'>Template: Count:'>SACCCount: 1 配置文件 cryptogen 目录结构 PeerOrgs: --- ordererOrganizations --- orgorderer1 --- msp --- ca --- tlsca --- users --- orderers --- orderer0.orgorderer1 --- msp --- tls --- peerOrganizations --- org1 - Name:'>Name: Org1 Domain:'>Domain: org1 --- msp --- ca --- tlsca Template:'>Template: --- users --- peers Count: 1 --- peer0.org1 --- msp --- tls 39
40. 部署 – 生成Pod、namespace配置 • 每个节点需要相应的配置文件。 • 通过模板自动生成各个节点的配置文件。 • 遍历目录结构修改模板,并把修改后的文件放置到相应的目录下, • 例如org1目录 C2017 --- org1 C --- msp A --- ca S --- tlsca 生成部署 文件前 脚本 --- org1 --- msp --- ca 生成部署 --- tlsca 文件后 --- users --- users --- peers --- peers --- peer0.org1 --- peer0.org1 --- org1-ca.yaml --- org1-cli.yaml --- org1-namespace.yaml 40
41. 启动集群 • 已经生成一套相对完整的启动文件,放置在共享存储NFS上 • 通过PV和PVC控制容器对文件的访问权限。 • 启动集群时按照一定顺序启动。 2017以org1为例: C• 根据定义namespace的yaml文件创建namespace. SAC• 根据定义ca的yaml文件,创建CA pod 和 service. • 根据定义cli的yaml文件,创建CLI pod 和 service. • 遍历org1/peers的子目录找出定义peer的yaml文件,创建peer pod和service. 41
42. 使用 Fabric Cluster • 以org1为例,查看namespace为 org1下的所有Pod: $ kubectl get pods –namespaces org1 CC2017• 进入cli-2586364563-vclmr Pod: SA$ kubectl exec -it cli-2586364563-vclmr bash --namespace=org1 • 执行Fabric命令,如创建channel: $ peer channel create -o orderer0.orgorderer1:7050 \ -c mychannel -f ./channel-artifacts/channel.tx
43. Fabric 区块链即服务(BaaS)云端部署场景 • 同一个Kubernetes集群实现区块链即服务(BaaS) • 采用网络隔离多租户 Organization 1 SACC2017Organization n …. Orderer Kafka Kubernetes (Cloud Provider)
44. 总结 • 基于Kubernetes容器云平台初步实现BaaS的基础部署步骤。 • 在此之上,增加更多的区块链层运维管理功能,图形化运 维界面,使得开发人员投入更多的精力到应用的业务逻辑 • 上详。细文档和代码:SACC2017 https://github.com/hainingzhang/articles 公众号:亨利笔记 44
45. SACC2017