华为云用户手册

  • 交易 Usage: appdemo transaction [flags]Flags: -b, --AddrB string B' addr -t, --Tx string Transaction Num -C, --channel string channel id (default "mychannel") -c, --config string configuration file path (default "./config_test.yaml") -I, --idcc string idendity chaincode name (default "IDChaincode") -o, --orgid string organization id (default "org1") -p, --protectpwd string protect pwd -T, --txcc string transaction chaincode name (default "TxChaincode") -u, --userid string user id ./appdemo transaction -u A -p test -b a0760184f7ed24e0d86f5b2df40a973a9e1b5da9a1ae886532ac9cd634b59d59 -t 10//说明:其中-b后的字符串为B的账户地址(B注册成功时回显的地址)。
  • 资源下载 表1 库列表 配套社区Hyperledger Fabric版本 库版本 下载链接 Fabric 1.1.0、Fabric 1.4.0、Fabric 2.2 1.8.5 同态加密库 1.9.2 同态加密库 1.11.5 同态加密库 同态加密链代码下载 IDChaincode.go Chaincode库接口文件下载 api_ahe_cc.tar.gz 须知: 需要选择与本地编译环境相一致版本的包。例如本地使用的go编译器为1.8.5,则下载1.8.5版本的库。 使用同态加密库需要提前安装好国密SDK。 api_ahe_cc.tar.gz包仅用于本地编译。
  • 注意事项 在下载的sdk.yaml文件中查询orderer和peer的域名信息,将EIP+orderer域名和EIP+peer域名补充进“/etc/hosts”文件中。使用Fabric1.1版本时,peer域名中的EIP需要配置为公网IP,使用Fabric1.4版本时,peer域名中的EIP需要配置为私网IP,否则网络不通将会导致交易验证失败。 在“/etc/hosts”文件中增加orderer节点和peer节点的域名映射时,操作方法如下: X.X.X.X orderer-e5ad7831affbe8e6e2e7984b098f92406930a688-0.orderer-e5ad7831affbe8e6e2e7984b098f92406930a688.default.svc.cluster.localX.X.X.X peer-d524b0817aaed85490368776cb88042a149a56b5-0.peer-d524b0817aaed85490368776cb88042a149a56b5.default.svc.cluster.localX.X.X.X peer-d524b0817aaed85490368776cb88042a149a56b5-1.peer-d524b0817aaed85490368776cb88042a149a56b5.default.svc.cluster.local X.X.X.X为示例EIP,请替换为实际EIP。
  • 注册 Usage: appdemo register [flags]Flags: -C, --channel string channel id (default "mychannel") -c, --config string configuration file path (default "./config_test.yaml") -I, --idcc string idendity chaincode name (default "IDChaincode") -i, --initbalance string init initbalance -o, --orgid string organization id (default "org1") -p, --protectpwd string protect pwd -T, --txcc string transaction chaincode name (default "TxChaincode") -u, --userid string user id ./appdemo register -u A -p test -i 100 部分参数不配置时使用的为默认值,见Flags中的描述。如果用户配置的与默认值不同,需要在参数中显示指定。 为用户生成一对同态公私钥 这里假设有个用户表示userid,用于区分用户,新用户注册的时候为这个用户生成一对公私钥,这里demo为每个用户将密钥对写到了本地的${userid}.data文件。 privKeyStr, pubKeyStr, err := pswapi_sdk.GenerateKey(propwd)check(err)fmt.Println("key is nil")userdata.PubKey = pubKeyStruserdata.PriKey = privKeyStr
  • 查询 Usage: appdemo querybalance [flags]Flags: -C, --channel string channel id (default "mychannel") -c, --config string configuration file path (default "./config_test.yaml") -I, --idcc string idendity chaincode name (default "IDChaincode") -o, --orgid string organization id (default "org1") -p, --protectpwd string protect pwd -T, --txcc string transaction chaincode name (default "TxChaincode") -u, --userid string user id./appdemo querybalance -p test -u A 查询代码: 调用sdk提供的InitBalance接口初始化余额。 调用fabirc sdk发送交易。 get balance setup.ChainCodeID = txchaincode transRec := sdk_client.TransRecord{} fmt.Println("query balance") resps, err := sdk_client.Query(setup, "QueryBalance", [][]byte{[]byte(addrA)}) if err != nil { fmt.Println("Fail to query balance :", err.Error()) return err } err = json.Unmarshal(resps[0].ProposalResponse.GetResponse().Payload, &transRec) if err != nil { fmt.Println("unmarshal query result error: ", err.Error()) return err } decrypt balance curbalance, err := pswapi_sdk.Decrypt(transRec.Balance, userdata.PriKey, propwd) if err != nil { fmt.Println("sdk Decrypt error: ", err.Error()) return err } fmt.Println("current balance:" + curbalance.String())
  • 附录 fabric-sdk-client/go依赖的第三方包列表: 序号 包名 1 github.com/Knetic/govaluate 2 github.com/VividCortex/gohistogram 3 github.com/cloudflare/cfssl 4 github.com/go-kit/kit 5 github.com/golang/mock 6 github.com/golang/protobuf 7 github.com/hashicorp/hcl 8 github.com/hyperledger/fabric-config 9 github.com/hyperledger/fabric-lib-go 10 github.com/hyperledger/fabric-protos-go 11 github.com/magiconair/properties 12 github.com/miekg/pkcs11 13 github.com/mitchellh/mapstructure 14 github.com/pelletier/go-toml 15 github.com/pkg/errors 16 github.com/prometheus/client_golang 17 github.com/spf13/afero 18 github.com/spf13/cast 19 github.com/spf13/jwalterweatherman 20 github.com/spf13/pflag 21 github.com/spf13/viper 22 github.com/stretchr/testify 23 github.com/tjfoc/gmsm 24 google.golang.org/grpc 25 gopkg.in/yaml.v2 父主题: 国密加密
  • ValidateTxInfo 接口原型 ValidateTxInfo(txInfo, cipherBalanceA, cipherBalanceB string) (newCipherBalanceA,newCipherBalanceB,newCipherTxA,newCipherTxB string,err error) 功能描述 校验PrepareTxInfo生成的Txinfo中交易证明的有效性。 输入说明 参数名 类型 描述 是否必须 txinfo string 交易证明数据 说明: 交易信息数据包含有交易密文数据和交易证明数据,该信息来源于sdk.PrepareTxInfo返回的txinfo信息。 是 cipherBalanceA string A当前的交易余额(密文) 是 cipherBalanceB string B当前的交易余额(密文) 是 输出说明 参数名 类型 描述 newCipherBalanceA string 交易后待更新的A的余额 newCipherBalanceB string 交易后待更新的B的余额 newCipherTxA string 交易金额(A的同态加密公钥加密) newCipherTxB string 交易金额(B的同态加密公钥加密) err error 错误 注意事项 这里A是转账方,B是收款方。
  • ValidateInitBalance 接口原型 func ValidateInitBalance(BalanceInfo, PubKey string) (InitBalance string, err error) 功能描述 校验sdk.InitBalance生成的balanceinfo中余额证明的有效性。 输入说明 参数名 类型 描述 是否必须 BalanceInfo string 初始余额数据 是 Pubkey string 余额加密的公钥信息 是 输出说明 参数名 类型 描述 是否必须 InitBalance string 初始余额密文 是 err error 错误信息 是 处理说明 验证余额有效后,返回余额的密文。 注意事项 这里用户余额真实性由用户的app逻辑保证,Chaincode端无法验证该用户的真实金额,只能验证该金额是大于0的范围。
  • PrepareTxInfo 接口原型 func PrepareTxInfo(cipherBalanceA string, transNumStr string, pubKeyA, pubKeyB string, privKeyA string,pwd string) (string, error) 功能描述 交易准备。 输入说明 参数名 类型 描述 是否必须 cipherBalanceA string A的当前余额(密文),取链上当前A的余额 是 transNumStr string 转账金额(明文) 是 pubKeyA string A的公钥串 是 pubKeyB string B的公钥串 是 PrivKeyA string A的私钥串 是 pwd string 用于加密保护的字符串 否 输出说明 参数名 类型 描述 Txinfo string 交易准备数据 err error 返回错误 注意事项 无。
  • InitBalance 接口原型 func InitBalance(balanceStr string, pubKey string) (string, error) 功能描述 初始化余额。 输入说明 参数名 类型 描述 是否必须 pubKey string 公钥串 是 balanceStr string 初始余额,只支持大于等于0的正整数,如果数字有小数,需要扩大倍数传入 是 输出说明 参数名 类型 描述 balanceInfo string 交易金额信息 err error 返回错误 注意事项 无。
  • Encypt 接口原型 func Encypt (secretNumStr string, pubKeyStr string) (ciphertext string, err error) 功能描述 同态加密。 输入说明 参数名 类型 描述 是否必须 secretNumStr string 需要加密的数值,只支持大于等于0的正整数,如果数字有小数,需要扩大倍数传入。 是 pubKeyStr String 同态加密的公钥 是 输出说明 参数名 类型 描述 ciphertext string 加密后的数据 err error 返回错误 注意事项 无。
  • Decrypt 接口原型 func Decrypt(ciphertext string, privKeyStr string, pwd string) (plainText *big.Int, err error) 功能描述 同态解密。 输入说明 参数名 类型 描述 是否必须 ciphertext string 需要解密的密文 是 privKeyStr string 同态加密的私钥串(被pwd加密保护 是 pwd string 用于保护私钥的字符串 否 输出说明 参数名 类型 描述 plainText *big.int 解密后的数据 err error 返回错误 注意事项 无。
  • Add 接口原型 func Add(cipher1, cipher2 string) (cipher string, err error) 功能描述 同态加法。 输入说明 参数名 类型 描述 是否必须 cipher1 string 被加密的密文1 是 cipher2 string 被加密的密文2 是 输出说明 参数名 类型 描述 cipher string 相加后的数据 err error 返回错误 注意事项 无。
  • 请求示例 { "orgID" : "4f1439758ebb41f7411b5f684b67713c08b89198", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\n...\n...\n-----END CERTIFICATE-----", "sk" : "------BEGIN PRIVATE KEY-----\n...\n...\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "orderIndex" : 1, "vcIndex" : 0}
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 orderIndex 是 String 订单索引 vcIndex 是 String 凭证索引
  • 服务支持区域选择“华北-北京四”,这个对异地的有没有影响? 对异地是没有影响的,服务所支持的区域是指服务部署在该区域下的服务器,用户所在地区与服务部署区域不一致也是可以开通和使用本服务的。 如果请求输入的数据是OBS地址方式,就需要使用相同区域的图像识别服务。 例如:您的OBS请求数据在“华北-北京四”,只能调用“华北-北京四”区域下的图像识别服务,如果本服务不支持该区域则不能调用。 如果请求输入的数据是Base64图片或者公网URL,则不受区域影响。 例如:您的服务器在“华东-上海一”可以调用“华北-北京四”的图像识别服务接口。 图像识别服务暂不支持离线部署。 图像识别服务的支持区域请参考使用限制。 父主题: 服务开通
  • 如何选择区域? 选择区域时,您需要考虑以下几个因素: 地理位置 一般情况下,建议就近选择靠近您或者您的目标用户的区域,这样可以减少网络时延,提高访问速度。不过,在基础设施、BGP网络品质、资源的操作与配置等方面,中国大陆各个区域间区别不大,如果您或者您的目标用户在中国大陆,可以不用考虑不同区域造成的网络时延问题。 在除中国大陆以外的亚太地区有业务的用户,可以选择“中国-香港”、“亚太-曼谷”或“亚太-新加坡”区域。 在非洲地区有业务的用户,可以选择“南非-约翰内斯堡”区域。 在欧洲地区有业务的用户,可以选择“欧洲-巴黎”区域。 云服务之间的关系 如果多个云服务一起搭配使用,需要注意: 不同区域的弹性云服务器、关系型数据库、对象存储服务内网不互通。 不同区域的弹性云服务器不支持跨区域部署在同一负载均衡器下。 资源的价格 不同区域的资源价格可能有差异,请参见华为云服务价格详情。
  • 上传图片信息给接口进行调用时,服务会储存用户信息吗? 您在使用图像识别服务的接口进行调用时,服务将调用结果返回给您,不会存储您的用户信息或图片信息。 调用接口时,需要您填写图片地址(或利用图片的BASE64编码)。服务会根据您提供的url进行识别功能,例如: POST https://{endpoint}/v2.0/image/tagging{ "image" : "", "url" : "XXXX", //此处填入图片地址 "language" : "zh", "limit" : 5, "threshold" : 70.0} 调用完成后,将结果返回给您。不会存储图片或您的个人信息。 父主题: API使用类
  • 有哪些途径可以使用图像识别的API? 共有三种方式可以基于已构建好的请求消息发起请求。 cURL cURL是一个命令行工具,用来执行各种URL操作和信息传输。cURL充当的是HTTP客户端,可以发送HTTP请求给服务端,并接收响应消息。cURL适用于接口调试。关于cURL详细信息请参见https://curl.haxx.se/。 编码 通过编码调用接口,组装请求消息,并发送处理请求消息。 REST客户端 Mozilla、Google都为REST提供了图形化的浏览器插件,发送处理请求消息。 针对Firefox,请参见Firefox RESTClient。 针对Chrome,请参见Postman。 父主题: API使用类
  • 什么是区域、可用区 我们用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。
  • 策略化的智能路由与弹性流量管理 支持对服务配置负载均衡、服务路由、故障注入、熔断等治理规则,并结合一站式治理系统,提供实时的、可视化的微服务流量管理;无侵入智能流量治理,应用无需任何改造,即可进行动态的智能路由和弹性流量管理。 权重、内容等路由规则,实现应用灵活灰度发布。 负载均衡,满足业务处理高可用性诉求。 熔断,实现服务间链路稳定、可靠。 网络长连接管理降低资源损耗,提升网络吞吐量。 服务安全认证、鉴权、审计等,提供服务安全保障基石。
  • 调用服务时错误码显示“ModelArts.4204”怎么处理? 调用接口出错后,返回的消息体中具体的错误代码及错误信息为: { "error_code":"ModelArts.4204", "error_msg":"Request api error! The API is not subscribed."} 表明您还未订阅该区域下的图像识别服务,请您开通后再使用该服务。 注意核对您开通本服务的区域,如开通“华北-北京四”下的图像标签功能,则您在“华东-上海一”调用该接口就会出现该错误码。 出现其它错误码及错误信息说明请参考错误码说明,在调用方找不到错误原因时,可以联系支持人员并提供错误码,以便尽快帮您解决问题。 父主题: 错误码问题
  • 什么是Istio Istio是一个提供连接、保护、控制以及观测功能的开放平台,通过提供完整的非侵入式的微服务治理解决方案,能够很好的解决云原生服务的管理、网络连接以及安全管理等服务网络治理问题。 随着微服务的大量应用,其构成的分布式应用架构在运维、调试和安全管理等维度变得更加复杂,开发者需要面临更大的挑战,如:服务发现、负载均衡、故障恢复、指标收集和监控,以及金丝雀发布、蓝绿发布、限流、访问控制、端到端认证等。 在较高的层次上,Istio有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,可以透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许集成到任何日志记录平台、遥测或策略系统的API。Istio的多样化功能使您能够成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。 服务网格 服务网格(Service Mesh)通常用于描述构成应用程序的微服务网络以及应用之间的交互。它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如蓝绿发布、金丝雀发布、限流、访问控制和端到端认证等。
  • 产品功能 灰度发布 基于请求内容灰度规则:支持基于请求内容灰度规则,可以配置Header、Cookie等多种请求信息。 基于流量比例灰度规则:支持基于流量比例灰度规则,根据权重比例分配流量。 金丝雀灰度流程:提供向导方式引导用户完成金丝雀灰度流程,包括灰度版本上线、观察灰度版本运行、配置灰度规则、观测访问情况、切分流量等。 蓝绿灰度流程:提供向导方式引导用户完成蓝绿灰度流程,包括灰度版本上线、观察灰度版本运行、观测访问情况、版本切换等。 流量治理 七层连接池管理:支持配置HTTP最大请求数、最大重试次数、最大等待请求数、每连接最大请求数以及连接最大空闲时间。 四层连接池管理:支持配置TCP最大连接数、连接超时时间、最大无响应次数、最短空闲时间以及健康检查间隔。 熔断:支持配置服务熔断规则,包括实例被驱逐前的连续错误数、检查周期、基础隔离时间以及最大隔离实例比例。 重试:支持配置HTTP重试次数、重试超时时间以及重试条件。 超时:支持配置HTTP请求超时时间。 负载均衡:支持配置随机调度、轮询调度、最少连接和一致性哈希多种负载均衡算法。 HTTP头域:可以灵活添加、修改和删除指定HTTP头域,包括将HTTP请求转发到目标服务之前对Headers的操作,以及将HTTP响应回复给客户端前,对Headers的操作。 故障注入:支持配置延时故障和中断故障。 安全 对端认证:对端认证定义了流量如何通过隧道(或者不通过隧道)传输到当前服务的实例,当前支持配置默认模式(UNSET)、宽容模式(PERMISSIVE)和严格模式(STRICT)三种认证策略。 访问授权:访问授权用来实现对网格中服务的访问控制功能,即判断一个请求是否允许发送到当前的服务。 可观察性 应用访问拓扑:支持网格应用访问拓扑,体现服务间依赖。 服务运行监控:支持服务访问信息,包括服务和服务各个版本的QPS和延时等指标。 访问日志:支持收集和检索服务的访问日志。 调用链:支持非侵入调用链埋点,并可以通过检索调用链数据进行问题定界定位。 多集群服务治理 扁平网络:支持多集群扁平网络数据面场景治理。 非扁平网络:支持多集群非扁平网络数据面场景治理。 网格数据面服务框架 Spring Cloud:支持Spring Cloud SDK开发的服务在网格上统一管理。 Dubbo:支持Dubbo SDK开发的服务在网格上统一管理。 兼容性和扩展 社区版本兼容:API完全兼容Istio。 社区插件支持:支持Tracing、Prometheus、Kiali、Grafana。
  • 为什么要使用Istio Istio提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。 Kubernetes提供了部署、升级和有限的运行流量管理能力,但并不具备熔断、限流、调用链追踪等能力。Istio是基于Kubernetes构建的开放平台,它很好的补齐了Kubernetes在微服务治理上的诸多能力。 图1 Istio和Kubernetes的关系 想要让服务支持Istio,只需要在您的环境中部署一个特殊的Sidecar代理,使用Istio控制平面功能配置和管理代理,拦截微服务之间的所有网络通信: 实现HTTP、gRPC、WebSocket和TCP流量的自动负载均衡。 通过丰富的路由规则、重试和故障注入,可以对流量行为进行细粒度控制。 通过可插入的策略层和配置API,支持访问控制、速率限制和配额。 对出入集群入口和出口中所有流量自动度量指标、日志记录和追踪。 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。 Istio旨在实现可扩展性,满足各种部署需求。
  • 工作负载 工作负载即Kubernetes对一组Pod的抽象模型,用于描述业务的运行载体,包括Deployment、Statefulset、Job、Deamonset等。 无状态工作负载(即Kubernetes中的“Deployments”):Pod之间完全独立、功能相同,具有弹性伸缩、滚动升级等特性。如:Nginx、WordPress。 有状态工作负载(即Kubernetes中的“StatefulSets”):Pod之间不完全独立,具有稳定的持久化存储和网络标示,以及有序的部署、收缩和删除等特性。如:mysql-HA、etcd。
  • ingressgateway实例资源消耗参考 每个ingressgateway实例的资源消耗与连接类型、连接数量、QPS有关,可以参考以下数据: 表1 长连接内存消耗 连接数量 内存消耗(MB) 1 0.055 1000 55 10000 550 表2 短连接CPU和内存消耗 QPS CPU消耗(m) 内存消耗(MB) 100 30 100 1000 300 100 10000 3000 150 以上数据仅供参考,具体的资源消耗和实际的业务模型有关,以实际测试结果为准。
  • 适用场景 众所周知,将传统的单体应用拆分为一个个微服务固然带来了各种好处,包括更好的灵活性、可伸缩性、重用性,但微服务也同样面临着特殊的安全需求,如下所示: 为了抵御中间人攻击,需要用到流量加密。 为了提供灵活的服务访问控制,需要用到TLS和细粒度访问策略。 为了决定哪些人在哪些时间可以做哪些事,需要用到审计工具。 面对这些需求应用服务网格提供全面的安全解决方案,包括身份验证策略,透明的TLS加密以及授权和审计工具。
  • 优势 非侵入安全:应用服务网格是以一种安全基础设施的方式向用户提供透明的安全能力,让不涉及安全问题的代码安全运行,让不太懂安全的人可以开发和运维安全的服务,不用修改业务代码就能提供服务访问安全。应用服务网格提供了一个透明的分布式安全层,并提供了底层安全的通信通道,管理服务通信的认证、授权和加密,提供Pod到Pod、服务到服务的通信安全。开发人员在这个安全基础设施层上只需专注于应用程序级别的安全性。 多集群安全:在多集群场景下ASM提供了全局的服务访问安全。多个集群的网格共享一套根证书,给数据面的服务实例分发密钥和证书对,并定期替换密钥证书,根据需要撤销密钥证书。在服务间访问时,网格的数据面代理就会代理本地服务和对端进行双向认证、通道加密。这里的双向认证的服务双方可以来自两个不同的集群,从而做到跨集群的透明的端到端双向认证。 细粒度授权:在认证的基础上,就可以进行服务间的访问授权管理,可以控制某个服务,或者服务的一个特定接口进行授权管理。如只开放给特定的一个Namespace下的服务,或者开放给某个特定的服务。源服务和目标服务可以在不同的集群,甚至源服务的不同实例在不同的集群,目标服务的不同实例在不同的集群。
  • 计费样例 表2中,网格管理规模指服务网格可管理的最大实例数(Pod个数)。 表2 收费样例 网格类型 计费模式 网格管理规模 实例数规模阶梯 收费(元/小时) 企业版网格 按需计费 5000实例 0-20 4.2(20实例 * 0.21元/小时每实例) 说明: 购买成功后即开始计费。治理不足20实例时,按20实例数收取费用。 21-5000 实例数 * 0.21元/小时每实例 说明: 购买成功后即开始计费。超过20实例时,按实际实例数收取费用。 基础版网格 免费 200实例 0-200 免费 专有网格 按需计费 20实例 0-20 免费 说明: 网格管理规模为20实例,目前不收取费用。 按需计费 5000实例 0-5000 实例数 * 0.21元/小时每实例 说明: 网格管理规模为5000实例,购买成功后即开始计费,按实际实例数收取费用。 以上价格为举例,实际价格以创建集群时的价格为准。
共100000条