华为云用户手册

  • 响应参数 状态码为 201 时: 表5 响应Body参数 参数 参数类型 描述 openid_connect_config object OpenID Connect配置详情。 表6 openid_connect_config 参数 参数类型 描述 access_mode String 访问方式。 program_console: 支持编程访问和管理控制台访问方式。 program: 支持编程访问方式。 idp_url String OpenID Connect身份提供商标识。对应ID token 中 iss字段。 client_id String 在OpenID Connect身份提供商注册的客户端ID。 authorization_endpoint String OpenID Connect身份提供商授权地址。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 scope String 授权请求信息范围。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 枚举值: openid email profile 说明: 此字段必选值“openid”。 最少1个值,最多10个值,之间使用空格分割。 例如: "openid" 、"openid email"、 "openid profile"、 "openid email profile"。 response_type String 授权请求返回的类型。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 枚举值: id_token response_mode String 授权请求返回方式。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 枚举值: fragment form_post signing_key String OpenID Connect身份提供商ID Token签名的公钥。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 X-Auth-Token 是 String 访问令牌,承载用户的身份、权限等信息。 token所需权限请参见授权项。 表3 请求Body参数 参数 是否必选 参数类型 描述 openid_connect_config 是 object OpenID Connect配置详情。 表4 CreateOpenIDConnectConfig 参数 是否必选 参数类型 描述 access_mode 是 String 访问方式。 program_console: 支持编程访问和管理控制台访问方式。 program: 支持编程访问方式 idp_url 是 String OpenID Connect身份提供商标识, 对应ID token 中 iss字段。 最小长度:10。最大长度:255。 client_id 是 String 在OpenID Connect身份提供商注册的客户端ID。 最小长度:5。最大长度:255。 authorization_endpoint 否 String OpenID Connect身份提供商授权地址。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 最小长度:10。最大长度:255。 scope 否 String 授权请求信息范围。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 枚举值: openid email profile 说明: 此字段必选值“openid”。 最少1个值,最多10个值,之间使用空格分割。 例如: "openid" 、"openid email"、 "openid profile"、 "openid email profile"。 response_type 否 String 授权请求返回的类型。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 枚举值: id_token response_mode 否 String 授权请求返回方式。 编程访问和管理控制台访问方式必选,编程访问方式不可选。 枚举值: fragment form_post signing_key 是 String OpenID Connect身份提供商ID Token签名的公钥。 最小长度:10。最大长度:30000。 格式示例: { "keys":[ { "kid":"d05ef20c4512645vv1..." , "n":"cws_cnjiwsbvweolwn_-vnl...", "e":"AQAB", "kty":"RSA", "use":"sig", "alg":"RS256" } ]}
  • 响应参数 表3 响应Body参数 参数 参数类型 描述 links Object 资源链接信息。 protocols Array of objects 协议信息列表。 表4 links 参数 参数类型 描述 self String 资源链接地址。 previous String 前一邻接资源链接地址。 next String 后一邻接资源链接地址。 表5 protocols 参数 参数类型 描述 id String 协议ID。 mapping_id String 映射ID。 links Object 协议的资源链接信息。 表6 protocols.links 参数 参数类型 描述 identity_provider String 身份提供商的资源链接地址。 self String 资源链接地址。
  • 响应示例 状态码为 200 时: 请求成功。 { "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/protocols", "previous": null, "next": null }, "protocols": [ { "mapping_id": "ACME", "id": "saml", "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME/protocols/saml", "identity_provider": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME" } } ]}
  • 响应示例 状态码为 200 时: 请求成功。 { "mappings": [ { "rules": [ { "local": [ { "user": { "name": "LocalUser" } }, { "group": { "name": "LocalGroup" } } ], "remote": [ { "type": "UserName" }, { "type": "orgPersonType", "not_any_of": [ "Contractor", "Guest" ] } ] } ], "id": "ACME", "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/mappings/ACME" } } ], "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/mappings", "previous": null, "next": null }}
  • 响应示例 状态码为 200 时: 请求成功。 { "mapping": { "rules": [ { "local": [ { "user": { "name": "LocalUser" } }, { "group": { "name": "LocalGroup" } } ], "remote": [ { "type": "UserName" }, { "type": "orgPersonType", "not_any_of": [ "Contractor", "Guest" ] } ] } ], "id": "ACME", "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/mappings/ACME" } }}
  • 响应示例 状态码为 200 时: 请求成功。 { "protocol": { "mapping_id": "ACME", "id": "saml", "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME/protocols/saml", "identity_provider": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME" } }}
  • 响应参数 表3 响应Body参数 参数 参数类型 描述 protocol Object 协议信息。 表4 protocol 参数 参数类型 描述 id String 协议ID。 mapping_id String 映射ID。 links Object 协议的资源链接信息。 表5 protocol.links 参数 参数类型 描述 identity_provider String 身份提供商的资源链接地址。 self String 资源链接地址。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 访问令牌,承载用户的身份、权限等信息。 token所需权限请参见授权项。 表3 请求Body参数 参数 是否必选 参数类型 描述 protocol 是 Object 协议信息。 表4 protocol 参数 是否必选 参数类型 描述 mapping_id 否 String 映射ID。身份提供商类型为iam_user_sso时,不需要绑定映射ID,无需传入此字段;否则此字段必填。
  • 响应示例 状态码为 200 时: 请求成功。 { "protocol": { "mapping_id": "ACME", "id": "saml", "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME/protocols/saml", "identity_provider": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME" } }}
  • 响应示例 状态码为 201 时: 创建成功。 示例1:通过token获取临时访问密钥和securitytoken。 示例2:通过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数。 示例 1 响应Header参数:X-Subject-LoginToken:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB... 响应Body参数:{ "logintoken": { "domain_id": "05262121fb00d5c30fbec013bc1...", "expires_at": "2020-01-20T08:18:36.447000Z", "method": "token", "user_id": "0526213b8a80d38a1f31c013ed...", "user_name": " IAM User", "session_user_id": "093f75808b8089ba1f6dc000c7cac...", "session_id": "40b328b6683a41b9bf8e7185e..." }} 示例 2 响应Header参数:X-Subject-LoginToken:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB... 响应Body参数:{ "logintoken": { "domain_id": "05262121fb00d5c30fbec01...", "expires_at": "2020-01-23T03:27:26.728000Z", "method": "federation_proxy", "user_id": "07826f367b80d2474ff9c013a...", "user_name": "IAMDomainA/IAMAgency", "session_id": "0012c8e6adda4ce787e90585d...", "session_user_id": "093f75808b8089ba1f6dc000c7cac...", "session_name": "SessionUserName", "assumed_by": { "user": { "domain": { "name": "IAMDomainB", "id": "0659ef9c9c80d4560f14c009ac..." }, "name": "IAMUserB", "password_expires_at": "2020-02-16T02:44:57.000000Z", "id": "0659ef9d4d00d3b81f26c009fe..." } } }}
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 表2 请求Body参数 参数 是否必选 参数类型 描述 auth 是 Object 认证信息。 表3 auth 参数 是否必选 参数类型 描述 securitytoken 是 Object 认证参数。 表4 auth.securitytoken 参数 是否必选 参数类型 描述 access 是 String AK。 secret 是 String SK。 id 是 String 即临时安全凭证securitytoken。 支持使用自定义身份代理用户或普通用户获取的securitytoken换取logintoken,详情请参见:通过token获取临时访问密钥和securitytoken。 支持委托的方式,但获取securitytoken时,请求体中必须填写session_user.name参数,详情请参见:通过委托获取临时访问密钥和securitytoken。 duration_seconds 否 Integer 自定义身份代理登录票据logintoken的有效时间,时间单位为秒。默认10分钟,即600秒,取值范围10分钟~12小时。 说明: 如果传入的值不在取值范围(10分钟~12小时)内,则取默认值10分钟。 logintoken有效时间为临时安全凭证securitytoken剩余有效时间与duration_seconds传参的最小值。 为避免duration_seconds传参无效,建议设置临时安全凭证securitytoken具有较长的有效期(15分钟~24小时),且duration_seconds传参小于临时安全凭证securitytoken剩余有效时间。 当临时安全凭证securitytoken剩余有效时间小于10分钟时,logintoken的有效时间将取默认值10分钟。
  • 响应参数 表5 响应Header参数 参数 参数类型 描述 X-Subject-LoginToken string 签名后的logintoken。 表6 响应Body参数 参数 参数类型 描述 logintoken Object 自定义身份代理登录票据信息。 表7 logintoken 参数 参数类型 描述 domain_id String 帐号ID。 expires_at String logintoken的过期时间。 method String 认证方法。当认证用户为华为云用户时,该字段内容为“token”,当认证用户为自定义身份代理用户时,该字段内容为“federation_proxy”。 user_id String 用户ID。 user_name String 用户名。 session_id String 会话ID。 session_user_id String 自定义身份代理用户ID。 session_name String 自定义身份代理用户名。 说明: 通过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数时,会返回该字段。该字段的值即为session_user.name所填写的值。 assumed_by Object 被委托方用户信息。 说明: 通过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数时,会返回该字段。 表8 logintoken.assumed_by 参数 参数类型 描述 user Object 被委托方用户信息。 表9 logintoken.assumed_by.user 参数 参数类型 描述 domain Object 被委托方用户所属帐号信息。 name String 被委托方用户名。 password_expires_at String 被委托方用户的密码过期时间。 id String 被委托方用户ID。 表10 logintoken.assumed_by.user.domain 参数 参数类型 描述 name String 被委托方用户所属帐号名称。 id String 被委托方用户所属帐号ID。
  • 功能介绍 该接口用于获取自定义身份代理登录票据logintoken。logintoken是系统颁发给自定义身份代理用户的登录票据,承载用户的身份、session等信息。调用自定义身份代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。 该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见:地区和终端节点。 自定义身份代理登录票据logintoken默认有效期为10分钟,可设置范围为10分钟~12小时。
  • 请求示例 获取自定义身份代理登录票据。 POST https://iam.myhuaweicloud.com/v3.0/OS-AUTH/securitytoken/logintokens { "auth": { "securitytoken": { "access": "LUJHNN4WB569PGAP...", "secret": "7qtrm2cku0XubixiVkBOcvMfpnu7H2mLN...", "id": "gQpjbi1ub3J0a...", "duration_seconds":"600" } }}
  • 解决方案 原理上网格可以提供对容器和虚拟机同等的治理能力,不同于Kubernetes容器上网格的数据面Proxy可以自动注入,自动流量拦截,基于Kubernetes的服务和实例模型自动进行服务发现,在虚拟机场景下需要手动安装数据面Proxy(ASM-PROXY),在安装过程中初始化流量拦截。具体来说,ASM-PROXY是虚拟机部署工具包,用于连接虚拟机应用所在的数据平面与ASM提供的控制平面。ASM-PROXY部署在虚拟机节点中,负责与ASM通信获取xDS信息,拦截非容器应用流量并执行网格化操作,例如流量管理、请求安全认证、上报链路追踪数据等。 在服务发现上,虚拟机形态的服务通过WorkloadEntry来描述一个虚拟机上安装了Proxy的实例,该虚拟机实例可以和Pod一样通过标签选择器被ServiceEntry选中和管理。 例如,ServiceEntry和三个WorkloadEntry的YAML文件如下: apiVersion: networking.istio.io/v1alpha3kind: ServiceEntrymetadata: name: forecastspec: hosts: - forecast location: MESH_INTERNAL ports: - number: 8080 name: http protocol: HTTP targetPort: 8090 resolution: STATIC workloadSelector: labels: app: forecast apiVersion: networking.istio.io/v1alpha3kind: WorkloadEntrymetadata: name: forecastspec: address: 192.168.1.3 labels: app: forecast version: v1 apiVersion: networking.istio.io/v1alpha3kind: WorkloadEntrymetadata: name: forecastspec: address: 192.168.1.4 labels: app: forecast version: v1 apiVersion: networking.istio.io/v1alpha3kind: WorkloadEntrymetadata: name: forecastspec: address: 192.168.1.5 labels: app: forecast version: v2 那么ServiceEntry选择WorkloadEntry的机制可概括如下:
  • 容器服务加入网格 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“sidecar管理”页签,为命名空间“vmns”注入sidecar。 图1 注入sidecar 在左侧导航栏选择“服务管理”,选择命名空间“vmns”。 按下述指导修复异常状态的tomcat服务。 单击“处理”进入自动修复项页面,单击“一键修复”,自动处理异常状态的检查项,直到配置诊断为正常状态。 图2 服务状态
  • 应用现状 将应用迁移到云原生架构,不断容器化的过程中,一般会经历三个阶段,如下图所示。 阶段一:所有应用都部署在虚拟机上。 阶段二:应用既部署在虚拟机上也部署在容器中,正在从虚拟机向容器迁移,并且使用Kubernetes管理容器。 阶段三:所有应用都部署在容器中,使用Kubernetes管理容器,并且使用Istio管理应用间的通信。 因为种种原因,容器与虚拟机共存将是一个长期的过程,但容器化的趋势不变。 在阶段二中,大量的虚拟机应用并不能很快容器化,人们通常会将新业务和少量应用率先实现容器化,并部署到Kubernetes中。在应用尚未完全实现容器化,处于过渡阶段时会遇到诸多问题,比如虚拟机上的非容器化服务是否可以像容器化服务一样进行流量治理?虚拟机如何访问容器中的服务?是否可以将容器和虚拟机纳入一个统一的控制平面来管理? 本文介绍一种通过为虚拟机安装代理来实现虚拟机治理的方案,可以有效解决以上几个问题。
  • 添加readiness探针 添加readiness探针,可以保证您的新实例pod在真正准备就绪时,才开始接管业务流量。这就避免了在新的实例pod未启动时,接管业务流量造成的访问不通问题。 相关配置如下: kubectl get deploy nginx -n namespace_name -oyaml | grep readinessProbe -a10 配置项说明: readiness探针配置项:deployment.spec.template.spec.containers[i].readinessProbe 其中,包括探针检查初始时间,检查间隔,超时时间等配置。
  • 设置服务就绪时间 服务就绪时间,minReadySeconds:用于标识pod的ready时间至少保持多长时间,才会认为服务是运行中。 相关配置如下: kubectl get deploy nginx -n namespace_name -oyaml | grep minReadySeconds -a1 配置项说明: 服务就绪时间:deployment.spec.minReadySeconds,可根据您业务的实际情况确定。
  • 配置优雅关闭时间 terminationGracePeriodSeconds,优雅关闭时间。在滚动升级过程中,首先会移除旧的服务实例pod的endpoint,并将实例pod的状态置为Terminating,这时K8S会发送SIGTERM信号给pod实例,并等待优雅关闭时间后,将pod强制终止。您可以利用这段时间,处理未完成的请求: kubectl get deploy nginx -n namespace_name -oyaml | grep terminationGracePeriodSeconds -a1 配置项说明: 优雅关闭时间:deployment.spec.template.spec.terminationGracePeriodSeconds,默认值为30s,可根据业务诉求适当调整。
  • 配置preStop preStop会在实例pod中止前调用,可以用来实现业务pod的优雅关闭。此处需要根据业务诉求来进行相应的配置,以Nginx为例。 kubectl get deploy nginx -n namespace_name -oyaml | grep lifec -a10 在“lifecycle”下的“preStop”中,定义了一个命令nginx -s quit; sleep 10,这个命令首先会发送一个优雅关闭信号给Nginx进程,然后暂停10秒。这样,在Pod终止之前,Nginx会有足够的时间完成正在处理的请求并优雅地关闭。 需要注意的是,sleep 10中的10秒是一个示例值,您可以根据实际需要和应用程序的性能来调整这个值,关键是为Nginx提供足够的时间来优雅地关闭。 类似地,您可以选择运行自定义命令或自定义脚本,来优雅关闭您的服务进程。
  • 更新VirtualService 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“istio资源管理”页签。 选择“istio资源:virtualservices”,命名空间选择“vmns”,选择创建VirtualService中创建的VirtualService,单击操作列的“编辑”,在spec.http[0]下添加以下内容: fault: abort: httpStatus: 599 percentage: value: 100 其中,599为自定义的HTTP状态码,100为故障百分比。 单击“确定”完成修改。
  • 服务发现模型 Dubbo现有模型存在的问题(来自Dubbo社区2.7.4总结): 在微服务架构中,注册中心管理的对象是应用(服务),而非对外的服务接口,不过目前Dubbo的注册中心管理的对象是Dubbo服务接口,与Spring Cloud或Cloud Native注册方式背道而驰。 一个Dubbo应用(服务)允许注册N个Dubbo服务接口,当N越大时,注册中心的负载越重。 Dubbo现有服务模型:根据Dubbo接口查找服务实例。 Dubbo Cloud Native服务发现模型,将原来Interface一级的服务发现拆分成两级,基于App找实例地址。 父主题: 面向Dubbo协议的服务治理
  • 详细说明 对于Dubbo协议的不同版本会有不同: 2.7.4+版本:2.7.4以上的Cloud Native版本中重构过与Kubernetes一致的服务发现模型,直接可以从Interface关联到服务信息。 2.7.3及之前版本:Dubbo社区版本未提供Interface到Service的二级关系,需要SDK根据自己的实际使用方式来维护Interface到服务的映射关系。如可以使用在服务注册时通过扩展信息的方式提供服务名等信息。 客户实际使用中可以根据自己的SDK使用情况选择灵活的处理方式。对于老版本的SDK可以基于现有的服务注册和服务发现流程,做如下处理: 在注册信息中扩展Service的定义。在服务部署时会通过环境变量将服务的元数据信息注入到SDK中,包括appname、namespace,分别表示部署的服务名、部署的命名空间。 在服务启动时向注册中心注册Dubbo接口和Kubernetes服务名和命名空间的关系。 在客户端发起访问时,根据原有服务发现的流程根据Interface查询到服务的元数据,并用对应的服务信息组装RPC请求。建议在Dubbo请求中使用Attachment扩展字段存储appname、namespace信息。
  • 删除已添加的iptables规则 以root用户登录虚拟机。 执行以下命令删除添加的istio iptables规则。 iptables -t nat -D PREROUTING -p tcp -j ISTIO_INBOUND iptables -t nat -D OUTPUT -p tcp -j ISTIO_OUTPUT iptables -t nat -F ISTIO_OUTPUT iptables -t nat -X ISTIO_OUTPUT iptables -t nat -F ISTIO_INBOUND iptables -t nat -X ISTIO_INBOUND iptables -t nat -F ISTIO_REDIRECT iptables -t nat -X ISTIO_REDIRECT iptables -t nat -F ISTIO_IN_REDIRECT iptables -t nat -X ISTIO_IN_REDIRECT iptables-save 执行以下命令查看虚拟机当前的iptables规则。 iptables -t nat -L -v 回显如下,可以看到istio相关规则已经清除。 Chain PREROUTING (policy ACCEPT 2 packets, 104 bytes) pkts bytes target prot opt in out source destination 47 2498 DOCKER all -- any any anywhere anywhere ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT 2 packets, 104 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 5 packets, 350 bytes) pkts bytes target prot opt in out source destination 0 0 DOCKER all -- any any anywhere !localhost/8 ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT 5 packets, 350 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- any !docker0 172.17.0.0/16 anywhere Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 any anywhere anywhere
  • 卸载容器 在虚拟机上执行以下命令,获取asm-proxy容器ID。 docker ps | grep asm-proxy 回显第一列为asm-proxy容器的ID。 46afed024f46 asm-proxy:1.8.4 "/usr/bin/bash /usr/..." 2 days ago Up 2 days asm-proxy 执行以下命令,停止asm-proxy容器。 docker rm -f xxx 其中,xxx为1获取的asm-proxy容器ID。
  • 审计与日志 云审计 服务(Cloud Trace Service, CTS ),是华为 云安全 解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 用户开通云审计服务后,CTS可记录CC的操作事件用于审计。 CTS的详细介绍和开通配置方法,请参见CTS快速入门。 CC支持审计的操作事件请参见支持审计的关键操作。 查看审计日志请参见查看审计日志。 父主题: 安全
  • 多数据中心与多区域VPC互通 当用户本地的多个数据中心需要与云上多个区域的VPC进行私网通信时,您可以通过云专线实现本地数据中心接入云上VPC,再通过云连接加载需要互通的VPC和数据中心接入的VGW,实现本地数据中心与多区域的VPC的私网通信,实现多点全网通场景,全网通场景如图2所示。这里的VPC可以是同帐号的VPC,也可以是不同帐号经过授权的VPC,通过云连接服务,都可以为您实现私网互通。 图2 多数据中心与多区域VPC互通场景图
  • 计费项 带宽包。 一个云连接只能绑定一个相同规格(即相同互通大区)的带宽包。 例如,用户A创建了云连接实例cc1,购买并绑定了一个中国大陆到中国大陆的50Mbit/s的带宽包bandwidthPackage1。 需注意: 云连接cc1未与带宽包bandwidthPackage1解绑前,不能再与其他中国大陆到中国大陆的带宽包绑定,即带宽包不能叠加使用。 云连接cc1配置域间带宽超出带宽包大小(50Mbit/s)时,则需要根据实际使用情况修改带宽包大小。例如,用户A已为北京四到上海一配置域间带宽30Mbit/s,还需要为上海一到上海二配置域间带宽40Mbit/s时,则需修改带宽包bandwidthPackage1的大小不小于70Mbit/s。 同一个带宽包只能绑定到一个云连接实例中,不能将同一个带宽包同时绑定到多个云连接实例。如果用户需要更换带宽包绑定的云连接实例,需先解除已绑定的云连接实例。 云连接费用详情请参见产品价格详情。
共100000条