华为云用户手册

  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的 云安全 挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的IaaS、PaaS和SaaS各类各项云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。 华为云租户的安全责任在于对使用的IaaS、PaaS和SaaS类各项云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、 虚拟主机 和访客虚拟机的操作系统,虚拟防火墙、API网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 与其他云服务的关系 若您需要使用点播服务的 消息通知 、权限管理等功能,您还需要开通其它依赖服务,如表1所示。 表1 与其他云服务关系 交互功能 相关服务 位置 在控制台配置消息通知时勾选 SMN 主题 消息通知服务(Simple Message Notification,SMN) 创建主题 添加订阅 设置主题策略 通过 IAM 服务实现管理用户以及用户组 统一身份认证 服务(Identity and Access Management, IAM) 创建用户组并授权 创建IAM用户
  • 数据保护技术 VOD通过多种数据保护手段和特性,保障存储在VOD中的数据安全可靠。 表1 VOD的数据保护手段和特性 数据保护手段 简要说明 详细介绍 传输加密(HTTPS) 支持HTTP和HTTPS两种传输协议,为保证数据传输的安全性,推荐您使用更加安全的HTTPS协议。 HTTPS配置方法 敏感 数据加密 保护 对您配置的敏感数据(如防盗链Key)使用安全的加密算法进行保存。 - HLS加密 支持通过标准HLS协议,对媒体流加密,防止恶意付费用户下载后分发。 HLS加密介绍 视频水印设置 支持通过转码方式对上传的视频添加特定的图片水印,防止视频被非法盗用。 水印设置 父主题: 安全
  • 附件:诚信约定书 尊敬的华为云会员: 感谢您加入华为云奖励推广计划。在双方合作开始前,华为云特与您就合作过程中必须遵守的商业行为规范进行约定如下。 诚信约定 诚信是双方合作的基础。您在与华为云的业务往来过程中,应当坚持诚信原则,承诺不从事欺瞒甚至欺诈的不诚实行为,包括但不限于: 1) 在推荐人准入资格调查、商业合同订立(如有)、履行过程中,向华为云提供的文件、资料、数据、陈述和口头陈述等应保证真实、准确,不得提供虚假信息或隐瞒重要信息,禁止任何形式的商业欺诈。 2) 严格遵守向华为云做出的承诺,遵照华为云奖励推广计划管理规范和活动规则,及双方签署的其他合同、协议和备忘录执行,按时、保质、保量向华为云/或华为云用户提供产品及/或服务,不得降低具体服务质量标准、不按约定标准提供服务,不得在为华为云/或华为云用户提供服务的过程中掺杂掺假、以假充真、以次充好,不得擅自篡改信息系统数据,不得违反合同牟取暴利等。 3) 按照华为云要求,主动申报与华为云以华为云员工(包括但不限于华为云正式员工、受雇方、顾问等,以下简称华为云员工)是否存在关联关系。 4) 特别提醒:您须明确,华为云员工未经华为云事先书面授权,做出的任何书面/口头承诺均为其个人行为,对华为云和您均不具备约束力。 反不正当利益约定 为保障公平商业竞争,您承诺不为促成合同的签订、履行,或获得比任何第三方更高的商业利益、更优厚的商业待遇、或证券市场增值等,而直接或间接向华为云员工提供任何形式的不正当利益,包括但不限于: 1)提供任何私人利益或赠与,包括但不限于实物、现金或现金等价物、优惠,以及其它财产性权益;现金等价物包括但不限于消费卡/券、提货券、购物卡、换购券、充值卡、交通卡、电话卡、各种话费的充值或其他可供使用或消费的充值、储值卡及其他形态的有价礼券或证券等; 2)提供娱乐及款待,包括但不限于卡拉OK、SPA、足浴、高尔夫、商业演出、旅游、商业体育活动、奢侈的餐饮款待等; 3)提供工作机会,包括但不限于建立劳动关系、劳务派遣、外包服务、兼职、咨询顾问等其他形式,及/或向其支付任何形式的报酬; 4)提供投资机会,即以本人名义持有或以第三方名义代持有乙方股权,但通过公开的证券交易市场且低于发行在外5%的权益、通过直接或间接持有无实际控制权的基金、或通过受益人非本人或关联人士的信托方式持有的股份除外; 5)提供借款,或其他利益。 您同意,一旦上述情形发生,华为云有权向任何第三方披露、或向社会公开您的违约行为。 反贿赂约定 公司贿赂是不良的商业行为,违背市场经济的基本原则,增加开展商业活动的风险,同时危及公司的底线和声誉,损害长期利益。为创造公平公正的市场经营秩序,维护各方的合法权益,您承诺将坚决抵制贿赂行为并遵守如下约定,包括但不限于: 1)遵守中国以及任何适用国家禁止私有或公共领域贿赂、回扣、腐败、反竞争行为或不正当竞争的相关法律法规的要求,遵守任何适用的反贿赂和反腐败的国际公约的规定; 2)不得为获得和保留业务或谋求交易机会或竞争优势直接或间接向任何政府机构、政府官员、非国家工作人员授权、提供、允诺或支付任何违反法律法规的报酬、礼物以及其他有价值的物品或利益,或采取其他违反法律法规的行为; 3)您向交易相对方支付折扣、向中间人支付佣金的,应以明示方式,并如实入账;您接受的折扣、佣金也应当如实入账; 4)您承诺不能利用与被推广用户相关人员的关联关系(包括但不限于近亲属等)谋取不正当利益,且不得违反被推荐企业的内部管理规范要求。 您同意,一旦上述情形发生,华为云仍然有权根据您的违约情节、配合调查情况等因素,酌情减轻、免除违约金的收取。 此种情况下,华为云有权向任何第三方披露、或向社会公开您的违约行为。 廉洁诚信反馈渠道 1) 您如在日常业务过程中遇到华为云员工存在索贿行为的,必须拒绝,并通过以下渠道进行举报。 举报电子邮箱: cloudcps@huawei.com 2) 如果您对华为云员工的索贿行为不拒绝、不申报,并满足其要求的,则该行为应视同您的贿赂行为。 3) 华为云正式向您承诺,对您反馈的华为云员工有违反上述约定行为的举报行为及联系方式等进行保密。 约定有效期 1) 您同意本约定在双方业务往来期间及合作终止后一直有效,且效力自动溯及至双方建立业务关系之始,双方所有实际业务(包括没有签订书面业务合同的)均适用本特别约定。 2) 如果您在确认签署本特别约定之时,向华为云书面承认本约定签署之前存在的违反上述约定的行为的,华为云可考虑酌情减免您的违约责任及索赔金额。 华为云计算 技术有限公司 同意协议并签约
  • 续费相关的功能 包年/包月实例续费相关的功能如表1所示。 表1 续费相关的功能 功能 说明 手动续费 包年/包月实例从购买到被自动删除之前,您可以随时在管理控制台为实例续费,以延长实例的使用时间。 自动续费 开通自动续费后,实例会在每次到期前自动续费,避免因忘记手动续费而导致资源被自动删除。 在一个包年/包月实例生命周期的不同阶段,您可以根据需要选择一种方式进行续费,具体如图所示。 图1 实例生命周期 实例从购买至到期前,处于正常运行阶段,资源状态为“运行中”。 到期后,资源状态变为“已过期”。 到期未续费时,实例首先会进入宽限期,宽限期到期后仍未续费,资源状态变为“已冻结”。 超过宽限期仍未续费将进入保留期,如果保留期内仍未续费,资源将被自动删除。 华为云根据客户等级定义了不同客户的宽限期和保留期时长。 在实例到期前均可开通自动续费,到期前7日凌晨3:00首次尝试自动续费,如果扣款失败,每天凌晨3:00尝试一次,直至实例到期或者续费成功。到期前7日自动续费扣款是系统默认配置,您也可以根据需要修改此扣款日。
  • 操作步骤 创建组件。 调用创建组件接口,请求示例如下: curl -k -H "Content-Type:application/json" -H "X-Environment-ID: $env_id" -H "X-Auth-Token:$Token" -X POST "https://{cae_endpoint}v1/{project_id}/cae/applications/{application_id}/components" -d '{ "api_version": "v1", "kind": "Component", "metadata": { "name": "demo-jar", "annotations": { "version": "1.0.0" } }, "spec": { "runtime": "Java8", "build": { "archive": { "artifact_namespace": "target_namespace" }, "parameters": { "base_image": "openjdk:8u181-jdk-alpine", "build_env": "java-8" } }, "source": { "type": "softwarePackage", "sub_type": "BinObs", "url": "https://xx/demo.jar" }, "resource_limit": { "cpu_limit": "500m", "memory_limit": "1Gi" }, "replica": 1 }}' 返回结果: { "api_version": "v1", "kind": "Component", "metadata": { "id": "908aabb3-0b50-4116-8e83-a6933ec1884c", "name": "demo-jar", "annotations": { "version": "1.0.0" }, "created_at": "2022-07-05T08:28:24.4885176Z", "updated_at": "2022-07-05T08:28:24.4885176Z" }, "spec": { "runtime": "Java8", "env_id": "50d18173-5df0-4db4-a2b6-8a428d42146b", "replica": 1, "source": { "type": "softwarePackage", "sub_type": "BinObs", "url": "https://xx/demo.jar" }, "build": { "archive": { "artifact_namespace": "target_namespace" }, "parameters": { "base_image": "xxx" } }, "access_info": null, "image_url": "", "available_replica": 0, "status": "", "build_log_id": "" }} 得到的job_id,可以通过job_id获取对应的创建的状态。
  • 错误码 当您调用API时,如果遇到“APIGW”开头的错误码,请参见API网关错误码进行处理。 类型 状态码 错误码 错误信息 描述 处理措施 访问方式 500 CAE.01500101 Remote creates access failed. 访问方式创建失败 需要联系技术支持工程师,检查报错具体内容。 500 CAE.01500102 Remote updates access failed. 访问方式更新失败 需要联系技术支持工程师,检查报错具体内容。 500 CAE.01500103 Remote deletes access failed. 访问方式删除失败 需要联系技术支持工程师,检查报错具体内容。 500 CAE.01500104 Delete ip group failed. 删除ip地址组失败 需要联系技术支持工程师,检查依赖服务是否正常。 500 CAE.01500107 ELB service connect failed. 访问ELB连接失败 需要联系技术支持工程师,检查依赖服务是否正常。 组件 500 CAE.01500201 Update component status failed. 更新组件状态失败 重试,组件状态展示正常。若有异常,联系技术支持工程师。 500 CAE.01500202 Execute component action failed. 操作组件失败 联系技术支持工程师,检查组件基本信息。 500 CAE.01500203 Get component config failed. 获取组件配置失败 联系技术支持工程师,一般为报文解析异常 500 CAE.01500204 Get component event failed. 获取组件事件失败 联系技术支持工程师,检查依赖服务是否正常。 400 CAE.01500206 The component name is invalid. 组件名称非法 根据要求修改组件名称。 400 CAE.01500205 The input component name already exists in the application. 当前应用存在同名组件 同一应用不能存在同名组件,根据要求修改组件名称。 400 CAE.01500211 Data type of imported configuration variable is not string. 下发组件配置类型非法 根据要求修改组件配置类型。 400 CAE.01500208 Component not exist. 组件不存在 确认操作组件是否正确,根据要求修改组件ID。 400 CAE.01500207 Component instance is exist. 组件实例有残留 删除组件实例失败,联系技术支持工程师。 应用 400 CAE.01500212 There are components under application, delete operation is forbidden. 当前应用存在组件,禁止删除应用 需删除所有组件才能删除应用。 404 CAE.01500213 App not exist. 应用不存在 确认操作应用是否正确,联系技术支持工程师。 环境 400 CAE.01500303 Engine with basic not found. 环境基础信息未找到 联系技术支持工程师。 500 CAE.01500301 Engine status is unavailable. 环境状态不可用 联系技术支持工程师。 400 CAE.01500311 Engine is already exist. 环境已存在 联系技术支持工程师。 500 CAE.01500302 Create engine failed. 创建环境失败 联系技术支持工程师。 500 CAE.01500401 Create environment failed. 创建环境失败 联系技术支持工程师。 500 CAE.01500402 Delete environment failed. 删除环境失败 联系技术支持工程师。 500 CAE.01500403 Env is deleting. 环境正在被删除 等待环境删除完成。 500 CAE.01500404 Environment not found. 环境不存在 查询环境是否存在。 400 CAE.01500405 The environment has unbound cloud storage resource. 环境存在未绑定的 云存储 资源 联系技术支持工程师。 400 CAE.01500406 There are applications under environment, delete operation is forbidden. 环境下存在应用,不允许删除环境。 删除应用后再删除环境。 400 CAE.01500407 The environment cannot be deleted because the event notice rule still exists. 环境存在事件通知规则。 删除事件通知规则后重试。 400 CAE.01500408 Environment cannot be deleted, as there are un-deleted network configurations in system settings. 环境下系统设置中存在系统网络配置,不允许删除环境。 删除系统设置下的系统网络配置,再删除环境。 400 CAE.01500409 VPC id is inconsistent with the vpc id of environment. vpc ingress/egress配置的vpc id和环境选择的vpc id不一致。不允许创建系统网络配置。 在CAE概览界面查看环境所在VPC(虚拟私有云),选择一致的VPC再创建系统网络配置。 400 CAE.01500410 VPC ingress can not be deleted, as some components is using vpc access. 系统网络配置下的"VPC访问CAE环境"不允许删除,因为还有组件在使用。 确认组件是否还需要继续使用,如果需要则不允许删除,如果不需要则在组件配置中删除后重试。 400 CAE.01500411 Current environment is too old, can not retry, you can delete the environment and create a new environment. 创建环境时报错:当前环境版本过低,不允许重试。请删除环境后重新创建新环境。 删除环境后重新创建。 500 CAE.01500412 Get embedded cidrs failed. 创建"CAE环境访问VPC"配置,获取内置网段失败。 联系技术支持工程师。 400 CAE.01500413 The environment cannot be deleted because it still has sub environments. 环境不能删除,因为还有其他子环境未删除。 删除子环境后再删除当前环境。 任务 500 CAE.01500501 Retry job failed. 重试任务失败 查看任务状态,任务状态失败或者超时方可重试。 云存储 500 CAE.01500601 Creates volume failed. 创建磁盘挂载失败 联系技术支持工程师。 500 CAE.01500602 Deletes volume failed. 删除磁盘挂载失败 联系技术支持工程师。 400 CAE.01500603 Conflicts with another volume or log path under component. 与同组件下云存储配置路径或日志采集路径冲突。 检查云存储配置路径或日志采集路径,修改冲突路径。 400 CAE.01500604 AK SK is invalid. ak sk无效 刷新页面重试。若仍然有异常,联系技术支持工程师。 配额 400 CAE.01500712 Quota is insufficient. 配额不足 联系技术支持工程师添加配额。 500 CAE.01500701 Increase used failed. 配额使用量增加修改失败 联系技术支持工程师。 500 CAE.01500702 Decrease used failed. 配额使用量减少修改失败 联系技术支持工程师。 500 CAE.01500703 Get quota failed. 获取配额失败 联系技术支持工程师。 委托 500 CAE.01500801 Service domain error, get service token failed. 获取服务token失败 联系技术支持工程师,检查服务依赖服务及配置项。 500 CAE.01500802 Switch token error, check iam service status. 转换token失败 重试,仍然失败则联系技术支持工程师,检查服务依赖服务及配置项。 500 CAE.01500803 Grant agency roles error, check iam service status or iam strategy. 授权失败 联系技术支持工程师,检查服务依赖服务及配置项。 500 CAE.01500804 Create or update agency failed, check if iam is ok. 创建或更新委托时失败 联系技术支持工程师,检查服务依赖服务IAM及相关配置项。 401 CAE.01500805 Get token by agency failed, agency is not exist. 项目里缺少委托或角色 联系技术支持工程师,检查IAM中委托及角色。 401 CAE.01500806 Not a domain user, or no security administrator role. 账号权限不足 检查当前IAM账号权限。 403 CAE.01500807 Roles in the agency for cae not enough, please re-create cae agency. CAE的委托中缺少部分部分服务访问权限 检查CAE相关委托中是否包含所有服务访问权限,可通过删除委托重建解决。 资源租户 500 CAE.01500901 Get resource tenant token failed, check if iam is ok. 获取资源租户token失败 联系技术支持工程师,检查服务依赖服务及配置项。 计费 500 CAE.01501001 List bills error,raw data fails to be aggregated or the charging process is abnormal. 获取账单失败 联系技术支持工程师。 账号冻结 401 CAE.01501101 User is restricted, can not execute create operation. 此账号因余额不足受限,请检查账号状态 账号充值后解冻。 401 CAE.01501102 User is suspended, can not execute any operation, except view. 此账号被冻结,请检查账号状态 联系技术支持工程师。 域名 、证书 400 CAE.01501201 The domain has already existed. 域名配置冲突 配置了重复的域名,检查该域名是否已经配置。 500 CAE.01501203 Delete zone failed, check dns service status or component config. 域名正在被组件使用,不能删除 检查已有组件,查看是否有组件正在使用该域名。 500 CAE.01501205 Create tls certificate failed in k8s. 证书创建失败 联系技术支持工程师,检查服务依赖服务及配置项。 500 CAE.01501206 Update tls certificate failed in k8s. 证书更新失败 联系技术支持工程师,检查服务依赖服务及配置项。 500 CAE.01501207 Delete tls certificate failed, check cluster status or component config. 证书删除失败 联系技术支持工程师,检查服务依赖服务及配置项。 400 CAE.01501208 The certificate format is invalid or the certificate private key does not match. 操作证书时请求体错误 检查操作证书的请求体是否与api规则内容一致 资源 404 CAE.01501301 Resource not exist. 请求的资源不存在 确认该资源是否仍然存在 400 CAE.01501302 Resource already exist. 资源已存在。 确认是否已创建过同一资源。 配置 400 CAE.01501401 The component access configuration parameter is not valid, please check your parameter. 访问方式配置有错误,可能的原因有 端口数字超过限制、端口冲突 修改端口至[1,65535]范围,且检查可能涉及的配置(cae的组件占用的端口、所使用的独享型elb的监听器),保证端口占用不冲突。 400 CAE.01501404 The path of access configuration is invalid. 不符合url的正则规则 应在访问方式配置项里填写符合url正则规则的路径。 400 CAE.01501402 The input port will result in port conflict. 所选elb的端口已被占用 使用其他端口,如果使用的是独享型ELB,可检查该端口对应监听器使用情况,删除该监听器后,组件即可正常使用该端口。 400 CAE.01501403 The port of ingress rule conflicts. 七层访问方式策略冲突 修改域名、端口、elb、url中的任意一项,使【域名+监听端口+elb+url】不完全相同。 400 CAE.01501405 There is no monitor system config under environment, please create first. 创建性能管理配置,未配置系统设置-监控系统。 先配置在系统设置-监控系统配置监控系统,再创建组件性能管理配置。 权限 403 CAE.01501700 Not authorized for create. 缺少权限 添加对应权限,联系技术支持工程师。 403 CAE.01501701 Not real name authorized. 认证失败 联系技术支持工程师。 参数 400 CAE.01501800 The project in request url and the user token is not matched. url中project id与当前用户token不匹配 检查url中project id或当前token是否正确。 400 CAE.01501801 The input time should be at least 2 mins later than now. 配置启停规则时间距离当前时间太近 配置距离当前时间超过2分钟的启停规则执行时间。 400 CAE.01501802 Timer rule conflicts with scaling rule. 启停规则与生效范围内组件弹性伸缩策略冲突。 解决同一组件启停规则与弹性伸缩策略冲突,关闭其中一个。 400 CAE.01501803 Scaling rule conflicts with timer rule. 组件弹性策略与作用于该组件的启停策略冲突。 解决同一组件启停规则与弹性伸缩策略冲突,关闭其中一个。 400 CAE.01501804 Scaling rule unique param duplicate. 伸缩策略中时间配置冲突 检查伸缩策略中配置的时间策略。 400 CAE.01501805 VPC cidr conflict with embedded cidrs. vpc网段与CAE环境内置网段冲突 联系技术支持工程师。 400 CAE.01501806 Monitor system agent version is invalid. 监控系统探针版本无效 填写有效的监控系统探针版本。 400 CAE.01500108 Cannot modify health check protocol, please switch off first. 修改访问方式-健康检查协议失败 先关闭访问方式-健康检查后配置需切换的健康检查协议。 事件通知 400 CAE.01501901 The maximum number of noticeRules is 50. 事件通知规则上限50条 联系技术支持工程师。 403 CAE.01501902 Your account does not have the SMN permission. 账号无SMN权限 联系账号管理员配置权限。 DEW凭据 400 CAE.01502000 The maximum number of DEW secrets is 20. DEW凭据上线20条 联系技术支持工程师。 400 CAE.01502001 There are components using the secret. 有组件正在使用此凭据 请取消组件的相应的配置后重试。 403 CAE.01502002 You do not have permissions to get secret info, please check your current agency roles. 当前没有权限获取DEW凭据信息,请检查您当前账号下的权限 请增加DEW服务相应权限后再次重试。 集群 500 CAE.01502101 The cluster cannot be operated in the current state. CAE底层集群无法操作 联系技术支持工程师。 父主题: 附录
  • 请求URI 请求URI由如下部分组成。 {URI-scheme} :// {Endpoint} / {resource-path} ? {query-string} 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 URI-scheme:表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint:指定承载REST服务端点的服务器域名或IP,不同服务不同区域的Endpoint不同,您可以从地区和终端节点中获取。例如IAM服务在“华北-北京四”区域的Endpoint为“iam.cn-north-4.myhuaweicloud.com”。 resource-path:资源路径,也即API访问路径。从具体API的URI模块获取,例如“管理员创建IAM用户”API的resource-path为“/v3.0/OS-USER/users”。 query-string:查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“limit=10”,表示查询不超过10条数据。 例如您需要获取IAM在“华北-北京四”区域的Token,则需使用“华北-北京四”区域的Endpoint(iam.cn-north-4.myhuaweicloud.com),并在管理员创建IAM用户的URI部分找到resource-path(/v3.0/OS-USER/users),拼接起来如下所示。 https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users 图1 URI示意图 为查看方便,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 如下公共消息头需要添加到请求中。 Content-Type:消息体的类型(格式),必选,默认取值为“application/json”,有其他取值时会在具体接口中专门说明。 Authorization:签名认证信息,可选,当使用AK/SK方式认证时,使用SDK对请求进行签名的过程中会自动填充该字段。AK/SK认证的详细说明请参加AK/SK认证。 X-Auth-Token:用户Token,可选,当使用Token方式认证时,必须填充该字段。用户Token也就是调用获取用户Token接口的响应值,该接口是唯一不需要认证的接口。 X-Sdk-Date:请求发送的时间,可选,当使用AK/SK方式认证时,使用SDK对请求进行签名的过程中会自动填充该字段。 X-Project-ID:子项目ID,可选,在多项目场景中使用。如果云服务资源创建在子项目中,AK/SK认证方式下,操作该资源的接口调用需要在请求消息头中携带X-Project-ID。 X-Domain-ID:账号ID,可选。AK/SK认证方式下,全局服务的接口调用时,需在请求消息头中携带X-Domain-ID。 公有云API同时支持使用AK/SK认证,AK/SK认证是使用SDK对请求进行签名,签名过程会自动往请求中添加。Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。 AK/SK认证的详细说明请参加AK/SK认证。 对于管理员创建IAM用户接口,使用AK/SK方式认证时,添加消息头后的请求如下所示。 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/usersContent-Type: application/jsonX-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=****************
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务你正在请求什么类型的操作。 GET:请求服务器返回指定资源。 PUT:请求服务器更新指定资源。 POST:请求服务器新增资源或执行特殊操作。 DELETE:请求服务器删除指定资源,如删除对象等。 HEAD:请求服务器资源头部。 PATCH:请求服务器更新资源的部分内容。当资源不存在的时候,PATCH可能会去创建一个新的资源。 在管理员创建IAM用户的URI部分,您可以看到其请求方法为“POST”,则其请求为: POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users
  • 请求消息体 请求消息体通常以结构化格式发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。若请求消息体中参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于管理员创建IAM用户接口,您可以从接口的请求部分看到所需的请求参数及参数说明。将消息体加入后的请求如下所示,加粗的字段需要根据实际值填写。 accountid为IAM用户所属的账号ID username为要创建的IAM用户名。 email为IAM用户的邮箱。 **********为IAM用户的登录密码。 1 2 3 4 5 6 7 8 91011121314 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/usersContent-Type: application/json X-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=**************** { "user": { "domain_id": "accountid", "name": "username", "password": "**********", "email": "email", "description": "IAM User Description" } } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl命令行、postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中“x-subject-token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 操作步骤 创建环境。 调用创建环境接口,请求示例如下: curl -k -H "Content-Type:application/json" -H "X-Auth-Token:$Token" -X POST "https://{cae_endpoint}/v1/{project_id}/cae/environments" -d '{ "apiVersion": "v1", "kind": "Environment", "metadata": { "name": "env-toase", "annotations": { "type": "exclusive", "vpc_id": "d1f94768-0463-43c1-8eac-9faba848f5fa", "group_name": "demo" } }}' 返回结果: {"job_id": "68531a56-febe-4218-be23-97fe00454cd1"} 得到的job_id,可以通过job_id获取对应的创建的状态。
  • 调用API获取项目ID 项目ID通过调用查询指定条件下的项目列表API获取。 获取项目ID的接口为“GET https://{Endpoint}/v3/projects”,其中{Endpoint}为IAM的终端节点,可以从地区和终端节点获取。接口的认证鉴权请参见3.2 认证鉴权。 响应示例如下,其中projects下的“id”即为项目ID。 { "projects": [ { "domain_id": "65382450e8f64ac0870cd180d14e684b", "is_domain": false, "parent_id": "65382450e8f64ac0870cd180d14e684b", "name": "cn-north-4", "description": "", "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99" }, "id": "a4a5d4098fb4474fa22cd05f897d6b99", "enabled": true } ], "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects" } }
  • 响应消息体 响应消息体通常以结构化格式返回,与响应消息头中Content-type对应,传递除响应消息头之外的内容。 对于“管理员创建IAM用户”接口,返回如下消息体。为篇幅起见,这里只展示部分内容。 { "user": { "id": "c131886aec...", "name": "IAMUser", "description": "IAM User Description", "areacode": "", "phone": "", "email": "***@***.com", "status": null, "enabled": true, "pwd_status": false, "access_mode": "default", "is_domain_owner": false, "xuser_id": "", "xuser_type": "", "password_expires_at": null, "create_time": "2024-05-21T09:03:41.000000", "domain_id": "d78cbac1..........", "xdomain_id": "30086000........", "xdomain_type": "", "default_project_id": null } } 当接口调用出错时,会返回错误码及错误信息说明,错误响应的Body体格式如下所示。 { "error_msg": "Request body is invalid.", "error_code": "IAM.0011" } 其中,error_code表示错误码,error_msg表示错误描述信息。
  • 操作步骤 创建应用。 调用创建应用接口,请求示例如下。 curl -k -H "Content-Type:application/json" -H "X-Environment-ID: $env_id" -H "X-Auth-Token:$Token" -X POST "https://{cae_endpoint}/v1/{project_id}/cae/applications" -d '{ "apiVersion": "v1", "kind": "Application", "metadata": { "name": "demo-app", "annotations": { "description": "demo" } }}' 返回结果: { "api_version": "v1", "kind": "Application", "metadata": { "id": "25f5aa9e-724c-4227-ab56-79b4066dce21", "name": "demo-app", "annotations": { "description": "demo" }, "created_at": "2022-07-05T08:34:15.9820794Z", "updated_at": "2022-07-05T08:34:15.9820794Z" }}
  • 操作步骤 部署组件。 调用部署组件接口,请求示例如下: curl -k -H "Content-Type:application/json" -H "X-Environment-ID: $env_id" -H "X-Auth-Token:$Token" -X POST "https://{cae_endpoint}v1/{project_id}/cae/applications/{application_id}/components/{component_id}/action" -d '{ "api_version": "v1", "kind": "Action", "metadata": { "name": "deploy", "annotations": { "version": "1.0.0" } }}' 返回结果: {"job_id": "68531a56-febe-4218-be23-97fe00454cd1"} 得到的job_id,可以通过job_id获取对应组件的部署任务状态。
  • 运行容器 使用容器引擎可以直接运行Wordpress和MySQL,且可以使用--link参数将两个容器连接,在不改动代码的情况下让Wordpress的容器访问MySQL的容器。 执行下面的命令运行MySQL。 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=******** -e MYSQL_DATABASE=wordpress -d mysql:5.7 参数解释如下: --name指定容器的名称为some-mysql。 -e指定容器的环境变量。如这里指定环境变量MYSQL_ROOT_PASSWORD的值为********,请替换为您设置的密码。指定环境变量MYSQL_DATABASE,镜像启动时要创建的数据库名称为wordpress。 -d表示在后台运行。 执行下面的命令运行Wordpress。 docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=******** -e WORDPRESS_DB_USER=root -d wordpress 参数解释如下: --name指定容器的名称为some-wordpress 。 --link指定some-wordpress容器链接some-mysql容器,并将some-mysql命名为mysql。这里--link只是提供了一种方便,不使用--link的话,可以指定some-wordpress的环境变量WORDPRESS_DB_HOST访问mysql的IP与端口。 -p指定端口映射,如这里将容器的80端口映射到主机的8080端口。 -e指定容器的环境变量,如这里指定环境变量WORDPRESS_DB_PASSWORD的值为********,请替换为您设置的密码。Wordpress的环境变量WORDPRESS_DB_PASSWORD必须与MySQL的环境变量MYSQL_ROOT_PASSWORD值相同,这是因为Wordpress需要密码访问MySQL数据库。WORDPRESS_DB_USER为访问数据的用户名,使用用户root去连接MySQL。 -d表示在后台运行。 Wordpress运行之后,就可以在本机通过http://127.0.0.1:8080访问Wordpress博客了,如下所示。
  • 创建命名空间 登录云容器实例管理控制台,左侧导航栏中选择“命名空间”。 在对应类型的命名空间下单击“创建”。 填写命名空间名称。 设置VPC。 选择使用已有VPC或新建VPC,新建VPC需要填写VPC网段,建议使用网段:10.0.0.0/8~24,172.16.0.0/12~24,192.168.0.0/16~24。 设置子网网段。 您需要关注子网的可用IP数,确保有足够数量的可用IP,如果没有可用IP,则会导致负载创建失败。 单击“创建”。
  • 概述 在云容器实例中,您可以使用多种方法创建负载,包括使用云容器实例的Console控制台界面、调用API部署应用,那这些方式的使用有什么不同的地方呢?这些方法又与直接运行Docker run命令运行容器有什么区别呢? 本文将通过运行一个Wordpress + MySQL的博客为例,比较这几种方法之间的异同,以利于您挑选合适的使用方法。 WordPress是使用PHP语言开发的博客平台。用户可以在支持PHP和MySQL数据库的服务上架设属于自己的网站,也可以把WordPress当作一个内容管理系统来使用。更多WordPress信息可以通过官方网站了解:https://wordpress.org/。 WordPress需配合MySQL一起使用,WordPress运行内容管理程序,MySQL作为数据库存储数据。在容器中运行通常会将WordPress和MySQL分别运行两个容器中,如下图所示。 父主题: 负载创建
  • 应用场景 /dev/shm由tmpfs文件系统构成,tmpfs是Linux/Unix系统上的一种基于内存的文件系统,故读写效率非常高。 目前有用户希望通过/dev/shm实现进程间数据交互或通过/dev/shm实现临时数据存储,此时CCI场景/dev/shm默认大小64M无法满足客户诉求,故提供修改/dev/shm size大小的能力。 本操作实践展示通过“memory类型EmptyDir”和“配置securityContext与mount命令”两种方式来修改/dev/shm容量。
  • 限制与约束 /dev/shm使用基于内存的tmpfs文件系统,不具备持久性,容器重启后数据不保留。 用户可通过两种方式修改/dev/shm容量,但不建议在一个Pod中同时使用两种方式进行配置。 EmptyDir所使用的memory从Pod申请的memory中进行分配,不会额外占用资源。 在/dev/shm中写数据相当于申请内存,此种场景下需评估进程内存使用量,当容器内的进程申请内存与EmptyDir中数据量之和超过容器请求的限制内存时,会出现内存溢出异常。 当需要修改/dev/shm容量时,容量大小通常设定为Pod内存申请量的50%。
  • 镜像制作 tensorflow社区有tensoflow的基础镜像,已经装好了基础的tensorflow库,它分支持GPU和支持CPU两个版本,在镜像中心即可下载。 GPU版本地址为 tensorflow/tensorflow:1.15.0-gpu CPU版本地址为 tensorflow/tensorflow:1.13.0 本文采用tensorflow官网中一个已经训练好的模型,对图片进行分类,模型名称Inception-v3。Inception-v3是在2012年ImageNet视觉识别挑战赛上训练出的模型,它将一个非常大的图片集进行了1000个种类的图片分类。Github有使用Inception-v3进行图片分类的代码。 训练模型的代码,均在工程https://gpu-demo.obs.cn-north-1.myhuaweicloud.com/gpu-demo.zip中,您需要将代码下载解压,并将代码工程打入镜像中。下面附上制作镜像的Dockerfile文件内容: FROM tensorflow/tensorflow:1.15.0-gpuADD gpu-demo /home/project/gpu-demo 其中ADD将gpu-demo工程拷贝到镜像的/home/project目录下,可以根据自己需要修改。 执行docker build -t tensorflow/tensorflow:v1 . 命令制作镜像(.表示当前目录,即Dockerfile文件所在目录)。 镜像制作好后需要上传到 容器镜像服务 ,具体步骤请参见https://support.huaweicloud.com/usermanual-swr/swr_01_0009.html。
  • Namespace 调用创建Namespace接口创建命名空间,并指定使用命名空间的类型。 { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "namespace-test", "annotations": { "namespace.kubernetes.io/flavor": "gpu-accelerated" } }, "spec": { "finalizers": [ "kubernetes" ] }} 调用创建Network接口创建网络,与VPC与子网关联。 { "apiVersion": "networking.cci.io/v1beta1", "kind": "Network", "metadata": { "annotations": { "network.alpha.kubernetes.io/default-security-group": "{{security-group-id}}", "network.alpha.kubernetes.io/domain-id": "{{domain-id}}", "network.alpha.kubernetes.io/project-id": "{{project-id}}" }, "name": "test-network" }, "spec": { "availableZone": "{{zone}}", "cidr": "192.168.0.0/24", "attachedVPC": "{{vpc-id}}", "networkID": "{{network-id}}", "networkType": "underlay_neutron", "subnetID": "{{subnet-id}}" }}
  • MySQL 调用创建Deployment接口部署MySQL。 Deployment名称为mysql。 设置Pod的标签为app:mysql。 使用mysql:5.7镜像。 设置容器环境变量MYSQL_ROOT_PASSWORD为“********”,请替换为您设置的密码。 { "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "mysql" }, "spec": { "replicas": 1, "selector": { "matchLabels": { "app": "mysql" } }, "template": { "metadata": { "labels": { "app": "mysql" } }, "spec": { "containers": [ { "image": "mysql:5.7", "name": "container-0", "resources": { "limits": { "cpu": "500m", "memory": "1024Mi" }, "requests": { "cpu": "500m", "memory": "1024Mi" } }, "env": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "********" } ] } ], "imagePullSecrets": [ { "name": "imagepull-secret" } ] } } }} 调用创建Service接口创建一个Service,定义1中创建的Pod的访问策略。 Service名称为mysql。 选择标签为app:mysql的Pod,即关联1中创建的Pod。 负载访问端口3306映射到容器的3306端口。 Service的访问类型为ClusterIP,即使用ClusterIP在内部访问Service。 { "apiVersion": "v1", "kind": "Service", "metadata": { "name": "mysql", "labels": { "app": "mysql" } }, "spec": { "selector": { "app": "mysql" }, "ports": [ { "name": "service0", "targetPort": 3306, "port": 3306, "protocol": "TCP" } ], "type": "ClusterIP" }}
  • Wordpress 调用创建Deployment接口部署Wordpress。 Deployment名称为wordpress。 replicas值为2,表示创建2个pod。 设置Pod的标签为app:wordpress。 使用wordpress:latest镜像。 设置容器环境变量WORDPRESS_DB_PASSWORD为“********”,请替换为您设置的密码。此处的密码必须与MySQL的MYSQL_ROOT_PASSWORD一致。 { "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "wordpress" }, "spec": { "replicas": 2, "selector": { "matchLabels": { "app": "wordpress" } }, "template": { "metadata": { "labels": { "app": "wordpress" } }, "spec": { "containers": [ { "image": "wordpress:latest", "name": "container-0", "resources": { "limits": { "cpu": "500m", "memory": "1024Mi" }, "requests": { "cpu": "500m", "memory": "1024Mi" } }, "env": [ { "name": "WORDPRESS_DB_PASSWORD", "value": "********" } ] } ], "imagePullSecrets": [ { "name": "imagepull-secret" } ] } } }} 调用创建Service接口创建一个Service,定义1中创建的Pod的访问策略。 Service名称为wordpress。 选择标签为app:wordpress的Pod,即关联1中创建的Pod。 负载访问端口8080映射到容器的80端口,80端口为wordpress镜像的默认对外暴露的端口。 Service的访问类型为ClusterIP,即使用ClusterIP在内部访问Service。 { "apiVersion": "v1", "kind": "Service", "metadata": { "name": "wordpress", "labels": { "app": "wordpress" } }, "spec": { "selector": { "app": "wordpress" }, "ports": [ { "name": "service0", "targetPort": 80, "port": 8080, "protocol": "TCP" } ], "type": "ClusterIP" }} 调用创建Ingress接口创建一个Ingress,定义wordpress的外部访问策略,即关联ELB实例(ELB实例需要与Wordpress负载在同一个VPC内)。 metadata.annotations.kubernetes.io/elb.id:ELB实例的ID。 metadata.annotations.kubernetes.io/elb.ip:ELB实例的IP地址。 metadata.annotations.kubernetes.io/elb.port:ELB实例的端口。 spec.rules:访问服务的规则集合。path列表,每个path(比如:/)都关联一个backend(比如“wordpress:8080”)。backend是一个service:port的组合。Ingress的流量被转发到它所匹配的backend。 这里配置完后,访问ELB的IP:端口的流量就会流向wordpress:8080这个Service,由于Service是关联了wordpress的Pod,所以最终访问的就是1中部署的wordpress容器。 { "apiVersion": "extensions/v1beta1", "kind": "Ingress", "metadata": { "name": "wordpress", "labels": { "app": "wordpress", "isExternal": "true", "zone": "data" }, "annotations": { "kubernetes.io/elb.id": "2d48d034-6046-48db-8bb2-53c67e8148b5", "kubernetes.io/elb.ip": "10.10.10.10", "kubernetes.io/elb.port": "9012" } }, "spec": { "rules": [ { "http": { "paths": [ { "path": "/", "backend": { "serviceName": "wordpress", "servicePort": 8080 } } ] } } ] }}
  • 使用场景 用户在线下IDC有自建的harbor镜像仓库,同时也会将镜像同步到华为云SWR镜像仓库。创建负载后,希望调度到自建Kubernetes集群节点上运行的Pod使用自建镜像仓库的镜像,弹性到CCI的Pod使用SWR的镜像,以提高镜像拉取效率。可通过在Pod.Annotations中加入注解可以实现弹性到CCI的Pod中容器使用的镜像与自建Kubernetes集群使用的镜像为不同地址。 通过Annotation "coordinator.cci.io/image-replacement"配置镜像替换策略。其值为如下所示json字符串:
  • 配置场景二 原Pod中容器使用不同的镜像仓库,可配置多条替换策略。 示例: 第一个容器匹配到第一条策略,将"harbor.domain"替换为"swr.cn-north-4.myhuaweicloud.com/org1"。 第二个容器匹配到第二条策略,将镜像名前加上"swr.cn-north-4.myhuaweicloud.com/org1"和"/"。 第三个容器匹配到第三条策略,将前缀"harbor.domain/a/b/c/d"替换为"swr.cn-north-4.myhuaweicloud.com/org2"。 因为需要完整匹配最后一个"/"之前的部分,第一条策略即便有与该镜像相同的前缀"harbor.domain",也不会生效。 替换策略: "coordinator.cci.io/image-replacement": '[{"repositoryPrefix":"harbor.domain","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org1"},{"repositoryPrefix":"","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org1"},{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org2"}]' 替换前: containers: - name: container-0 image: 'harbor.domain/ubuntu:latest' - name: container-1 image: 'nginx:latest' - name: container-2 image: 'harbor.domain/a/b/c/d/redis:latest' 替换后: containers: - name: container-0 image: 'swr.cn-north-4.myhuaweicloud.com/org1/ubuntu:latest' - name: container-1 image: 'swr.cn-north-4.myhuaweicloud.com/org1/nginx:latest' - name: container-2 image: 'swr.cn-north-4.myhuaweicloud.com/org2/redis:latest'
  • 使用Nvidia-smi工具 为了支持查看GPU使用情况的场景,需要在镜像中注入nvidia-smi工具,根据购买的专属节点GPU驱动版本选择不同的nvidia-smi二进制文件。 nvidia-smi获取方式。 该二进制文件可以在nvidia官网,根据CUDA Toolkit版本选择下载对应版本的nvidia驱动包。 图1 NVIDIA驱动程序下载 以CUDA 10.1为例,可以下载得到对应版本的驱动包NVIDIA-Linux-x86_64-418.126.run文件,执行如下命令解压缩: sh NVIDIA-Linux-x86_64-418.126.run -x 在解压缩后的目录下即可找到官方提供的nvidia-smi工具二进制文件。 注入nvidia-smi工具。 将步骤1中得到的nvidia-smi二进制文件放在Dockerfile所在目录下,然后在同目录下的Dockerfile中新增注入语句: # inject nvidia-smi toolCOPY nvidia-smi /usr/bin/RUN chmod +x /usr/bin/nvidia-smi COPY命令会从Dockerfile文件所在的当前目录下去寻找名为nvidia-smi的文件,然后拷贝到镜像的/usr/bin/目录下。 父主题: GPU负载
  • 配置场景一 原Pod中所有容器镜像均使用同一镜像仓库与组织,配置一条替换策略即可。 示例:将所有容器镜像"harbor.domain/a/b/c/d"前缀都替换为SWR的镜像前缀"swr.cn-north-4.myhuaweicloud.com/org"。 替换策略: "coordinator.cci.io/image-replacement": '[{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org"}]' 替换前: containers: - name: container-0 image: 'harbor.domain/a/b/c/d/ubuntu:latest' - name: container-1 image: 'harbor.domain/a/b/c/d/nginx:latest' 替换后: containers: - name: container-0 image: 'swr.cn-north-4.myhuaweicloud.com/org/ubuntu:latest' - name: container-1 image: 'swr.cn-north-4.myhuaweicloud.com/org/nginx:latest' 示例Deployment: apiVersion: apps/v1 kind: Deployment metadata: name: test-vk labels: virtual-kubelet.io/burst-to-cci: 'auto' spec: replicas: 20 selector: matchLabels: app: test-vk template: metadata: labels: app: test-vk annotations: coordinator.cci.io/image-replacement: '[{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org"}]' spec: containers: - name: container-0 image: harbor.domain/a/b/c/d/ubuntu:latest resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi command: - /bin/bash - '-c' - sleep 10000 - name: container-1 image: harbor.domain/a/b/c/d/nginx:latest resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi command: - /bin/bash - '-c' - sleep 10000
  • 内核参数配置 CCI服务底座使用安全容器构建了业内领先的Serverless容器平台,同物理机系统内核隔离且互不影响。对于资深业务部署场景,内核参数调优是比较通用的方式。在安全范围内,CCI服务允许客户根据Kubernetes社区推荐的方案,通过Pod的安全上下文(Security Context)对内核参数进行配置,极大提升用户业务部署的灵活性。如果您对securityContext概念不够熟悉,更多信息可阅读Security Context。 在 Linux 中,最通用的内核参数修改方式是通过sysctl接口进行配置。在Kubernetes中,也是通过Pod的sysctl安全上下文(Security Context)对内核参数进行配置,如果您对sysctl概念不够熟悉,可阅读在 Kubernetes 集群中使用 sysctl。安全上下文(Security Context)作用于同一个Pod内的所有容器。 CCI服务支持修改的内核参数范围如下: kernel.shm*,kernel.msg*, kernel.sem,fs.mqueue.*,net.*(net.netfilter.*和net.ipv4.vs.*除外) 以下示例中,使用Pod SecurityContext来对两个sysctl参数net.core.somaxconn和net.ipv4.tcp_tw_reuse进行设置。 apiVersion:v1kind:Podmetadata: name: xxxxx namespace: auto-test-namespacespec: securityContext: sysctls: - name: net.core.somaxconn value: "65536" - name: net.ipv4.tcp_tw_reuse value: "1" ...... 进入容器确认配置生效: 父主题: 负载管理
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全