云服务器内容精选

  • 解决措施 请参考如下步骤手动卸载插件。 登录云服务器。 在/tmp目录下新建plugin.yaml文件,并将如下脚本内容拷贝至plugin.yaml文件中。 apiVersion: v1 kind: Namespace metadata: labels: admission.gatekeeper.sh/ignore: no-self-managing control-plane: controller-manager gatekeeper.sh/system: "yes" pod-security.kubernetes.io/audit: restricted pod-security.kubernetes.io/audit-version: latest pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/enforce-version: v1.24 pod-security.kubernetes.io/warn: restricted pod-security.kubernetes.io/warn-version: latest name: gatekeeper-system --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: assign.mutations.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: assignimage.mutations.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: assignmetadata.mutations.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: configs.config.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: constraintpodstatuses.status.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: constrainttemplatepodstatuses.status.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.3 labels: gatekeeper.sh/system: "yes" name: constrainttemplates.templates.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: expansiontemplate.expansion.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: expansiontemplatepodstatuses.status.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: modifyset.mutations.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 labels: gatekeeper.sh/system: "yes" name: mutatorpodstatuses.status.gatekeeper.sh --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.3 labels: gatekeeper.sh/system: "yes" name: providers.externaldata.gatekeeper.sh --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: creationTimestamp: null labels: gatekeeper.sh/system: "yes" name: gatekeeper-manager-role namespace: gatekeeper-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: null labels: gatekeeper.sh/system: "yes" name: gatekeeper-manager-role --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: labels: gatekeeper.sh/system: "yes" name: gatekeeper-manager-rolebinding namespace: gatekeeper-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: gatekeeper-manager-role subjects: - kind: ServiceAccount name: gatekeeper-admin namespace: gatekeeper-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: gatekeeper.sh/system: "yes" name: gatekeeper-manager-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: gatekeeper-manager-role subjects: - kind: ServiceAccount name: gatekeeper-admin namespace: gatekeeper-system --- apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration metadata: labels: gatekeeper.sh/system: "yes" name: gatekeeper-mutating-webhook-configuration --- apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration metadata: labels: gatekeeper.sh/system: "yes" name: gatekeeper-validating-webhook-configuration 在/tmp目录下新建uninstall.sh文件,并将如下脚本内容拷贝至uninstall.sh文件中。 #!/bin/bash kubectl delete -f /tmp/plugin.yaml kubectl delete ns cgs-provider 执行如下命令卸载容器集群防护插件。 bash /tmp/uninstall.sh 回显如下图类似信息,表示插件卸载完成。
  • 解决方法 跨域问题,是因为集成方的网站做了安全限制,不允许请求非本域提供的资源造成的。可通过使用负载均衡应用(如Nginx)的反向代理来解决。 图1 地址在负载均衡应用上的映射原理 即第三方页面使用JS调用时,调用本地域名下的一个服务,该服务放通到云客服的域名地址手上。 由于云客服只有识别到service-cloud,才会识别该请求,因此第三方页面的请求地址必须包含service-cloud。 以Nginx为例,整体配置要点如下: 在nginx.conf文件中添加首层服务地址,如下所示。 location /demo/ { proxy_set_header Host $host; set $Real $proxy_add_x_forwarded_for; if ($Real ~ (\d+)\.(\d+)\.(\d+)\.(\d+)\,(.*)){ set $Real $1.$2.$3.$4; } proxy_set_header X-Real-IP $Real; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://servicestage.besclouds.com/; } demo为样例,集成方可根据需要自行定义。 servicestage.besclouds.com请以云客服提供的地址为准。 location /service-cloud/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_request_buffering off; proxy_pass https://servicestage.besclouds.com/service-cloud; } 在开发集成页面中采用如下地址进行JS请求,其中location.protocol请使用集成方的域名+上一步配置的服务名(例如demo)。 const $ContextPath = location.protocol + "/service-cloud" let serviceUrl = $ContextPath+ "/webclient/chat_client/js/thirdPartyClient.js?"+"&t=" + timestamp; let thirdUserData = {}; ......
  • 解决方法 跨域问题,是因为集成方的网站做了安全限制,不允许请求非本域提供的资源造成的。可通过使用负载均衡应用(如Nginx)的反向代理来解决。 图1 地址在负载均衡应用上的映射原理 即第三方页面使用JS调用时,调用本地域名下的一个服务,该服务放通到云客服的域名地址手上。 由于云客服只有识别到service-cloud,才会识别该请求,因此第三方页面的请求地址必须包含service-cloud。 以Nginx为例,整体配置要点如下: 在nginx.conf文件中添加首层服务地址,如下所示。 location /demo/ { proxy_set_header Host $host; set $Real $proxy_add_x_forwarded_for; if ($Real ~ (\d+)\.(\d+)\.(\d+)\.(\d+)\,(.*)){ set $Real $1.$2.$3.$4; } proxy_set_header X-Real-IP $Real; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://servicestage.besclouds.com/; } demo为样例,集成方可根据需要自行定义。 servicestage.besclouds.com请以云客服提供的地址为准。 location /service-cloud/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_request_buffering off; proxy_pass https://servicestage.besclouds.com/service-cloud; } 在开发集成页面中采用如下地址进行JS请求,其中location.protocol请使用集成方的域名+上一步配置的服务名(例如demo)。 const $ContextPath = location.protocol + "/service-cloud" let serviceUrl = $ContextPath+ "/webclient/chat_client/js/thirdPartyClient.js?"+"&t=" + timestamp; let thirdUserData = {}; ......
  • 问题分析 在开启并行回放或串行回放的情况下(查询GUC参数recovery_parse_workers和recovery_max_workers均是1为串行回放;recovery_parse_workers是1,recovery_max_workers大于1为并行回放),备机的查询线程在做索引扫描时,会先对索引页面加读锁,每当扫到一个元组时会去判可见性,如果该元组对应的事务处于committing状态,需要等待该事务提交后再判断。而备机上的事务提交是依赖日志回放线程推进的,这个过程中会对索引页面进行修改,因此需要加锁。查询线程在等待过程中会释放索引页面的锁,否则会出现查询线程等待回放线程进行事务提交,而回放线程在等待查询线程释放锁。 该报错仅出现在查询与回放都需要访问同一个索引页面的场景下,查询线程在释放锁并等待事务结束过程中,访问的页面出现被修改的情况。 备机查询在扫到committing状态的元组时,需要等待事务提交是因为事务提交的顺序与产生日志的顺序可能是乱序的,例如主机上tx_1的事务比tx_2先提交,而备机上tx_1的commit日志在tx_2的commit日志之后回放,按照事务提交顺序来看tx_1对tx_2应当是可见的,所以需要等待事务提交。 备机查询在扫描索引页面时,发现页面元组数量(包含死元组)发生变化后不可重试,是因为在扫描时可能为正向或反向扫描,而举例来说页面发生分裂后一部分元组移动到右页面,在反向扫描的情况下即使重试只能向左扫描读取,无法再保证结果的正确性,并且由于无法分辨发生分裂或者插入,所以不可重试。 图1 问题分析
  • 问题分析 在开启并行回放或串行回放的情况下(查询GUC参数recovery_parse_workers和recovery_max_workers均是1为串行回放;recovery_parse_workers是1,recovery_max_workers大于1为并行回放),备机的查询线程在做索引扫描时,会先对索引页面加读锁,每当扫到一个元组时会去判可见性,如果该元组对应的事务处于committing状态,需要等待该事务提交后再判断。而备机上的事务提交是依赖日志回放线程推进的,这个过程中会对索引页面进行修改,因此需要加锁。查询线程在等待过程中会释放索引页面的锁,否则会出现查询线程等待回放线程进行事务提交,而回放线程在等待查询线程释放锁。 该报错仅出现在查询与回放都需要访问同一个索引页面的场景下,查询线程在释放锁并等待事务结束过程中,访问的页面出现被修改的情况。 备机查询在扫到committing状态的元组时,需要等待事务提交是因为事务提交的顺序与产生日志的顺序可能是乱序的,例如主机上tx_1的事务比tx_2先提交,而备机上tx_1的commit日志在tx_2的commit日志之后回放,按照事务提交顺序来看tx_1对tx_2应当是可见的,所以需要等待事务提交。 备机查询在扫描索引页面时,发现页面元组数量(包含死元组)发生变化后不可重试,是因为在扫描时可能为正向或反向扫描,而举例来说页面发生分裂后一部分元组移动到右页面,在反向扫描的情况下即使重试只能向左扫描读取,无法再保证结果的正确性,并且由于无法分辨发生分裂或者插入,所以不可重试。 图1 问题分析
  • 国际站面向哪些区域客户开放? 当前国际站已开放的区域包括阿尔及利亚、阿根廷、埃及、埃塞俄比亚、阿拉伯联合酋长国、阿曼、安哥拉、阿塞拜疆、巴布亚新几内亚、巴基斯坦、巴拉圭、巴林、巴拿马、巴西、贝宁、博茨瓦纳、玻利维亚、布基纳法索、赤道几内亚、多哥、多米尼加共和国、厄瓜多尔、菲律宾、佛得角、刚果(布)、刚果(金)、格鲁吉亚、哥伦比亚、哥斯达黎加、韩国、哈萨克斯坦、洪都拉斯、加纳、柬埔寨、加蓬、津巴布韦、几内亚、喀麦隆、卡塔尔、肯尼亚、科特迪瓦、科威特、老挝、黎巴嫩、利比亚、马尔代夫、马来西亚、马拉维、马里、毛里求斯、蒙古、孟加拉、缅甸、秘鲁、摩洛哥、莫桑比克、墨西哥、纳米比亚、南非、尼泊尔、尼日利亚、日本、萨尔瓦多、塞内加尔、沙特阿拉伯、斯里兰卡、索马里、泰国、塔吉克斯坦、汤加、坦桑尼亚、特立尼达和多巴哥、突尼斯、危地马拉、文莱、乌干达、乌拉圭、乌兹别克斯坦、新加坡、牙买加、亚美尼亚、伊拉克、印度尼西亚、约旦、越南、赞比亚、乍得、智利、中国澳门、中国香港,按照规划陆续面向其他区域客户开放。 父主题: 服务范围
  • 网页防篡改的区别 HSS与WAF网页防篡改的区别,如表1所示。 表1 HSS和WAF网页防篡改的区别 类别 HSS WAF 静态网页 锁定驱动文件、Web文件 锁定驱动级文件目录、Web文件目录下的文件,禁止攻击者修改。 特权进程管理 配置特权进程白名单后,网页防篡改功能将主动放行可信任的进程,确保正常业务进程的运行。 缓存服务端静态网页 不支持特权进程管理 动态网页 提供tomcat应用运行时自我保护,能够检测针对数据库等动态数据的篡改行为。 不支持 备份恢复 主动备份恢复 如果检测到防护目录下的文件被篡改时,将立即使用本地主机备份文件自动恢复被非法篡改的文件。 远端备份恢复 如果本地主机上的文件目录和备份目录失效,可通过远端备份服务恢复被篡改的网页。 不支持 防护对象 网站防护要求高,手动恢复篡改能力差 网站防护要求低,仅需要对应用层进行防护
  • 方法 赋值:当某个流程变量的数据类型为列表或对象时,列表的值可以使用如下格式:["1","2","3"],对象的值可以使用如下格式:{"keyA":"valueA","keyB":"valueB"},其中列表和对象每个元素的数据类型可以为列表或对象。 使用: 当某个流程变量FLOW.arr1的数据类型为列表时,其缺省值为:["1","2","3"],若您需要获取第1个元素的值"1",可以采用如下表达式:FLOW.arr1[0]。 当某个流程变量FLOW.arr2的数据类型为列表时,其缺省值为:[[1,2], [3,4]],若您需要获取第1个元素的值3,可以采用如下表达式:FLOW.arr2[1][0]。 当某个流程变量FLOW.obj1的数据类型为对象时,其缺省值为:{"keyA":"valueA","keyB":"valueB"},若您需要获取valueA,可以采用如下表达式:FLOW.obj1["keyA"]或FLOW.obj1.keyA。 当某个流程变量FLOW.obj2的数据类型为对象时,其缺省值为:{"keyA":"valueA","keyB":{"keyC":"valueC"}},若您需要获取valueC,可以采用如下表达式:FLOW.obj2["keyB"]["keyC"]或FLOW.obj2.keyB.keyC。 通过使用方法从列表和对象获取的元素可以正常与其他变量值进行运算和使用内置函数进行操作。
  • Incorrect IAM authentication information: verify aksk signature fail { "error_msg": "Incorrect IAM authentication information: verify aksk signature fail, ...... "error_code": "APIGW.0301", "request_id": "******" }
  • Incorrect IAM authentication information: AK access failed to reach the limit, forbidden { "error_msg": "Incorrect IAM authentication information: AK access failed to reach the limit,forbidden." ...... "error_code": "APIGW.0301", "request_id": "******" }
  • Incorrect IAM authentication information: decrypt token fail { "error_msg": "Incorrect IAM authentication information: decrypt token fail", "error_code": "APIGW.0301", "request_id": "******" } 可能原因 用户的API所属IAM认证,TOKEN解析失败。 解决办法 检查获取token的方法,token是否正确。 检查获取token的环境与调用的环境是否一致。
  • Incorrect IAM authentication information: Get secretKey failed { "error_msg": "Incorrect IAM authentication information: Get secretKey failed,ak:******,err:ak not exist", "error_code": "APIGW.0301", "request_id": "******" } 可能原因 用户的API所属IAM认证,使用AK/SK签名方式访问,但是AK不存在。 解决方法 检查AK填写是否正确。
  • 问题分析 放音收号图元不支持*号键,如果想实现收号或返回上一层菜单,需要结合菜单配置图元和放音收号图元共同完成。菜单配置图元收录手机号码第一位数字1,剩余号码由放音收号图元完成收号。 图1为菜单配置图元和放音收号图元共同完成收录手机号码功能的流程样例,当用户按键1后,由放音收号完成剩余手机号的收录。此时,放音收号收录的首个按键相当于整个手机码的第二位(第一位已被菜单配置收录)。因此放音收号首个按键的超时视为位间超时,由收号超时时间控制,不再由收号等待时间和最大失败次数控制。因此,放音收号按键超时后,会完成收录已按键的号码,并进入下一图元。如果没有按键,也会进入下一图元,不会进入放音收号图元的高级配置中的收号超时配置。 图1 放音收号图元和菜单配置图元共同完成收号。
  • 如何解决进程偶现卡死的问题? 在调用.NET SDK方法时,如果遇到该问题,可以将方法调用加上using方式,示例如下。 // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); try { GetObjectMetadataRequest request = new GetObjectMetadataRequest(); // 指定存储桶名称 request.BucketName = "bucketname"; // 指定对象,此处以 example/objectname 为例 request.ObjectKey = "example/objectname"; // 获取对象元数据 using (GetObjectMetadataResponse response = client.GetObjectMetadata(request)) { Console.WriteLine("Get object metadata response: {0}", response.StatusCode); // 获取对象的ETag值 Console.WriteLine("Object etag {0}: ", response.ETag); // 获取对象的版本号 Console.WriteLine("Object versionId {0}: ", response.VersionId); // 获取对象数据的长度,单位是字节 Console.WriteLine("Object contentLength {0}: ", response.ContentLength); } } catch (ObsException ex) { Console.WriteLine("Message: {0}", ex.Message); } 父主题: 常见问题
  • 前提条件 已获得需要访问互联网的桌面所在区域、项目、使用的VPC和子网信息。 管理员已具有NAT服务和EIP服务的操作权限。 自主注册的华为账号默认拥有华为云所有服务的操作权限,如果您使用的是此类账号,无需再进行确认。 华为账号下新建的IAM账号,需要加入“admin”内置用户组,或者拥有NAT服务和EIP服务操作权限的用户组,才可使用NAT服务和EIP服务。可进入“统一身份认证服务”中查看是否属于“admin”内置用户组。如果非“admin”内置用户组,请参见NAT服务授权、EIP服务授权赋予IAM账号使用NAT服务和EIP服务的权限。