华为云用户手册

  • 使用X.509证书的鉴权流程 X.509证书是一种用于通信实体鉴别的数字证书。当前 物联网平台 只支持基于MQTT协议接入的设备使用X.509证书进行设备身份认证,且每个用户最多上传100个设备CA证书。 图3 使用X.509证书的鉴权流程 在控制台上传设备CA证书。 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 注册时需要填写设备标识码,通常使用MAC地址,Serial No或IMEI作为nodeId。 物联网平台向设备分配全局唯一的设备ID(deviceId)。 用户将设备ID(deviceId)烧录到设备硬件或软固件中。 设备上电后,携带设备侧X.509证书发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 使用LwM2M/CoAP协议接入的鉴权流程 图1 使用LwM2M/CoAP协议接入的鉴权流程 1. 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 2~3. 物联网平台向设备分配密钥,并返回timeout。 密钥可以在注册设备时自定义,如果没有定义,平台将自动分配预置密钥。 timeout是指超时时间,若设备在有效时间未接入物联网平台,则平台会删除该设备的注册信息。 4. 用户将密钥烧录到设备硬件或软固件中。 5. 设备上电后,安全设备携带设备唯一标识码nodeId(如IMEI)和密钥发起接入鉴权请求;非安全设备携带设备唯一标识码发起接入鉴权请求。 6~7. 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 概述 设备鉴权是指物联网平台对接入平台的设备进行身份认证。对于不同接入方式的设备,鉴权方式不同。 接入类型 鉴权方式 使用LwM2M/CoAP协议接入的设备 在设备接入物联网平台前,用户通过应用服务器调用创建设备接口或通过控制台在物联网平台注册设备。若为非安全设备,在设备接入物联网平台时携带设备唯一标识,完成设备的接入鉴权;当采用DTLS/DTLS+传输层安全协议接入时,即设备为安全设备时,携带密钥和nodeId完成设备的接入鉴权。图1所示。 使用原生MQTT/MQ TTS 协议接入的设备 使用密钥鉴权: 在设备接入物联网平台前,用户通过应用服务调用创建设备接口或通过控制台在物联网平台注册设备,获取设备ID和密钥,并把设备ID和密钥烧录到设备中。针对MQTTS协议的设备,需要在设备侧预置CA证书;MQTT不需要,然后在设备接入物联网平台时携带设备ID和密钥,完成设备的接入鉴权。图2所示。 使用证书鉴权: 在设备接入物联网平台前,用户通过控制台上传设备CA证书,然后应用服务调用创建设备接口或通过控制台在物联网平台注册设备,获取设备ID,并把设备ID烧录到设备中。在设备接入物联网平台时携带设备侧X.509证书,完成设备的接入鉴权。图3所示。
  • 使用原生MQTT/MQTTS协议接入的鉴权流程 图2 使用原生MQTT/MQTTS协议接入的鉴权流程 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 注册时需要填写设备标识码,通常使用MAC地址,Serial No或IMEI作为nodeId。 物联网平台向设备分配全局唯一的设备ID (deviceId)和密钥(secret)。 密钥可以在注册设备时自定义,如果没有定义,平台将自动分配密钥。 用户将设备ID(deviceId)和密钥(secret)烧录到设备硬件或软固件中。 (仅针对MQTTS协议接入的鉴权流程)设备侧需集成预置CA证书。 设备上电后,携带设备ID(deviceId)和密钥(secret)发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 概述 当设备和物联网平台完成对接后,设备可通过以下方式发送数据到物联网平台: 表1 数据上报 类型 子类型 描述 适用场景 协议 物模型 大小 消息上报 设备消息上报 是设备直接将数据传到云端的一种方式,实现设备侧到应用侧的数据直接透传,平台对设备上报的消息不进行解析和存储。 常用于高频率数据的传输或需要用户自定义数据格式的场景。例如:短时间发送大量传感器数据到应用侧。 MQTT、HTTP 不依赖 单次请求:上报的消息最大为1MB。 单用户:标准版最大可使用带宽10Mb/s,企业版最大可使用带宽为50Mb/s。 自定义Topic通信 根据客户需求,自定义Topic,平台将上报的数据直接透传。应用侧可以通过订阅自定义Topic区分不同的业务。 一般用于设备上报的业务类型有多样,需要根据实际业务自定义Topic的场景,或在数据转发中需要转发到特定的Topic的场景,比如数据迁移。 MQTT 属性上报 设备属性上报 属性上报的数据,设备侧到应用侧的数据不直接透传。数据在平台中会通过定义的产品模型来校验、进行过滤,若上报的数据不符合产品模型定义,平台会丢弃该数据。 希望建立统一的模型:规定数据的格式与取值范围、设备的数据需要平台解析、存储的场景。或希望平台能够存储最新的镜像数据的场景。例如:发送路灯的开关数据到应用侧。 MQTT、HTTP、LwM2M/CoAP 依赖 单次请求:上报的属性最大为64KB。 单用户:标准版最大可使用带宽10Mb/s,企业版最大可使用带宽为50Mb/s。 网关批量属性上报 一次性上报多个子设备的属性,设备侧到应用侧的数据不直接透传。平台会将网关上报多子设备的数据分发到对应的子设备。 网关下关联多个子设备的场景。并且对于子设备数据上报时间不敏感,可以把多个子设备的数据打包后再一起上报。 MQTT 资源受限或者对网络流量有要求的设备,不适合直接构造JSON数据与物联网平台通信时,可将原始二进制数据透传到物联网平台。通过开发编解码插件实现二进制数据到平台定义JSON格式的转换。 若发送到平台的数据需要发到华为云其他云服务上进行存储和处理,可以通过数据转发规则功能进行转发,然后再通过其他云服务的控制台或者API接口进行进一步的数据处理。 图1 消息上报概念图 图2 属性上报概念图 图3 原始二进制数据上报概念图
  • 业务概览 开通 设备接入服务 后,使用设备接入服务的完整流程如下图所示,主要分为产品开发、应用侧开发、设备侧开发和日常管理。 产品开发:开发者在进行设备接入前,基于控制台进行相应的开发工作,包括创建产品、创建设备、在线开发产品模型、在线开发插件和在线调试。 应用侧开发:通过API的形式对外开放物联网平台丰富的设备管理能力,应用开发人员基于API接口开发所需的行业应用,如智慧城市、智慧园区、智慧工业、车联网等行业应用,满足不同行业的需求。 设备侧开发:设备侧可以通过集成SDK、模组或者原生协议接入物联网平台。 日常管理:真实设备接入后,基于控制台或者API接口,进行日常的设备管理。 图1 流程图
  • 方案概述 基于IoT平台实现一个物联网解决方案,需要完成以下操作: 开发操作 开发说明 产品开发 主要呈现物联网平台的界面查询与操作,包括产品管理、产品模型开发、插件开发、在线调试等。 应用开发 主要为业务应用与物联网平台的集成对接开发,包括API接口调用、业务数据获取和HTTPS证书管理。 设备开发 主要为设备与物联网平台的集成对接开发,包括设备接入物联网平台、业务数据上报和对平台下发控制命令的处理。
  • 包年/包月资源 对于包年/包月计费模式的资源,例如包年/包月的设备接入实例,用户在购买时会一次性付费,服务将在到期后自动停止使用。 如果在计费周期内不再使用包年/包月资源,您可以执行退订操作,系统将根据资源是否属于五天无理由退订、是否使用代金券和折扣券等条件返还一定金额到您的账户。详细的退订规则请参见云服务退订规则概览。 如果您已开启“自动续费”功能,为避免继续产生费用,请在自动续费扣款日(默认为到期前7日)之前关闭自动续费。
  • 修订记录 发布日期 修订记录 2024-04-28 第十二次正式发布: 新增章节: 并行文件系统相关接口(Go SDK)。 2023-10-16 第十一次正式发布: 优化Go SDK接口参数描述。 2023-09-21 第十次正式发布: 新增章节: 设置桶的自定义 域名 (Go SDK)。 获取桶的自定义域名(Go SDK)。 删除桶的自定义域名(Go SDK)。 2023-08-26 第九次正式发布: 新增章节: 如何指定Content-SHA256?。 为什么SDK源码中包含acs.amazonaws.com关键字?。 2023-07-13 第八次正式发布。 新增章节: 设置对象元数据(Go SDK)。 2023-07-11 第七次正式发布。 优化SDK文档和示例代码。 2022-01-04 第六次正式发布。 新增章节: 单链接限速 SDK接口扩展配置 2020-06-30 第五次正式发布。 调整文档结构。 2019-12-18 第四次正式发布。 修改章节: ObsClient初始化 。 2019-02-18 第三次正式发布。 修复一些问题。 2018-11-30 第二次正式发布。 新增章节: 生成带授权信息的URL 删除章节: 简介 2018-3-31 第一次正式发布。
  • 接口约束 建议使用 IAM 或策略进行授权,如果使用IAM则需授予obs:object:getAccessLabel权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持,如何创建并行文件系统请参考创建并行文件系统(Go SDK)。 仅支持并行文件系统的目录级别的设置,并行文件系统级和文件级均不支持。
  • 返回结果说明 表3 返回结果列表 参数名称 参数类型 描述 output *GetDirAccesslabelOutput 参数解释: 接口返回信息,详见GetDirAccesslabelOutput。 err error 参数解释: 接口返回错误信息。 表4 GetDirAccesslabelOutput 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无 AccessLabel []string 必选 参数解释: 目录的accesslabel内容。 约束限制: 仅包含0-9、a-z、 A-Z、下划线的字符串,最大长度为52个字符。 目录级别AccessLabel最大设置支持256条。 默认取值: 无
  • 代码示例 本示例用于获取examplebucket并行文件系统中的目录Dirname的accesslabel。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.GetDirAccesslabelInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定对象名,此处以 Dirname 为例。 input.Key = "Dirname" // 获取对象的AccessLabel output, err := obsClient.GetDirAccesslabel(input) if err == nil { fmt.Printf("Get dir(%s) accesslabel successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Get dir(%s) accesslabel fail with bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *GetDirAccesslabelInput 必选 参数解释: 设置并行文件系统ACL请求参数,详见GetDirAccesslabelInput。 extensions extensionOptions 可选 参数解释: 并行文件系统相关扩展信息。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。
  • 代码示例 本示例用于删除examplebucket并行文件系统中的目录Dirname的accesslabel。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.DeleteDirAccesslabelInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定对象名,此处以 Dirname 为例。 input.Key = "Dirname" // 对象的AccessLabel output, err := obsClient.DeleteDirAccesslabel(input) if err == nil { fmt.Printf("Delete dir(%s) accesslabel successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Delete dir(%s) accesslabel fail with bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 接口约束 建议使用IAM或策略进行授权,如果使用IAM则需授予obs:object:deleteAccessLabel权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持,如何创建并行文件系统请参考创建并行文件系统(Go SDK)。 仅支持并行文件系统的目录级别的设置,并行文件系统级和文件级均不支持。
  • 返回结果说明 表3 返回结果列表 参数名称 参数类型 描述 output *BaseModel 参数解释: 接口返回信息,详见BaseModel。 err error 参数解释: 接口返回错误信息。 表4 BaseModel 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *DeleteDirAccesslabelInput 必选 参数解释: 设置并行文件系统ACL请求参数,详见DeleteDirAccesslabelInput。 extensions extensionOptions 可选 参数解释: 并行文件系统相关扩展信息。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。
  • 代码示例 本示例用于设置并行文件系统examplebucket中目录名为Dirname的accesslabel。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.SetDirAccesslabelInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定对象名,此处以 Dirname 为例。 input.Key = "Dirname" // 指定目录的accesslabel,这次以role_label_01和role_label_02为例 input.Accesslabel = []string{"role_label_01", "role_label_02"} // 设置对象的AccessLabel output, err := obsClient.SetDirAccesslabel(input) if err == nil { fmt.Printf("Set dir(%s) accesslabel successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Set dir(%s) accesslabel fail with bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 接口约束 建议使用IAM或策略进行授权,如果使用IAM则需授予obs:object:putAccessLabel权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持,如何创建并行文件系统请参考创建并行文件系统(Go SDK)。 仅支持并行文件系统的目录级别的设置,并行文件系统级和文件级均不支持。
  • 返回结果说明 表3 返回结果列表 参数名称 参数类型 描述 output *BaseModel 参数解释: 接口返回信息,详见BaseModel。 err error 参数解释: 接口返回错误信息。 表4 BaseModel 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 input *SetDirAccesslabelInput 必选 参数解释: 设置并行文件系统ACL请求参数,详见SetDirAccesslabelInput。 extensions extensionOptions 可选 参数解释: 并行文件系统相关扩展信息。通过调用拓展配置项为对应请求配置额外的拓展请求头,详情参考extensionOptions。
  • docker常用网络模式介绍 host模式 在创建docker容器时使用如下命令指定。 --net=host host模式下容器将不会获得一个独立的Network Namespace ,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口,此时容器不再拥有隔离的、独立的网络栈,不拥有所有端口资源。 使用host模式后,无需再对容器做端口映射,同时,容器就和宿主机共用网络,容器中的网络服务也可以访问到宿主机的网络服务。 桥接模式(Bridge) docker容器默认为该模式。容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。 在为容器设置ip时,会从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。 docker0概念介绍:Docker服务默认会创建一个docker0网桥,它在内核层连通了其他的物理或虚拟网卡,将所有容器和本地主机都放到同一个物理网络。Docker服务默认指定了docker0接口的IP地址和子网掩码,保证主机和容器之间可以通过网桥相互通信。 Network Namespace概念介绍:Network Namespace是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,每个空间拥有独自的网络栈信息,保证虚拟机或容器运行时仿佛在独立的网络中。
  • 操作步骤 (推荐)基于host模式配置 使用host模式,docker容器可以直接使用宿主机的IP和端口,更加简单便捷,更推荐在多机分布式训练时使用。但是在设置容器的ssh免密登录时,仍需要将容器的22端口和主机某个端口相映射。 进入容器中,修改/etc/ssh/sshd_config文件,增加port映射。 Port 18888 例如,在文件增加下面这一行,即为将容器的22端口和主机18888端口相映射。 重启sshd服务,执行如下命令。 /usr/sbin/sshd 此时,有两种方式实现免密登录。 (推荐)方式一:重新制作docker镜像(推荐) 在一个容器内,参考NPU Snt9B裸金属服务器多机免密互通解决方案完成配置后,将该容器打包为镜像,上传到华为云容器管理服务SWR,其他各个机器从SWR中使用docker pull命令拉取该镜像即可。不同机器使用同一个镜像,由于共用密钥,可以实现多机多容器免密登录。 方式二:参考NPU Snt9B裸金属服务器多机免密互通解决方案,分别配置每个容器的ssh免密登录信息,保证多机多容器之间实现互相ssh免密登录。 基于桥接模式(Bridge)配置 首先在创建docker容器时,要将容器需要对外暴露的端口和宿主机端口进行映射。 docker run -itd -p 18888:22 my_image 例如,上述命令就是将容器的22端口与宿主机的18888端口相映射。在宿主机执行如下命令,配置IP转发,用于容器内的网络访问。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward 以上命令含义为:Linux系统默认是禁止数据包转发的,转发即当主机拥有多于一块的网卡时,一块网卡收到数据包并根据数据包的目的ip地址将数据包发往本机另一块网卡。由于从外部访问容器内部时需要访问宿主机的地址和对应的容器映射的地址,访问的数据包到宿主机上后经过ip包解析后通过目的port和iptables的规则会将数据包由eth0网卡转发至docker0网桥上进行下一步路由。所以如果容器的宿主机上的ip_forward未打开,该宿主机上的容器则不能被其他宿主机访问。 最后,参考NPU Snt9B裸金属服务器多机免密互通解决方案配置容器的ssh免密登录信息,保证多机多容器之间实现互相ssh免密登录。
  • Token认证 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。 Token可通过调用获取用户Token接口获取,调用本服务API需要project级别的Token,即调用获取用户Token接口时,请求body中auth.scope的取值需要选择project,如下所示。 username、domainname 的获取请参考获取账号名和账号ID。password为用户密码。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } } 获取Token 后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。 GET https://iam.cn-north-1.myhuaweicloud.com/v3/auth/projects Content-Type: application/json X-Auth-Token: ABCDEFJ.... 您还可以通过这个视频教程了解如何使用Token认证:https://bbs.huaweicloud.com/videos/101333 。
  • AK/SK认证 AK/SK签名认证、Token认证方式仅支持消息体大小12M以内的请求使用。 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见API签名指南。 签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。
  • 基本概念 账号 用户注册华为云时的账号,账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用他们进行日常管理工作。 用户 由账号在IAM中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 在我的凭证下,您可以查看账号ID和用户ID。通常在调用API的鉴权过程中,您需要用到账号、用户和密码等信息。 区域(Region) 指云资源所在的物理位置,同一区域内可用区间内网互通,不同区域间内网不互通。通过在不同地区创建云资源,可以将应用程序设计的更接近特定客户的要求,或满足不同地区的法律或其他要求。 可用区(Availability Zone) 一个可用区是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 父主题: 使用前必读
  • 请求消息体 请求消息体通常以结构化格式发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。如果请求消息体中参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 例如,对于获取用户Token接口,您可以从接口的请求部分看到所需的请求参数及参数说明。将消息体加入后的请求如下所示,加粗的斜体字段需要根据实际值填写,其中username为用户名,domainname为用户所属的账号名称,********为用户登录密码,xxxxxx为project的name,获取方法请参见获取用户名、账号名和项目name。 scope参数定义了Token的作用域,上面示例中获取的Token仅能访问project下的资源。您还可以设置Token作用域为某个账号下所有资源或账号的某个project下的资源,详细定义请参见获取用户Token。 POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxx" } } } } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中“x-subject-token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务你正在请求什么类型的操作。 表2 HTTP方法 方法 说明 GET 请求服务器返回指定资源。 PUT 请求服务器更新指定资源。 POST 请求服务器新增资源或执行特殊操作。 DELETE 请求服务器删除指定资源,如删除对象等。 HEAD 请求服务器资源头部。 PATCH 请求服务器更新资源的部分内容。当资源不存在的时候,PATCH可能会去创建一个新的资源。 在获取用户Token的URI部分,您可以看到其请求方法为“POST”,则其请求为: POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 如下公共消息头需要添加到请求中。 表3 公共请求消息头 名称 描述 是否必选 示例 X-Sdk-Date 请求的发生时间,格式为(YYYYMMDD'T'HHMMSS'Z')。 取值为当前系统的GMT时间。 否 使用AK/SK认证时必选。 20150907T101459Z Authorization 签名认证信息。 该值来源于请求签名结果。 否 使用AK/SK认证时必选。 SDK-HMAC-SHA256 Credential=ZIRRKMTWPTQFQI1WKNKB/20150907//ec2/sdk_request, SignedHeaders=content-type;host;x-sdk-date, Signature=55741b610f3c9fa3ae40b5a8021ebf7ebc2a28a603fc62d25cb3bfe6608e1994 Host 请求的服务器信息,从服务API的URL中获取。值为hostname[:port]。端口缺省时使用默认的端口,https的默认端口为443。 否 使用AK/SK认证时必选。 code.test.com or code.test.com:443 Content-Type 发送的实体的MIME类型。 是 application/json Content-Length 请求body长度,单位为Byte。 POST/PUT请求必填。 GET不能包含。 3495 X-Project-Id project id,用于不同project取token。 如果是DeC的请求或者多project的请求则必须传入project id。 否 e9993fc787d94b6c886cbaa340f9c0f4 X-Auth-Token 用户Token。 否 使用Token认证时必选。 - 公有云API同时支持使用AK/SK认证,AK/SK认证是使用SDK对请求进行签名,签名过程会自动往请求中添加Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。AK/SK认证的详细说明请参见API签名指南。 其它header属性,请遵照https协议。 例如,对于获取用户Token接口,由于不需要认证,所以只添加“Content-Type”即可,添加消息头后的请求如下所示。 POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json
  • 请求URI 请求URI由如下部分组成。 {URI-scheme} :// {Endpoint} / {resource-path} ? {query-string} 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 表1 URI中的参数说明 参数 描述 URI-scheme 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 指定承载REST服务端点的服务器域名或IP,不同服务不同区域的Endpoint不同,您可以从终端节点中获取。 例如IAM服务在“华北-北京四”区域的Endpoint为“iam.cn-north-4.myhuaweicloud.com”。 resource-path 资源路径,也即API访问路径。 从具体API的URI模块获取,例如“获取用户Token”API的resource-path为“/v3/auth/tokens”。 query-string 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“limit=10”,表示查询不超过10条数据。 例如,您需要获取IAM在“华北-北京四”区域的Token,则需使用“华北-北京四”区域的Endpoint(iam.cn-north-4.myhuaweicloud.com),并在获取用户Token的URI部分找到resource-path(/v3/auth/tokens),拼接起来如下所示。 https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens 图1 URI示意图 为查看方便,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
共100000条