华为云用户手册

  • API概览 表1 RAM 接口列表 类型 说明 共享资源权限 检索指定资源类型的共享资源权限列表和详细信息接口,以及获取权限的所有版本接口。 资源共享实例 包括资源共享实例的创建、检索、更新和删除接口。 绑定的资源使用者和共享资源 包括绑定、移除和检索与资源共享实例关联的资源使用者和共享资源接口。 绑定的共享资源权限 包括绑定或替换、移除和检索资源共享实例关联的共享资源权限接口。 标签管理 包括资源共享实例标签的增、删、改、查接口。 共享资源 检索共享的资源接口。 资源使用者 检索资源使用者接口。 资源共享邀请 包括接受、拒绝和检索资源共享邀请接口。 组织共享 包括检索、启用和关闭与组织共享接口。 其他操作 包括查询资源共享的配额接口和检索云服务资源类型接口。
  • AK/SK认证 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见:API签名指南。 签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。
  • 状态码 表1 状态码 状态码 编码 说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。 例如,切换到HTTP的新版本协议。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 NoContent 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 BadRequest 非法请求。 建议直接修改该请求,不要重试该请求。 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法,请确认用户名和密码是否正确。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 NotFound 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 MethodNotAllowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Time-out 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested range not satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 UnprocessableEntity 请求格式正确,但是由于含有语义错误,无法响应。 429 TooManyRequests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 InternalServerError 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 ServiceUnavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 ServerTimeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。 父主题: 附录
  • 错误码 当您调用API时,如果遇到“APIGW”开头的错误码,请参见API网关错误码进行处理。 更多服务错误码请参见API错误中心。 状态码 错误码 错误信息 描述 处理措施 400 RAM.1001 The domain id in the header or the token is invalid. 账号ID或token无效。 请检查账号ID是否正确。 400 RAM.1002 The domain id %s in the header is invalid. 账号ID无效。 请检查账号ID是否正确。 400 RAM.1003 The token is invalid. token无效。 请联系技术支持。 400 RAM.1004 The account id is invalid. 账号ID无效。 请检查资源使用者的账号ID是否正确。 400 RAM.1005 The share principal %s cannot be the owner. 共享的使用者不能是资源所有者。 请检查资源使用者是否设置正确。 400 RAM.1006 The principal is invalid for duplicate. 资源使用者存在重复。 请删除重复的资源使用者。 400 RAM.1007 The resource urn is invalid for duplicate. 共享资源的URN存在重复。 请删除重复的共享资源URN。 400 RAM.1008 Bad request for checking permission. 共享资源的权限异常。 请检查是否已经对 IAM 用户授予RAM操作权限。 400 RAM.1009 The resource type %s has no permission. 共享资源未设置权限。 请设置共享资源的权限。 400 RAM.1010 The domain id %s does not own the resource urn %s. 账号ID与资源URN不匹配。 请检查账号ID与资源URN是否匹配。 400 RAM.1011 The %s num exceeds %s quota %s if add count %s. 超出最大配额。 请检查请求参数。 400 RAM.1012 The %s num exceeds the total quota %s if add count %s. 超出最大配额。 请检查请求参数。 400 RAM.1013 The organization management id %s has not enabled sharing. 组织共享功能未开启。 请开启组织共享功能。 400 RAM.1014 The cross organizations share cannot shared to the organizations with the principal %s. 跨组织共享无效。 请检查资源使用者的账号是否属于其他组织。 400 RAM.1015 The cross organizations share cannot shared to the organizations unit with the principal %s. 跨组织共享无效。 请检查资源使用者的账号是否属于其他组织。 400 RAM.1016 The cross organizations share cannot shared to the organizations root with the principal %s. 跨组织共享无效。 请检查资源使用者的账号是否属于其他组织。 404 RAM.1017 The resource share id %s is not found. 资源共享实例的ID无效。 请检查资源共享实例的ID是否正确。 404 RAM.1018 The permission id %s is not found. 共享资源的权限ID无效。 请检查共享资源的权限ID是否正确。 400 RAM.1019 Please accept the open beta of resource access service. 租户未申请服务公测。 请先申请服务公测。 404 RAM.1020 Get project failed. 获取project失败。 请检查账号ID是否正确。 404 RAM.1021 Get domain information failed. 获取domain信息失败。 请联系技术支持。 404 RAM.1022 The principal %s is not exist. 资源使用者不存在。 请检查资源使用者是否正确。 404 RAM.1023 The principal %s is invalid. 资源使用者无效。 请检查资源使用者是否正确。 404 RAM.1024 The urn %s is invalid. 共享资源的URN无效。 请检查共享资源的URN是否正确。 400 RAM.1025 Server SSL cert check failed. SSL证书检查失败。 请联系技术支持。 400 RAM.1026 Query restricted list failed. 查询受限列表失败。 请联系技术支持。 400 RAM.1027 Query frozen list failed. 查询冻结列表失败。 请联系技术支持。 400 RAM.1028 Bad request for notification. 请求错误。 请联系技术支持。 403 RAM.1029 The current operation has been restricted. 当前操作受限。 请检查账号是否被受限。 403 RAM.1030 The current operation has been frozen. 当前操作已冻结。 请检查账号是否被冻结。 400 RAM.1031 Bad request for authorization header pattern. 请求头校验失败。 请联系技术支持。 400 RAM.1032 Bad quota type. 错误的配额类型。 请检查配额类型是否正确。 400 RAM.1033 Async job failed. 任务执行失败。 请联系技术支持。 400 RAM.1034 Don`t have lock 获取锁失败。 请联系技术支持。 400 RAM.1035 Bad request for invalid context attributes. 请求错误。 请联系技术支持。 400 RAM.1036 Bad request for request proof. 请求错误。 请联系技术支持。 400 RAM.1037 Bad request for impersonate. 请求错误。 请联系技术支持。 400 RAM.1101 The status %s of the resource share with id %s is not active. 资源共享实例的状态未激活。 请检查资源共享实例的状态。 400 RAM.1102 There are resources in use in the resource share %s. 资源共享实例中存在已绑定的资源。 请检查资源是否已被绑定。 400 RAM.1103 Some resources do not have or have multiple corresponding permissions. 共享资源未添加或添加多种权限。 请检查共享资源的权限是否设置正确。 404 RAM.1104 Http header not found. HTTP请求头无效。 请检查HTTP请求头。 400 RAM.1105 Bad request for invalid user profile. HTTP请求头中UserProfile参数无效。 请检查HTTP请求头中UserProfile参数。 400 RAM.1106 Get domain tags failed. 获取Domain标签失败。 请联系技术支持。 500 RAM.1107 Bad request for invalid token. 获取OP账号Token失败。 请联系技术支持。 400 RAM.1108 Cannot share resource across sites between international account and national account. 国内站与国际站禁止共享资源。 请检查资源所有者和资源使用是否属于相同站点。 400 RAM.1109 Cannot share resource between op account and not-op account. OP账号与非OP账号禁止共享资源。 请检查资源所有者和资源使用是否属于相同类型账号。 400 RAM.1110 Resource sharing not allowed between internal and external accounts. 华为内部客户账号与外部客户账号之间禁止共享资源。 请检查资源所有者和资源使用是否属于相同类型账号。 400 RAM.1201 The request body is empty. 请求参数为空。 请检查请求参数。 409 RAM.1202 Some principals have been associated to the resource share with id %s. 资源共享实例中已绑定同样的资源使用者。 请检查是否重复绑定同一个资源使用者。 409 RAM.1203 Some resources have been associated to the resource share with id %s. 资源已被资源共享实例关联。 请检查是否重复关联同一个资源。 400 RAM.1204 The status %s of the resource share is not active. 资源共享实例的状态未激活。 请联系技术支持。 400 RAM.1205 Get organization id error. 获取组织ID错误。 请检查账号ID是否正确。 400 RAM.1206 Get ancestors error. 获取上层组织错误。 请检查账号ID是否正确。 400 RAM.1207 Unable to disassociate the principal or the resource which is not exist or owned by you. 无法解除不属于您或不存在的资源或资源使用者的关联。 请检查资源使用者或资源是否正确。 400 RAM.1208 Unable to disassociate the principal because you belong to the organization. 无法移除属于组织的资源使用者。 请检查资源使用者是否属于组织。 400 RAM.1209 Get organization path failed. 获取租户组织路径失败。 请联系技术支持。 400 RAM.1301 The status %s of the resource share is not active. 资源共享实例的状态未激活。 请联系技术支持。 409 RAM.1302 The resource type %s has associated one permission. 共享资源已经绑定权限。 请检查请求参数。 409 RAM.1303 The resource type %s is in use in the resource share with id %s. 共享资源正在使用中,无法解绑此共享资源的权限。 请停止使用此共享资源后再进行解绑权限操作。 409 RAM.1701 The current status of the invitation is %s. 资源共享邀请的状态异常。 请检查资源共享邀请的状态是否正确。 404 RAM.1702 The resource share invitation with id %s is not found. 资源共享的邀请无效。 请检查资源共享的邀请是否过期。 400 RAM.1801 The account id %s is not the management account of organization. 账号ID不是组织管理账号。 非组织管理账号无法进行该操作,请联系组织管理账号处理。 400 RAM.1802 Get organization info error. 组织信息错误。 请检查组织信息是否正确。 400 RAM.1803 The sharing with organization is not enabled by management account %s. 组织管理账号未开启共享。 请联系组织管理账号开启组织共享功能。 501 RAM.1804 RAM is not support organization sharing function. RAM不支持组织共享功能。 请联系技术支持。 400 RAM.1901 Tag key is exist for resource share id. 资源共享实例已存在此标签键。 请检查该资源共享实例中是否已存在同名标签。 400 RAM.1902 The tag key is duplicate. 标签键重复。 请检查标签键是否重复。 400 RAM.1903 The tag value is duplicate. 标签值重复。 请检查标签值是否重复。 400 RAM.1904 Failed to check the resource tag. 检查资源标签失败。 请联系技术支持。 400 RAM.1905 The tag policy doesn't allow the specified value for the following tag key. 标签策略不允许以下标签键使用指定的标签值。 请检查标签是否符合标签策略。 父主题: 附录
  • 变更影响 拆分后,新购云数据库 GaussDB 实例在订购关系、计费话单、账单里显示的产品类型将由“云数据库 GaussDB for MySQL”变更为“云数据库GaussDB”。为免疑义,本次云数据库GaussDB服务从GaussDB(for MySQL)服务独立拆分,不会对华为云与您之间已生效的华为云服务网站规定的协议和政策、订单以及与云服务销售相关的其它协议(如涉及)构成任何修订或变更,也不对其效力产生任何影响。 如您对上述云服务拆分有疑问,请在本公告发出后的一个工作日内通过工单或者服务热线(4000-955-988或950808)与我们联系。
  • 变更内容 对云数据库GaussDB服务与云数据库GaussDB(for MySQL)服务进行拆分,独立发布。 原挂靠在云数据库GaussDB(for MySQL)服务下的云数据库GaussDB产品,包括数据库计算、数据库存储、数据库备份空间,拆分后将挂靠在云数据库GaussDB服务下。 原先在云数据库GaussDB(for MySQL)服务下有效期内的现金券、优惠券等优惠,拆分后将在云数据库GaussDB服务下同时生效。
  • 影响 原“GaussDB(for openGauss)”更名为GaussDB,相关URL变更请参考GaussDB华为云帮助中心地址切换。 原“GaussDB(for MySQL)”名称保持不变,相关URL变更请参考GaussDB(for MySQL)华为云帮助中心地址切换。 由于更名涉及内容较多,时间较长,更名期间,原“GaussDB(for openGauss)”的计费名称会暂时挂靠在GaussDB(for MySQL)名下,但费用和资源不会有任何变化,该产品的功能使用以及您的业务不会受任何影响。 更名以后原页面URL将只给云数据库 GaussDB使用 ,云数据库 GaussDB(for MySQL)产品控制台请访问产品新页面URL。
  • 搭建emobile运行环境 E CS 服务器购买,选型 操作系统选择Centos7.9,安全组使用默认安全组,端口提前开通好80,443,5222,7070,8999端口 图1 选型1 图2 选型2 服务器磁盘挂载 本操作以该场景为例,当弹性云服务器挂载了一块新的数据盘时,使用fdisk分区工具将该数据盘设为主分区,分区形式默认设置为MBR,文件系统设为ext4格式,挂载在“/usr/weaver”下,并设置开机启动自动挂载。(实际路径根据实际情况修改) 参考如下链接:https://support.huaweicloud.com/qs-evs/evs_01_0033.html 图3 挂载 集群emobile环境部署 父主题: 搭建emobile运行环境
  • 搭建ecology运行环境 ECS服务器购买,选型 操作系统选择Centos7.9,安全组使用默认安全组,端口提前开通好80,443,5222,7070,8999端口 图1 搭建1 图2 搭建2 服务器磁盘挂载 本操作以该场景为例,当弹性云服务器挂载了一块新的数据盘时,使用fdisk分区工具将该数据盘设为主分区,分区形式默认设置为MBR,文件系统设为ext4格式,挂载在“/usr/weaver”下,并设置开机启动自动挂载。(实际路径根据实际情况修改) 参考如下链接: https://support.huaweicloud.com/qs-evs/evs_01_0033.html 图3 搭建3 RDS数据库购买,选型 选择SQL Server 2016 Web版,数据库字符集编码选择Chinese_PRC_CI_AS 图4 搭建4 安全组里面将ECS内网的1433放通,并且要关联对应的服务器实例 图5 搭建5 图6 搭建6 图7 搭建7 SFS文件存储购买,选型 选择通用标准型,协议NFS 图8 搭建8 Redis缓存数据库购买,选型 选择主备,5.0版 图9 搭建9 配置白名单,将服务器的内网IP添加到白名单中 图10 搭建10 集群ecology环境部署 父主题: 搭建ecology运行环境
  • 测试结果 测试场景一(实例规格):相同Exchange、队列、生产者数量、消费者数量、不同的实例规格 测试参数如下: Exchange:类型为“direct”,非持久化,不会自动删除。 队列:类型“经典队列”,数量为“3”,非持久化,会自动删除。 生产者:数量为“3”。 消费者:数量为“3”。 表2 测试结果 实例规格 磁盘类型 代理数量 生产速率 消费速率 rabbitmq.2u4g.cluster 超高I/O 3 32052 25219 rabbitmq.4u8g.cluster 超高I/O 3 53774 47370 rabbitmq.8u16g.cluster 超高I/O 3 54727 45730 rabbitmq.16u32g.cluster 超高I/O 3 66896 51061 通过上表的测试结果,得出以下结论,仅供参考:实例规格越大,实例性能越高。
  • 测试环境 进行性能测试前,您需要先构建如下的测试环境: 购买如表1所示RabbitMQ 3.8.35版本的集群实例,购买方法请参考购买RabbitMQ实例。 设置连接RabbitMQ密码时,建议不要使用特殊字符。如果使用特殊字符,在使用测试脚本时,需要对特殊字符进行转义处理,否则会报错。 购买“rabbitmq-2u4g”实例时,请开启公网访问,并在安全组中入方向规则中放通15672端口,以便在浏览器中访问WebUI界面。 表1 实例参数 名称 代理数量 规格 是否开启SSL 磁盘类型 rabbitmq-ssl 3 rabbitmq.2u4g.cluster 是 超高I/O rabbitmq-2u4g 3 rabbitmq.2u4g.cluster 否 超高I/O rabbitmq-4u8g 3 rabbitmq.4u8g.cluster 否 超高I/O rabbitmq-8u16g 3 rabbitmq.8u16g.cluster 否 超高I/O rabbitmq-16u32g 3 rabbitmq.16u32g.cluster 否 超高I/O 购买完成后,在实例详情页获取RabbitMQ实例的内网连接地址,并记录购买实例时设置的用户名和密码。如果是“rabbitmq-2u4g”实例,除了内网连接地址、用户名和密码外,还需要记录Web界面UI地址,此地址在后续登录WebUI界面设置镜像队列和惰性队列时需要使用。 在“rabbitmq-2u4g”实例中,登录WebUI,并设置镜像队列、惰性队列和仲裁队列。 在“rabbitmq-2u4g”实例的“/”Vhost下,创建“fanout”类型的Exchange,具体步骤请参考创建RabbitMQ Exchange。 获取测试工具rabbitmq-perf-test-2.18.0-bin.tar.gz。 购买客户端服务器。 购买区域、可用区、虚拟私有云、子网、安全组与RabbitMQ实例保持一致,规格为16U32G,Linux系统的ECS服务器,具体步骤请参考购买弹性云服务器。 购买完成ECS后,需要在ECS中完成以下配置: 安装Java JDK,并配置JAVA_HOME与PATH环境变量。 export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH 下载rabbitmq-perf-test-2.18.0-bin.tar.gz,并解压。 tar -zxvf rabbitmq-perf-test-2.18.0-bin.tar.gz
  • 测试步骤 登录客户端服务器,进入“rabbitmq-perf-test-2.18.0/bin”目录下。 运行以下脚本,测试并记录不同实例规格下的生产速率和消费速率。 ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x 3 -y 3 -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 3 -y 3 -z 300 运行以下脚本,测试并记录rabbitmq-ssl实例在不同生产者数量、消费者数量、队列数量的生产速率和消费速率。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqps://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqps://test:******@192.168.0.150:5671 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 多队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqps://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqps://test:******@192.168.0.150:5671 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 运行以下脚本,测试并记录rabbitmq-2u4g实例在不同生产者数量、消费者数量、队列数量的生产速率和消费速率。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 多队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 运行以下脚本,测试并记录rabbitmq-2u4g实例在不同生产者数量、消费者数量、队列数量、队列类型的生产速率和消费速率,其中队列类型分别为“惰性”、“镜像”和“仲裁”。 单队列测试脚本(不包括仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 多队列测试脚本(不包括仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 单队列测试脚本(仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 --predeclared 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 --predeclared 多队列测试脚本(仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x --predeclared 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 --predeclared 运行以下脚本,测试并记录rabbitmq-2u4g实例的Fanout Exchange在不同消费者数量、队列数量的生产速率和消费速率。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 --predeclared 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-fanout -s 1024 -u queue-1 -x 1 -y 3 -z 300 --predeclared
  • 测试脚本 测试脚本自动创建的Exchange类型为“direct”,队列特性为非持久化、自动删除,在测试fanout类型Exchange和仲裁队列时,需要在脚本后增加“--predeclared”,表示使用自己定义的Exchange和队列参数。 测试开启SSL的实例时,需要将“amqp://”修改为“amqps://”,表示以加密形式传输数据。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z ${运行时间} 参数说明如下: 实例用户名:购买实例时设置的用户名。 实例密码:购买实例时设置的密码。 内网连接地址:购买实例后获取的内网连接地址。 队列名称:队列的名称。 生产者个数:生产者的数量。 消费者个数:消费者的数量。 运行时间:脚本的运行时间,单位为秒。 多队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z ${运行时间} --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 参数说明如下: 实例用户名:购买实例时设置的用户名。 实例密码:购买实例时设置的密码。 内网连接地址:购买实例后获取的内网连接地址。 生产者个数:生产者的数量。 消费者个数:消费者的数量。 运行时间:脚本的运行时间,单位为秒。 queue-%d:表示多个队列,队列名称前缀为queue-,%d表示变量,取值为从--queue-pattern-from数值到--queue-pattern-to数值的连续整数。例如 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3,表示3个队列,队列名称为queue-1、queue-2、queue-3。
  • 操作步骤 通过使用kubectl连接网格控制面获取kubeconofig的证书内容。 登录云容器引擎控制面,单击选择任意集群,进入详情页。 建议选择网格对应的VPC下的集群。若连接其他VPC下的集群,则需要参考UCS服务网格 集群连通方法打通集群所在VPC和网格对应VPC。 在左侧导航栏,单击“配置与密钥”,单击“密钥”页签,显示集群的密钥信息。 选择“命名空间”为“asm-system”,单击右上角“创建密钥”。 设置密钥参数,单击右下角“创建密钥”,完成密钥创建。 名称:自定义名称。例如:kubeconfig。 创建的密钥的名称不要使用mesh-kubeconfig,因为apiserver也会自动创建这个名字的密钥,如果使用了这个名称可能会被覆盖。 描述:(可选)。 密钥类型:选择“其他”,填写密钥类型为“cfe/secure-opaque”。 密钥数据:添加密钥数据,键为“kubeconfig”,值为1中获取到的kubeconfig证书内容。 单击左侧导航栏“插件与模板”,在“可安装插件”页签中找到“asm-service-controller”插件,单击“安装”。 填写配置参数,单击右下角“安装”,完成插件安装。 meshKubeconfigSecret:为步骤5中创建的密钥名称。 source:目前包含“nacos”,代表对接的第三方注册中心nacos的相关信息,其中包含4个参数。 name:为该注册中心名称。 addr:为nacos的ip及端口。 allnamespaces:为是否需要同步nacos全部命名空间中的服务,当allnamespaces为false时,需要填充namespaces,表示需要同步的nacos的命名空间。 namespaces:表示需要同步的nacos的命名空间。 若插件运行的集群为CCE turbo类型集群,在安装插件完成后,需要参考为Pod配置EIP为asm-system命名空间下,名为asm-service-controller的pod绑定eip,才能正常使用该插件功能。
  • 验证负载伸缩结果 查看FederatedHPA策略,结果显示工作负载的CPU使用率为0%。 kubectl get FederatedHPA hpa-example-hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 1 6m 通过如下命令访问工作负载,其中{ip:port}为负载的访问地址,可以在工作负载的详情页中查询。 while true;do wget -q -O- http://{ip:port}; done 观察工作负载自动扩容过程。 kubectl get federatedhpa hpa-example-hpa --watch 查看FederatedHPA策略,可以看到6m23s时负载的CPU使用率为200%,超过了目标值,此时触发了FederatedHPA策略,将工作负载扩容为4个Pod,随后的几分钟内,CPU使用并未下降,直到到8m16s时CPU使用率才开始下降,这是因为新创建的Pod并不一定创建成功,可能是因为资源不足Pod处于Pending状态,这段时间内在扩容节点。 到8m16s时CPU使用率开始下降,说明Pod创建成功,开始分担请求流量,到8分钟时下降到81%,还是高于目标值,在容忍度范围外,说明还会再次扩容,到9m31s时再次扩容到7个Pod,这时CPU使用率降为51%,在容忍度范围内,不会再次扩缩,因此此后Pod数量一直稳定在7个。 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 1 6m hpa-example-hpa Deployment/hpa-example 200%/50% 1 100 1 6m23s hpa-example-hpa Deployment/hpa-example 200%/50% 1 100 4 6m31s hpa-example-hpa Deployment/hpa-example 210%/50% 1 100 4 7m16s hpa-example-hpa Deployment/hpa-example 210%/50% 1 100 4 7m16s hpa-example-hpa Deployment/hpa-example 90%/50% 1 100 4 8m16s hpa-example-hpa Deployment/hpa-example 85%/50% 1 100 4 9m16s hpa-example-hpa Deployment/hpa-example 51%/50% 1 100 7 9m31s hpa-example-hpa Deployment/hpa-example 51%/50% 1 100 7 10m16s hpa-example-hpa Deployment/hpa-example 51%/50% 1 100 7 11m 查看FederatedHPA策略事件,可以看到策略的生效时间。 kubectl describe federatedhpa hpa-example-hpa 停止访问负载,观察工作负载自动缩容过程。 查看FederatedHPA策略,可以看到从13m开始CPU使用率为21%,18m时Pod数量缩为3个,到23m时Pod数量缩为1个。 kubectl get federatedhpa hpa-example-hpa --watch NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-example-hpa Deployment/hpa-example 50%/50% 1 100 7 12m hpa-example-hpa Deployment/hpa-example 21%/50% 1 100 7 13m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 7 14m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 7 18m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 18m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 23m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 23m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 1 23m 查看FederatedHPA策略事件,可以看到策略的生效时间。 kubectl describe federatedhpa hpa-example-hpa 达到CronFederatedHPA策略的触发时间后,观察工作负载的自动扩缩容过程。 可以看到118m时Pod数量扩为4个,到123m时Pod数量扩为10个。 kubectl get cronfederatedhpa cron-federated-hpa --watch NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cron-federated-hpa Deployment/hpa-example 50%/50% 1 100 1 112m cron-federated-hpa Deployment/hpa-example 21%/50% 1 100 1 113m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 114m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 118m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 118m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 123m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 10 123m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 10 123m 查看CronFederatedHPA策略事件,可以看到策略的生效时间。 kubectl describe cronfederatedhpa cron-federated-hpa
  • 方案流程 使用负载伸缩策略的流程如图1,具体流程如下: 准备工作。在创建负载伸缩策略前,您需要准备两个已注册至UCS的华为云集群,并为其安装Kubernetes Metrics Server插件,并构建一个名称为hpa-example的镜像。 创建工作负载。基于准备工作中的镜像创建无状态工作负载与服务,并为其创建与部署调度策略。 创建负载伸缩策略。使用命令行工具创建FederatedHPA策略与CronFederatedHPA策略。 观察负载伸缩过程。查看工作负载中的Pod的数量变动,观察所创建的负载伸缩策略效果。 图1 复杂场景下负载伸缩策略使用流程
  • 应用场景 在一些复杂的业务场景下,可能有固定时间段高峰业务,又有日常突发高峰业务,若只使用标准的FederatedHPA功能,需要足够的时间来扩展工作负载,在预期的负载峰值可能会导致服务不可用。此种情况下,用户既期望能定时弹性伸缩应对固定时间段高峰业务,又期望能基于指标弹性伸缩应对日常突发高峰业务。联动FederatedHPA策略与CronFederatedHPA策略可实现复杂场景下的工作负载扩缩能力。 本小节将以hpa-example应用为例,指导您搭配使用FederatedHPA策略与CronFederatedHPA策略,实现复杂业务场景下的工作负载扩缩。
  • 创建工作负载 使用构建的hpa-example镜像创建无状态工作负载,Pod数为1。镜像地址与上传到的SWR仓库有关,需要替换为实际取值。 kind: Deployment apiVersion: apps/v1 metadata: name: hpa-example spec: replicas: 1 selector: matchLabels: app: hpa-example template: metadata: labels: app: hpa-example spec: containers: - name: container-1 image: 'hpa-example:latest' # 替换为您上传到SWR的镜像地址 resources: limits: # limits与requests建议取值保持一致,避免扩缩容过程中出现震荡 cpu: 500m memory: 200Mi requests: cpu: 500m memory: 200Mi imagePullSecrets: - name: default-secret 创建一个端口号为80的服务。 kind: Service apiVersion: v1 metadata: name: hpa-example spec: ports: - name: cce-service-0 protocol: TCP port: 80 targetPort: 80 nodePort: 31144 selector: app: hpa-example type: NodePort 为工作负载和服务创建一个调度策略,并将其部署到cluster01和cluster02两个集群,使用权重拆分的方式部署,每个集群的权重为1,以保证两个集群的相同优先级。 apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: hpa-example-pp namespace: default spec: placement: clusterAffinity: clusterNames: - cluster01 - cluster02 replicaScheduling: replicaDivisionPreference: Weighted replicaSchedulingType: Divided weightPreference: staticWeightList: - targetCluster: clusterNames: - cluster01 weight: 1 - targetCluster: clusterNames: - cluster02 weight: 1 preemption: Never propagateDeps: true resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: hpa-example namespace: default - apiVersion: v1 kind: Service name: hpa-example namespace: default
  • 创建负载伸缩策略 为工作负载创建FederatedHPA策略。 vi hpa-example-hpa.yaml YAML文件内容如下。该策略作用于名称为hpa-example的负载,稳定窗口时长为扩容0秒、缩容100秒,最大Pod数为100、最小Pod数为2,包含一条系统指标规则,期望的CPU利用率为50%。 apiVersion: autoscaling.karmada.io/v1alpha1 kind: FederatedHPA metadata: name: hpa-example-hpa # FederatedHPA策略名称 namespace: default # 工作负载所在命名空间名称 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: hpa-example # 工作负载名称 behavior: scaleDown: stabilizationWindowSeconds: 100 # 缩容的稳定窗口时长为100秒 scaleUp: stabilizationWindowSeconds: 0 # 扩容的稳定窗口时长为0秒 minReplicas: 2 # 最小Pod数为2 maxReplicas: 100 # 最大Pod数为100 metrics: - type: Resource resource: name: cpu # 扩缩指标基于CPU数据 target: type: Utilization # 指标类型为利用率 averageUtilization: 50 # 期望的平均利用率 创建CronFederatedHPA策略。 vi cron-federated-hpa.yaml YAML文件内容如下。该策略作用于名称为hpa-example-hpa的FederatedHPA策略,期望每天8:30扩容工作负载至10个Pod,每天10:00缩容工作负载至2个Pod。 apiVersion: autoscaling.karmada.io/v1alpha1 kind: CronFederatedHPA metadata: name: cron-federated-hpa # CronFederatedHPA策略名称 spec: scaleTargetRef: apiVersion: apps/v1 kind: FederatedHPA # 作用于FederatedHPA策略 name: hpa-example-hpa # FederatedHPA的名称 rules: - name: "Scale-Up" # 规则名称 schedule: 30 08 * * * # 触发时间 targetReplicas: 10 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区 - name: "Scale-Down" # 规则名称 schedule: 0 10 * * * # 触发时间 targetReplicas: 2 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区
  • 接入前准备 服务 域名 IP(如涉及) 端口 SWR swr.cn-north-4.myhuaweicloud.com 从VPCEP中获取。 443 OBS op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com 不涉及 443、80 CIA cie-{容器智能分析实例instanceid前八位数字}{当前选择接入的VPC子网ID前八位数字}.cn-north-4.myhuaweicloud.com 从VPCEP中获取。 443 DNS 不涉及 创建VPCEP,选择DNS Endpoint对应的地址。 53 其他区域的SWR及依赖OBS的域名信息。 Region SWR域名 OBS域名 华北-北京四 swr.cn-north-4.myhuaweicloud.com op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com 华东-上海二 swr.cn-east-2.myhuaweicloud.com obs.cn-east-2.myhuaweicloud.com 华东-上海一 swr.cn-east-3.myhuaweicloud.com op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com 华南-广州 swr.cn-south-1.myhuaweicloud.com op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com 西南-贵阳一 swr.cn-southwest-2.myhuaweicloud.com op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com 华北-乌兰察布一 swr.cn-north-9.myhuaweicloud.com obs.cn-north-9.myhuaweicloud.com 亚太-新加坡 swr.ap-southeast-3.myhuaweicloud.com op-svc-swr-b051-10-38-34-172-3az.obs.ap-southeast-3.myhuaweicloud.com 香港 swr.ap-southeast-1.myhuaweicloud.com obs.ap-southeast-1.myhuaweicloud.com 拉美-墨西哥一 swr.na-mexico-1.myhuaweicloud.com obs.na-mexico-1.myhuaweicloud.com 拉美-墨西哥二 swr.la-north-2.myhuaweicloud.com obs.la-north-2.myhuaweicloud.com
  • VPC网段之间的网络连通 登录云容器引擎控制台,选择本端集群,进入集群详情页,单击左侧导航栏“节点管理”,进入节点详情页。 单击“节点名称”下的节点,在弹出的页面中单击右上角“远程登录”,选择VNC方式登录。 根据界面提示,输入账号和密码,成功进入Linux环境中。 在云容器引擎控制台中,选择对端集群,进入集群详情页,单击左侧导航栏“节点管理”,进入节点详情页。 在3中,使用Linux命令查看网络是否连通。对端集群节点IP为4中的节点IP。例如:ping 172.X.X.X。 在对端集群中执行相同的操作。
  • 操作步骤 创建nginx-v1服务 进入CCE Console页面,单击在网格已添加的CCE集群名称进入集群详情页,单击“服务-服务”,选择对应命名空间,单击“创建服务”按钮。 参数填写说明: Service名称:自定义服务名称,例如nginx-v1。 访问类型:选择集群内访问。 选择器:单击“引用负载标签”,选择对应的工作负载,例如nginx。 端口配置:容器端口填写业务容器进程监听端口,例如80。服务端口填写通过service访问的端口,例如5566。 创建nginx-v2服务 参考步骤1创建nginx-v2服务。 创建基于流量比例的路由 进入华为云UCS控制台,依次单击“服务网格-要配置的网格名称-服务网关-网关路由-HTTP路由-YAML创建”。 使用以下内容,创建nginx-canary网关路由。 apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: nginx-canary namespace: whtest spec: parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: gwtest1 namespace: whtest rules: - backendRefs: - group: '' kind: Service name: nginx-v1 port: 5566 weight: 30 - group: '' kind: Service name: nginx-v2 port: 5566 weight: 70 matches: - path: type: PathPrefix value: / 该配置表示路由规则引用whtest命名空间下名为gwtest1的Gateway资源。因为未指定监听器名称,此处会尝试引用该Gateway的所有监听器。对于路径前缀为/的请求,将30%流量路由到同命名空间下的nginx-v1服务的5566端口,将70%流量路由到同命名空间下的nginx-v2服务的5566端口。 验证基于流量比例的路由生效 等待几秒钟待新规则配置下发成功,通过网关访问目标服务nginx应用,查看路由规则是否生效。 查看方法如下: 在浏览器中输入地址 http://$GATEWAY_ELB_IP:$GATEWAY_PORT/ ,其中, $GATEWAY_ELB_IP 是路由引用的whtest命名空间下名为gwtest1的网关的负载均衡公网地址; $GATEWAY_PORT是gwtest1网关的监听器对外端口。 预期结果: 反复多次刷新浏览器,约有70%的时间可以看到v2版本的nginx服务内容。
  • 使用场景 服务网关是网格的流量入口,网格外部的客户端通过服务网关访问网格内的服务。目前默认是基于Kubernetes Gateway API模型实现网关能力,网格服务详情中的灰度发布策略只适用于东西向网格内部服务间;对于南北向入口网关的目标服务,如果需要配置灰度发布策略,可参考下文为入口网关的目标服务配置灰度发布策略。 东西向网格内部服务间灰度发布,使用的是Istio的VirtualService/DestinationRule模型,依赖DestinationRulesubsets 来定义服务的版本。 南北向入口网关的目标服务灰度发布,使用的是Kubernetes Gateway API的后端服务定义(backend service definitions),依赖定义多个service来定义服务的版本。
  • 应用场景 UCS在 统一身份认证 服务(IAM)能力基础上,为用户提供细粒度的权限管理功能,帮助用户灵活便捷地对租户下的IAM用户设置不同的UCS资源权限,结合权限策略和舰队设计,可实现企业不同部门或项目之间的权限隔离。 例如,某公司同时推进两个项目组,每个项目组中有多名成员,权限分配如图1 权限设计所示。 项目组A在开发过程中需要舰队1、2的管理员权限以及舰队3的只读权限。 项目组B在开发过程中需要舰队1、3的管理员权限以及舰队2的只读权限。 图1 权限设计
  • 步骤二:UCS管理员授权 使用UCS管理员登录UCS控制台,在左侧导航栏选择“权限管理”。 单击右上角的“创建权限”按钮。 在弹出页面中填写权限的参数项。 权限名称:自定义权限的名称,需以小写字母开头,由小写字母、数字、中划线(-)组成,且不能以中划线(-)结尾。 用户:选择权限关联的用户,即上一步创建的IAM用户。实际应用中,一个用户组会有多个用户,创建权限时,可以将这个用户组下的所有用户全部选中,以达到批量授权的目的。 权限类型:选择“管理员权限”。管理员权限表示对所有集群资源对象的读写权限。 单击“确定”,创建权限。 权限创建完成后,可前往“容器舰队”页面,单击目标舰队右上角按钮。 图7 为舰队关联权限 在弹出的页面单击“关联权限”,打开“修改权限”页面,将3中创建的权限和舰队的全部命名空间关联起来。 图8 关联权限 单击“确定”。完成后,使用该IAM用户登录UCS控制台可使用权限范围内的功能。 重复以上步骤,完成表2中其他权限的创建,以及权限和舰队的关联。
  • 前提条件 账号已开通UCS服务,并且按照图1完成舰队、集群资源的准备工作。 按照图2完成权限数据的准备工作。 表1 IAM控制台数据准备 用户组 用户 权限 管理员用户组:UCS_Group_admin UCS_Group_admin_User1 UCS FullAccess 用户组1:UCS_Group_1 UCS_Group_1_User1、UCS_Group_1_User2 ... UCS CommonOperations 用户组2:UCS_Group_2 UCS_Group_2_User1、UCS_Group_2_User2 ... UCS CommonOperations 表2 UCS控制台数据准备 用户组 用户 权限类型 权限名称 用户组1 UCS_Group_1_User1、UCS_Group_1_User2 ... 管理员权限 ucs-group-1-admin 只读权限 ucs-group-1-readonly 用户组2 UCS_Group_2_User1、UCS_Group_2_User2 ... 管理员权限 ucs-group-2-admin 只读权限 ucs-group-2-readonly
  • 方案介绍 要想实现上述的权限隔离,必须结合使用IAM系统策略和UCS权限管理功能,IAM系统策略控制用户可操作哪些UCS控制台的功能,UCS权限管理控制用户可操作哪些舰队和集群资源。 如图2 授权方案所示,授权包括如下两大步骤。 第一步授权(IAM控制台):拥有Tenant Administrator权限的IAM管理员需要创建三个用户组,一个为管理员用户组,另外两个为项目组A、B所对应的用户组(用户组1、2),分别授予UCS FullAccess和UCS CommonOperations权限。 第二步授权(UCS控制台):拥有UCS FullAccess权限的UCS管理员分别为用户组1、用户组2创建各自的管理员权限、只读权限,然后关联到舰队上。 具体的关联策略如下:用户组1的管理员权限关联至舰队1、舰队2,只读权限关联至舰队3;用户组2的管理员权限关联至舰队1、舰队3,只读权限关联至舰队2。 图2 授权方案
  • 步骤一:IAM管理员授权 使用IAM管理员账号登录IAM控制台。 左侧导航栏选择“用户组”,单击右上角“创建用户组”。 在“创建用户组”界面,输入管理员用户组的名称及描述,单击“确定”,完成用户组创建。 图3 创建用户组 在用户组列表中,单击目标用户组右侧的“授权”按钮。 图4 为用户组授权 搜索并选择权限策略UCS FullAccess。 图5 选择权限策略 单击“下一步”,选择授权范围方案。 选择“所有资源”,不设置最小授权范围,用户可根据权限使用账号中所有资源,包括企业项目、区域项目和全局服务资源。 单击“确定”完成授权。 左侧导航栏选择“用户”,单击右上角“创建用户”,新建一个IAM用户。 填写用户名及初始密码,其余参数说明请参见创建IAM用户。 单击“下一步”,选择加入4中已授权的用户组。 图6 加入用户组 单击“创建用户”。 重复上述步骤,完成表1中其他用户组、用户的创建和授权。
  • 方案流程 使用工作负载Identity的流程如图1 使用工作负载Identity流程,具体流程如下: 前置授权。 在UCS获取本地集群私钥签发的jwks,该公钥用于验证集群签发的ServiceAccount Token。 在 IAM 配置身份供应商,标志当前集群在IAM侧的身份。 为身份提供商配置集群签发的公钥,后续负载使用Token发送请求时,IAM使用该公钥验证Token。 添加 ServiceAccount 与 IAM 账号的映射规则,配置后,当前 ServiceAccount 拥有对应用户的 IAM 权限。 工作负载配置Token。 部署应用并配置ServiceAccount。 挂载对应ServiceAccount的Token。 验证获取的Token能否正常进行访问。 访问IAM接口获取IAM Token。 使用IAMToken 访问云服务。 图1 使用工作负载Identity流程
  • 获取IAM Token 创建 ServiceAccount,此处 ServiceAccount 的名称需要与2时填写的 ServiceAccountName 保持一致。 apiVersion: v1 kind: ServiceAccount metadata: name: test_sa_name # 与配置身份转换规则处保持一致 如下所示,在工作负载中新增 ServiceAccount 以及 Volume 相关配置。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx version: v1 template: metadata: labels: app: nginx version: v1 spec: containers: - name: container-1 image: nginx:latest volumeMounts - mountPath: "/var/run/secrets/tokens" # 将Kubernetes生成的ServiceAccountToken 挂载到 /var/run/secrets/tokens/token_path 文件内 name: token-volume imagePullSecrets: - name: default-secret serviceAccountName: test_sa_name # 上一步创建的ServiceAccount的名称 volumes: - name: token-volume projected: defaultMode: 420 sources: - serviceAccountToken: audience: ucs-cluster-identity # 此处取值必须为身份提供商的客户端ID expirationSeconds: 7200 # 过期时间 path: token_path # 路径名称,可自定义 创建完成后,登录到容器中获取 Token。 构造请求体数据,项目ID的获取请参见获取项目ID。 { "auth" : { "id_token" : { "id" : "eyJhbGciOiJSUzIXXXXX" // 上一步获得的 token 内容 }, "scope": { "project" : { "id" : "05495693df80d3c92fa1c01795c2be02", // 项目 ID "name" : "cn-north-7" } } } } 请求IAM接口以获取IAM Token,IAM的Endpoint信息请参见地区和终端节点。 curl -i --location --request POST 'https://{{iam endpoint}}/v3.0/OS-AUTH/id-token/tokens' --header 'X-Idp-Id: {{workload_identity}}' --header 'Content-Type: application/json' --data @token_body.json workload_identity为1中注册的身份提供商名称,此示例内为 ucs-cluster-identity。 token_body.json 为构造的请求体数据文件。 返回体内获取IAM Token,响应消息头中 X-Subject-Token 字段即为 IAM Token。
共100000条