-
我想使用DevEco Studio进行调用华为云loT的API,但是在DevEco中无法导入Java Demo里面的资料,请大神帮帮
-
已经学完了小熊派官方的教程,但他没给我鱼竿,我也就没办法自己去探索了,网上大多数利益都是hi_xxx的api,但鸿蒙是wifiiot_xxxxx,我上鸿蒙官网也找不到,希望能有解答
-
随着云原生技术的普及,使用Kubernetes部署应用已经成为常态,越来越多的企业已经步入多集群时代。随着集群数量的增长,对集群的运维、管理带来了新的挑战:集群繁多的重复劳动:运维工程师需要应对繁琐的集群配置、不同云厂商集群间的管理差异以及碎片化的API访问入口等问题;业务过度分散的维护难题:应用在各集群的差异化配置繁琐;业务跨云访问以及集群间的应用同步难以管理。集群的边界限制:应用的可用性受限于集群;资源调度、弹性伸缩受限于集群。厂商绑定:业务部署的黏性问题,缺少自动化故障迁移;缺少中立的开源多云容器编排项目。 Karmada结合了华为云多云容器平台MCP以及Kubernetes Federation核心实践,并融入了众多新技术:包括Kubernetes原生API支持、多层级高可用部署、多集群自动故障迁移、多集群应用自动伸缩、多集群服务发现等,并且提供原生Kubernetes平滑演进路径,让基于Karmada的多云方案无缝融入云原生技术生态,为企业提供从单集群到多云架构的平滑演进方案。Karmada项目全景上图为Karmada在开源社区技术全景,区别于kubefed只做多集群应用分发的局限,Karmada将以模块化的方式提供应用多集群部署、高可用调度、故障迁移、多集群服务发现和流量治理、多云集群生命周期管理等能力集,并面向多种典型的用户场景预置策略集,让用户可以结合企业实际情况自由定制适合自身的多云平台。 2、Karmada关键1)Kubernetes 原生 API兼容既有应用配置及基础设施无需改造,由单集群架构平滑升级到多集群(多云)架构,无缝集成Kubernetes现有工具链生态2)开箱即用面向多场景的内置策略集,包括两地三中心、同城双活、异地容灾等支持应用的跨集群上的自动伸缩、故障迁移和负载均衡3)集中式管理提供地域无关的集中式集群管理支持公有云、私有云或边缘集群4)丰富的多集群调度策略多集群亲和性调度、应用跨集群拆分、资源重新平衡多维度多层次的高可用部署:区域/可用区/集群/供应商等5)开放中立由多家互联网、金融、制造业、电信、云服务厂商共同发起以 CNCF 的开放治理为目标 3、Karmada架构设计Karmada 控制平面由以下几个组件组成:API 服务器(Karmada API Server)控制管理器(Karmada Controller Manager )调度器 (Karmada Scheduler)Karmada通过独立的API 服务器(Karmada API Server)提供与其他组件进行通信的 REST 接口,包含Kubernetes原生API及Karmada扩展API,而Karmada 控制管理器根据用户创建的 API 对象执行操作, Karmada 调度器则实现应用在多集群中的调度。Karmada 控制器运行各种控制器,控制器监视Karmada 的对象,然后与底层集群的 API 服务器通信,对Kubernetes资源进行全生命周期管理。集群控制器:聚焦集群管理,将 Kubernetes 集群附加到 Karmada,通过创建集群对象管理集群的生命周期。策略控制器:实现PropagationPolicy对象的生命周期。根据 PropagationPolicy中的resourceSelector 匹配对应Kubernetes资源对象,并为创建ResourceBinding以进行应用多集群调度。绑定控制器:实现 ResourceBinding 对象的生命周期,根据调度器的角度结果,为每个调度到目标集群的对应资源创建Work 对象;执行控制器:负责work对象与成员集群中实际资源对象的状态同步。 4、未来展望Karmada计划在今年Q4完成整体技术栈的能力开发,发布1.0版本,并捐赠CNCF。 小红书技术部负责人张雷表示:“小红书一直努力为云原生产业发展贡献自己的力量,希望通过Karmada项目,把小红书构建多云业务的实践经验贡献给社区,让更多企业能享受云原生技术的红利。”CNCF总经理Priyanka Sharma也对Karmada项目的开源作出了回应:“华为一直是云原生社区与开发者生态的重要参与者,此次发布的Karmada对所有企业构建多云业务架构至关重要,希望未来CNCF与华为云继续密切合作,持续帮助广大云原生开发者。” 未来,我们也希望越来越多的开发者能加入Karmada社区,共建多云生态!关于 Karmada 的更多技术细节,请查看项目仓库 https://github.com/karmada-io/karmada扫码添加小助手,发送“karmada”加群社区专家入驻,技术问题随时答疑
-
对象 api上传是成功的 但是在查看的时候 提示错误 Requests specifying Server Side Encryption with KMS managed keys require Signature Version 4.怎么解决
-
【功能模块】roma基线包【操作步骤&问题现象】1、登录香港启德项目的roma平台,查看dataservice.api.asset应用,找不到相应的资产包,是不是没有安装相应的资产包,导致无法使用相关的资产功能,比如:资产的轨迹2、希望把漏的资产包都安装上,谢谢【截图信息】【日志信息】(可选,上传日志内容或者附件)顾庆耀/18068848554/guqingyao@chinasoftinc.com
-
/io/GTM036__io.device.basepoint.AccessControlNew_BP/south/send-command/0.1.0
-
你好,广州中软几个学员都遇到同一个问题。任务2第5点启动 “消息订阅(新基点IoT)”,报500。 报文: { "result": [ { "jobName": "9159", "scheduleTime": "2021-08-18 14:39:35.000", "address": "https://192.168.139.37:2443/io/GTM034__io.basepoint.connectionmax.iot/login", "fireTime": "2021-08-18 14:39:35.000", "fireBy": "AUTO", "resultCode": "500", "version": "default", "resultMsg": "{\"code\":\"500\",\"message\":\"{\\\"code\\\":\\\"-1\\\",\\\"message\\\":\\\"java.lang.IllegalArgumentException: Parameter specified as non-null is null: method okhttp3.FormBody$Builder.add, parameter value\\\"} in <eval> at line number 77 at column number 2\"}", "receiveTime": "2021-08-18 14:39:35.000000", "fireInstance": "host-192-168-139-102", "groupName": "GTM034__io.basepoint.connectionmax.iot", "scheduleType": "CRON", "envName": "ENV_LiveData_TASK", "startTime": "2021-08-18 14:39:35.000000", "endTime": "2021-08-18 14:39:35.000000", "runTime": 0, "jobType": "HTTPJob_POST", "scheduleId": "10813", "trackingId": "20210818143935" } ]}选择“服务集成 > API网关 > AP测试”,单击“校验接入控制(新基点IoT)”接口前的“测试”。无需入参,单击“测试API”,返回如下消息,表示接口调用成功。这两步执行时,也报错,报文:Status: 500 , Used: 21 ms SERVER : WebServer X-CONTENT-TYPE-OPTIONS : nosniff CONNECTION : keep-alive PRAGMA : no-cache DATE : Wed, 18 Aug 2021 06:30:54 GMT X-FRAME-OPTIONS : SAMEORIGIN STRICT-TRANSPORT-SECURITY : max-age=31536000 ; includeSubDomains TRACE-ID : 593332be3ddd6aed66272fb37912b023344efccbd4308f7b36ddad7ee4af6c39 CACHE-CONTROL : no-cache, no-store, max-age=0, must-revalidate CONTENT-SECURITY-POLICY : default-src 'self' data:;script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline' EXPIRES : 0 CONTENT-LENGTH : 104 X-XSS-PROTECTION : 1; mode=block CONTENT-TYPE : application/json { "code":"500", "message":"TypeError: Cannot get property \"length\" of null in <eval> at line number 80" }已经卡在这环境两天了,后面的流程没法走,麻烦帮忙看下,谢谢!账号:APP Cube GTM034/Gzcss@123ROMA GTM034/Gzcss@1234
-
1、简介虚拟IP介绍虚拟IP是一个未分配给真实云服务器网卡的IP地址。云服务器除了拥有私有IP地址外,还可以拥有虚拟IP地址,用户可以通过其中任意一个IP(私有IP/虚拟IP)访问此云服务器。同时,虚拟IP地址拥有私有IP地址同样的网络接入能力,包括VPC内二三层通信、VPC之间对等连接访问,以及弹性IP、VPN、云专线(仅Region Type Ⅰ)等外网接入。虚拟IP主要用在云服务器的主备切换,达到高可用性HA(High Availability)的目的。当主服务器发生故障无法对外提供服务时,动态将虚拟IP切换到备服务器,继续对外提供服务。典型场景如果用户需要提高服务的高可用性,避免单点故障,可以用“一主一备”或“一主多备”的方法组合使用云服务器,一台主服务器处于某种业务的激活状态(即Active状态),另一台备服务器处于该业务的备用状态(即Standby状态),它们对外表现为一个虚拟IP。虚拟IP只在一台主设备上生效,当主服务器出现问题,备用服务器接管虚拟IP继续提供服务。更多介绍,参考:https://docs.hcs.huawei.com/mohelpcenter/operation/zh-cn/vpc/vpc_ug_000071.html2、API调用准备准备工作主要包括以下几点:1、获取接口文档:https://bbs.huaweicloud.com/forum/thread-144293-1-1.html,需要获取的接口文档为《华为云Stack XXX API接口参考》2、获取调用接口的账号,域名,账号,可参考:https://bbs.huaweicloud.com/forum/thread-41849-1-1.html3、调用步骤此处以创建虚IP,然后将虚IP绑定至与虚IP在同一子网下的虚拟机为例说明如何使用虚IP1、获取token需要获取具有项目管理权限的token,参考:https://bbs.huaweicloud.com/forum/thread-113533-1-1.html2、查询VPC列表接口:【GET】 /v1/{project_id}/vpcs(project_id由准备工作中获取,即项目ID,资源集ID)示例如下:URL:https://{VPC对外访问域名}/v1/b6a68399f3f74f929c4f9571d3e43241/vpcs请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==响应体示例:{ "vpcs": [ { "id": "a08a0269-44c9-451e-b317-28707c8f7a39", "name": "vpc-902b", "cidr": null, "status": "OK", "routes": [], "external_gateway_info": { "network_id": "95896649-0e61-4fa3-a8d0-fe2d5f0eb3dc", "enable_snat": false }, "service_availability_zones": [ "ARM_BMS", "az2.dc2", "az0.dc0" ], "ntp": [], "expiry": "0", "op_status": 0, "project_id": "b6a68399f3f74f929c4f9571d3e43241", "ntp_v6": [] }, { "id": "fee4dd88-e0c9-4c1c-9244-78ad33e62add", "name": "vpc-898e", "cidr": null, "status": "OK", "routes": [], "external_gateway_info": { "network_id": "95896649-0e61-4fa3-a8d0-fe2d5f0eb3dc", "enable_snat": false }, "service_availability_zones": [ "ARM_BMS", "az2.dc2", "az0.dc0" ], "ntp": [], "expiry": "0", "op_status": 0, "project_id": "b6a68399f3f74f929c4f9571d3e43241", "ntp_v6": [] } ] }3、查询VPC下子网列表接口:【GET】 /v1/{tenant_id}/subnets?vpc_id={vpc_id}(project_id由准备工作中获取,即项目ID,资源集ID;vpc_id由上一步查询结果获取)示例如下:URL:https://{VPC对外访问域名}/v1/b6a68399f3f74f929c4f9571d3e43241/subnets?vpc_id=a08a0269-44c9-451e-b317-28707c8f7a39请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==响应体示例:{ "subnets": [ { "id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "name": "subnet-902b", "description": "", "cidr": "192.168.10.0/24", "dnsList": [ "xxxx", "xxxx" ], "status": "ACTIVE", "external": false, "routed": true, "vpc_id": "a08a0269-44c9-451e-b317-28707c8f7a39", "project_id": "b6a68399f3f74f929c4f9571d3e43241", "gateway_ip": "192.168.10.1", "dhcp_enable": true, "primary_dns": "xxxx", "secondary_dns": "xxxx", "host_routes": [], "allocation_pools": [ { "start": "192.168.10.2", "end": "192.168.10.254" } ], "segmentation_id": 299754, "neutron_subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_version": 4, "neutron_network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "ipv6_enable": false } ] }需要获取子网所在的网络的Id,即neutron_network_id的值,network与subnet为1:1的关系4、创建虚IP接口:【POST】 /v2.0/ports示例如下:URL:https://{VPC对外访问域名}/v2.0/ports请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==请求体示例:{ "port": { "name": "APICreateVIP01", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "device_owner": "neutron:VIP_PORT" } }name:自定义network_id:由上一步获取device_owner:固定值neutron:VIP_PORT响应体示例:{ "port": { "id": "42e5e5d1-bb26-41b9-8a84-84e9d50f7575", "name": "APICreateVIP01", "status": "DOWN", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.208" } ], "mac_address": "fa:16:3e:ec:29:ce", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "", "device_owner": "neutron:VIP_PORT", "security_groups": [], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": {}, "binding:host_id": "", "binding:profile": {}, "created_at": "2021-08-17T08:43:01", "updated_at": "2021-08-17T08:43:01", "project_id": "b6a68399f3f74f929c4f9571d3e43241" } }5、查询虚IP同子网的虚拟机列表接口:【GET】 /v2.0/ports?network_id={network_id})(network_id的值与上一步创建虚IP时使用的network_id一致)示例如下:URL:https://{VPC对外访问域名}/v2.0/ports?network_id=eb318d5b-4ed0-47db-89f5-d640098396a2请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==响应示例:{ "ports": [ { "id": "044eaaa2-be11-4c3c-9407-5dcf95f18d8a", "name": "", "status": "ACTIVE", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.55" } ], "mac_address": "fa:16:3e:c2:89:ab", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "a08a0269-44c9-451e-b317-28707c8f7a39", "device_owner": "network:router_centralized_snat", "security_groups": [], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": {}, "binding:host_id": "group1", "binding:profile": {}, "created_at": "2021-06-02T07:16:34", "updated_at": "2021-06-02T07:16:35", "project_id": "b6a68399f3f74f929c4f9571d3e43241" }, { "id": "1f76b233-ba51-4166-a9f6-705ec3a93e6c", "name": "", "status": "ACTIVE", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.240" } ], "mac_address": "fa:16:3e:21:2a:64", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "0d69078e-3070-4342-976c-92aac9d4ba41", "device_owner": "compute:az2.dc2", "security_groups": [ "209d3375-b519-4250-b499-4f1197309f6c" ], "extra_dhcp_opts": [], "allowed_address_pairs": [ { "mac_address": "fa:16:3e:21:2a:64", "ip_address": "192.168.10.107" } ], "binding:vnic_type": "normal", "binding:vif_details": { "port_filter": true, "ovs_hybrid_plug": true, "primary_interface": true }, "binding:host_id": "C8464E57-73D1-E611-AE80-F098385D0FCB", "binding:profile": { "primary_interface": true }, "created_at": "2021-08-16T09:02:38", "updated_at": "2021-08-17T02:27:14", "project_id": "b6a68399f3f74f929c4f9571d3e43241" }, { "id": "27d59e48-7a33-4e8b-b2d6-dae922f949b9", "name": "Stack_3b32-Port1-5t4lscrvgsy2", "status": "DOWN", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.29" } ], "mac_address": "fa:16:3e:80:e1:37", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "", "device_owner": "neutron:VIP_PORT", "security_groups": [ "209d3375-b519-4250-b499-4f1197309f6c" ], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": {}, "binding:host_id": "", "binding:profile": {}, "created_at": "2021-08-16T09:07:16", "updated_at": "2021-08-16T09:07:16", "project_id": "b6a68399f3f74f929c4f9571d3e43241" }, { "id": "43660051-07fa-445c-8950-24872795fe07", "name": "", "status": "ACTIVE", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.217" } ], "mac_address": "fa:16:3e:73:b7:95", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "532c9f51-c319-4810-8736-af9d4fd4a2ed", "device_owner": "compute:az2.dc2", "security_groups": [ "209d3375-b519-4250-b499-4f1197309f6c" ], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": { "port_filter": true, "ovs_hybrid_plug": true, "primary_interface": true }, "binding:host_id": "C8464E57-73D1-E611-AE80-F098385D0FCB", "binding:profile": { "primary_interface": true }, "created_at": "2021-08-16T08:41:39", "updated_at": "2021-08-16T08:42:33", "project_id": "b6a68399f3f74f929c4f9571d3e43241" }, { "id": "60798a4b-12e5-4d3e-af0f-a2f471dfec26", "name": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "status": "DOWN", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.1" } ], "mac_address": "fa:16:3e:88:31:29", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "a08a0269-44c9-451e-b317-28707c8f7a39", "device_owner": "network:router_interface_distributed", "security_groups": [ "209d3375-b519-4250-b499-4f1197309f6c" ], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": {}, "binding:host_id": "", "binding:profile": {}, "created_at": "2021-06-02T07:16:31", "updated_at": "2021-06-02T07:16:34", "project_id": "b6a68399f3f74f929c4f9571d3e43241" }, { "id": "67d89141-49d0-49a1-8c51-24bdeb0e5081", "name": "", "status": "DOWN", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.114" } ], "mac_address": "fa:16:3e:b4:81:5d", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "", "device_owner": "network:dhcp", "security_groups": [], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": {}, "binding:host_id": "", "binding:profile": {}, "created_at": "2021-06-02T07:16:31", "updated_at": "2021-06-02T07:16:31", "project_id": "b6a68399f3f74f929c4f9571d3e43241" }, { "id": "859ef0ce-a2d5-40ef-afc9-379c2005ea6a", "name": "", "status": "ACTIVE", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.21" } ], "mac_address": "fa:16:3e:51:51:71", "network_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "tenant_id": "b6a68399f3f74f929c4f9571d3e43241", "device_id": "170a150b-28ef-45dd-af58-8ad44f9992a8", "device_owner": "compute:az2.dc2", "security_groups": [ "209d3375-b519-4250-b499-4f1197309f6c" ], "extra_dhcp_opts": [], "allowed_address_pairs": [], "binding:vnic_type": "normal", "binding:vif_details": { "port_filter": true, "ovs_hybrid_plug": true, "primary_interface": true }, "binding:host_id": "C8464E57-73D1-E611-AE80-F098385D0FCB", "binding:profile": { "primary_interface": true }, "created_at": "2021-08-16T09:02:31", "updated_at": "2021-08-17T02:23:52", "project_id": "b6a68399f3f74f929c4f9571d3e43241" } ], "ports_links": [] }需要注意的是,这里查询出来的端口,包含了指定网络下的所有端口,我们进一步过滤处理,将虚拟机的所占用的端口过滤出来过滤条件为:端口的device_owner属性取值以compute开头都是虚拟机占用的端口如:"device_owner": "compute:az2.dc2",代表该端口被可用分区az2.dc2中的一台虚拟机占用另外,在端口属性中,有一个device_id的字段,该字段代表端口所属的设备的ID,若端口是属于虚拟机的,该字段就代表虚拟机ID,这样我们就能通过接口【GET】https://{ECS对外域名}/v2/{project_id}/servers/{server_id}查询到虚拟机详情,从而为后续给虚拟机绑定虚IP获取进一步的信息。6、为虚拟机绑定虚IP接口:【PUT】/v1/{project_id}/vport/{id}(project_id由准备工作中获取,即项目ID,资源集ID; id为虚IP的端口ID,从创建虚IP的响应体中获取)示例如下:URL:https://{VPC对外访问域名}/v1/b6a68399f3f74f929c4f9571d3e43241/vport/42e5e5d1-bb26-41b9-8a84-84e9d50f7575请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==请求体示例:{ "id": "859ef0ce-a2d5-40ef-afc9-379c2005ea6a" }id为虚拟机的端口ID,由上一步获取响应体:无为虚拟机绑定VIP后,我们还需要登录虚拟机,将虚IP添加至虚拟机的网卡配置上,虚IP才能生效,具体方法,参考:https://support.huaweicloud.com/intl/zh-cn/usermanual-vpc/zh-cn_topic_0067802474.html如果出现VIP无法访问的问题,请优先排查虚拟机网卡绑定的安全组是否配置正确,以及虚拟机本身是否开启了防火墙,若仍无法访问,请联系华为工程师解决。7、扩展接口1、查询虚IP列表接口:【GET】https://{VPC对外域名}/v2.0/ports?network_id={network_id}&device_owner=neutron:VIP_PORT,可查询指定网络下的虚IP列表。2、查询指定虚IP详情:【GET】https://{VPC对外域名}/v2.0/ports/{port_id},此处port_id为虚IP的ID,响应体的allowed_address_pairs为绑定的虚拟机ip。3、查询指定虚拟机绑定的虚IP:【GET】https://{VPC对外域名}/v2.0/ports?device_id={device_id},此处device_id为虚拟机id,返回port列表的allowed_address_pairs为虚拟机绑定的虚ip。4、解绑虚拟机与虚IP:【DELETE】https://{VPC对外域名}/v1/{project_id}/vport/{id},project_id即项目ID,资源集ID; id为虚IP的端口ID。5、删除虚IP:【DELETE】https://{VPC对外域名}/v2.0/ports/{port_id},此处port_id为虚IP的ID,删除虚IP前,需要将虚IP绑定的虚拟机全部解绑。8、扩展场景上述步骤中,我们首先在指定VPC内创建了虚IP,然后为虚IP绑定了同子网内的虚拟机;反过来,我们如果已知虚拟机列表,希望为虚拟机添加可用的虚IP,则可通过以下步骤实现:1、查询虚拟机列表:【GET】https://{ECS对外域名}/v2/{project_id}/servers/detail,我们可以获取到虚拟机的ID和其他描述信息,接口示例,略2、查询虚拟机网卡列表:【GET】https://{ECS对外域名}/v2.1/{tenant_id}/servers/{server_id}/os-interface,可以获取虚拟机的所有网卡,并获取网卡所在的网络/子网ID,接口响应示例如下: { "interfaceAttachments": [ { "net_id": "eb318d5b-4ed0-47db-89f5-d640098396a2", "port_id": "1f76b233-ba51-4166-a9f6-705ec3a93e6c", "mac_addr": "fa:16:3e:21:2a:64", "port_state": "ACTIVE", "fixed_ips": [ { "subnet_id": "21d89cd5-fb49-4ddf-8396-8e6eb4efe1ed", "ip_address": "192.168.10.240" } ] } ] }响应体中net_id即为网卡所在的网络的ID,port_id为虚拟机网卡Id3、查询/创建指定网络/子网内的虚IP,参考前述步骤即可4、为虚拟机绑定虚IP,同样可参考前述步骤
-
Kubernetes 安全框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。1. Authentication(鉴权)2. Authorization(授权)3. Admission Control(准入控制)与通信行业常用的radius3A认证类似,也有鉴权、授权,不同的radius的第三个A是accounting统计。前两个A好理解,后面的准入控制难理解。为什么授权了之后还要有准入控制呢?个人理解,准入控制和授权是不同粒度的控制,授权的粒度更大,准入控制的更精细,就好像门锁和抽屉的锁。Adminssion Control实际上是一个准入控制器插件列表,发送到API Server的请求都需要经过这个列表中的每个准入控制器插件的检查,检查不通过,则拒绝请求。客户端要访问k8s集群API Server,一般需要证书、token或者用户名密码;如果是Pod访问,则需要ServiceAccount。前面是 例如kubectl 对 apiserver 的一个请求过程;后面是 Pod 中的业务逻辑与 apiserver 之间的交互。apiserver 收到访问请求后,就会开启访问控制流程。如果Authentication 认证阶段判定为不合法用户,那 apiserver 会返回一个 401 的状态码,并终止该请求;(跟volte的信令流程类似)如果用户合法的话,进入到访问控制的第二阶段鉴权,判断用户是否有权限进行请求中的操作。这个阶段是粗分类,只判定有权无权。如果无权,apiserver 会返回 403 的状态码,并终止该请求;如果用户有权,访问控制会进入更细化的控制阶段:AdmissionControl。在该阶段中 apiserver 的 admission controller 会判断请求是否是一个安全合规的请求。
-
### “API”是什么在谈API的管理之前,我们首先要弄清楚我们要管理的到底是什么东西,“API”这个术语本身具有二义性,当我们在不同的上下文谈论它的时候,其实是在说不同的东西或者说“API”扮演的不同角色:- 它可以被当作“应用接口”,比如:“调用支付服务的支付API”- 它也可以指将代码部署到线上环境后得到的“可访问数据服务”,比如:“发布xxAPI”- 而我们有时也会称那些代码与部署元素本身为“API”,比如:“Market API的Pipeline挂掉了”,“获取所有用户API的测试红了”上面的说法都没有问题,而且都在API管理的范畴之内,实际上这三种场景指出了API的三个要素:- Interface——接口- Implementation——实现- Instance——实例### 什么是API管理1. API产品管理:谈到API的管理,我们的第一反应通常是“设计——构建——发布”这三个显而易见的环节,而实际上我们还需要考虑以下内容,我们可以称之为API的几大支柱:- 对其进行测试- 记录文档并发布文档到门户网站以供合作者学习使用- 保护API的安全,监控其状态- 在生命周期内对其进行维护(处理更改)——“空中加油机”- 。。。2. API团队管理:在企业级的API管理场景中,我们通常需要管理多个功能团队所维护的不同知识领域的API资源,好在对于单一产品的管理经验是可复制可传播的,因此管理API团队其实是在考虑如何做好跨团队知识沉淀与能力培养。3. API成熟度:在API整个生命周期的不同阶段,对于API不同支柱的关注度应该是不一样的,了解并清楚地定义API的成熟度能够使我们将有限的资源与精力投资在当前阶段更有价值的事情上。比如:对于早期的API而言,我们主要专注于设计与构建方面,而减少对于文档的工作;而在API上线之后的阶段,我们则应该花费更多的时间来监控API并保护它免遭滥用。4. API标准化管理:集中管理大量的API与管理与维护单一的API是两个完全不同的概念。这里所面临的最大的挑战是在对API进行中心化的管理、保证一定程度的一致性的同时,不降低API的性能瓶颈与稳定性。5. API的业务管理:除了单一API的生命周期管理以及企业范围内的API标准化管理的技术细节,还必须牢记所有这些工作都是为了支持业务目标。API不仅仅是JSON或者XML,它们也是将企业各个业务单元链接在一起并产生业务价值的一种方式。当API没有真正创造价值的时候,它们只能被成为“在制品”,积极发现已有的API能够为企业带来什么样的业务价值并驱动其落地为“已完成工作”同样是API管理的一项要务。### API平台化管理难在哪里#### 难点1: Scope——范围长期管理API时,中央软件体系结构团队应该重点关注什么?API管理平台最大的挑战之一是实现“适当级别”的中心化控制,更加困难的点在于随着管理平台的成熟,“适当级别”本身也在发生变化。随着构建与使用API团队数量的增加,各种各样的知识、观点、经验也在不断增加。想要在所有的团队中保持一致是不现实的,有时候并不是他们不想遵守已经发布的准则,而是有自己的不得已之处,比如:他们依赖另一套第三方产品。。。作为API管理平台,必须兼顾诸如此类的复杂场景,在我们给出的准则中尽可能覆盖所有团队的问题领域,要避免消除合理的多样性,比如:- 从“所有API必须使用以下URL模式...”,转变到“通过HTTP运行的API应该使用以下URL之一”;- 从“所有的Web Restful API服务应该采用Python Flask构建”,转变到“Web Restful API服务应该采用以下技术栈之一。。。”;#### 难点2: Scale——规模随着API管理规模的增大,最初运行良好的管理策略难以跟上节奏。API平台化管理相比较于维护单一的API产品需要考虑的问题域是完全不同的,平台中的API数量越多,调用量越大,他们之间进行交互的可能性就越大,其中某些交互会因为API的变更产生意外的结果(错误),并且这些错误很可能难以追溯并修复。这就为API平台管理带来了另一项挑战:如何对运行中的API制定并应用合适的标准来减少意外的变更。#### 难点3: Standards——标准随着API管理的规模化,管理和治理工作通常需要从有关API设计和实施的详细建议转变为API生态系统更通用的标准化,使团队能够自由地进行细节上的决策。### API平台化管理应该管什么#### 技术俗话书“万事开头难”,在任何软件项目的初期,我们都需要面临一个非常复杂的问题:选择技术栈。因为决策需要考虑的不确定因素实在太多了,比如:技术栈的更迭、项目组成员的技术背景、项目组成员的意愿等。而对这个处于项目早期的过程我们又不应该冒太多的资本风险来进行大量的讨论与研究。那么工程领域应对此类问题最常用的方法就是“约束”,组织内部通常会选择和支持一部分工具,并为其提供清晰、详细的技术指南。限制选择可以使得团队做事更快,并降低API变更的速度。但作为API管理“平台”,一个很重要的任务就是明确地感知平台规模的变化,随着新的业务单元与跨时区团队的集成,“多样性”就成为了生态系统中的一大动脉,“平台方”需要根据规模的变化在合适的时间点增加“技术指南”的多样性而非一味的限制。#### 团队技术并非API管理的唯一影响因素,在没有平台化之前,每个API的整个生命周期由一个全功能团队进行管理,但随着API程序的规模和范围的增加,构建和维护API所需要的技术数量会显著上升,不可能每个API开发团队都为自己的API单独部署一套监控、报警、流量限制、门户网站、文档网站等“基建类”服务。这时可能需要成立一个专门的团队来负责设计和构建供其他团队使用的数据中心监控接口,他们会使用特定的工具集来做特定的事情,比如:使用prometheus或者sumologic来做请求、日志等数据的收集。同时,可能还会有另一个团队专门整合生态系统中的数据资源来满足特定场景的业务,他们也许会采用类似GraphQL的查询工具来专门为手机应用构建数据接口。除了成立专门的“基建”团队来做特定的“基建”工作之外,转变组织的决策方式也可以是团队管理的另一个突破点。在企业数字化的初期,团队小且经验不太充足,将技术决策集中到一个单独的指导组能够起到立竿见影的效果,他们通常被冠以“架构组”或者“HOT Office”诸如此类的名字。但是随着数字生态系统的扩张且技术面越来越不均匀,技术决策工作集中在较小的范围是有问题的,单独的技术领导团队不可能保持跟进每一个工具、框架与日常工作的细节,更何况对全球化的团队来说还有时区的限制。因此,可以考虑的解决方案是将决策的过程分解为相互独立的“决策元素”:初始化决策——选项清单——作出选择——授权——执行决策——挑战决策,并将这些“决策元素”的决策权分配到组织中的不同层级。#### 治理正如领导领域,在API的治理中,如果有明确的范围与规模限制,提供详细的操作指导和过程文档绝对是最有效的,比如:如何设计URL、URL的命名规范、HTTP头中的版本号应该用什么字段等等。但随着API生态系统的扩张,维护应用于所有团队的单一指导文档是极其困难的,技术的多样性在企业的生态系统中是一种积极的力量,我们应该尝试驾驭它而非回避,这也是为什么治理文档需要从“直接过程指令”转变为通用原则,这种治理文档的演进模式同样适用于UI/UX的通用指南,比如: 尼尔森诺曼集团的[“十大交互设计原则”](https://www.nngroup.com/articles/ten-usability-heuristics/)。同时,对于跨国或者大型组织,治理需要从“发布原则”转换到“收集建议”,分布式的组织结构决定了中心化的治理模型并不适用,这一点是符合“康为定律”的。所以总的来说,随着规模的增长,API的治理模型需要从直接建议转为提出通用原则,再到收集和分享公司团队的实践经验。
-
随着云计算技术的蓬勃发展,越来越多企业把云化转型作为IT发展的长期战略。IDC预测,到2020年,75%使用公有云的企业将同时使用私有云平台。而到2024年,90%的全球1000强组织将建立多云管理的战略。选择混合云战略,企业能够整合公有云和私有云的优势,选择最优的云服务组合,构建最适合自身业务发展的IT基础资源,同时可以利用云服务厂商的各地资源,满足业务拓张需求及法律合规要求。可以看到,混合云和多云战略已经成为企业的必然选择。混合云管理三大挑战当混合云被越来越多企业所接受时,混合云管理也成为越来越多的企业关心的话题。企业在使用混合云时,主要面临着三大挑战:1、企业在申请公有云服务时,通过调用API接口对接每个服务,每个访问需要进行身份验证,造成服务使用复杂缓慢;支持服务种类低。企业需要一种方式能够直接简单使用全量公有云服务。2、当前,企业都是通过统一的账号和权限接入使用公有云,不能根据不同分支机构和部门的需求按策略分配,无法实现公有云资源按需精细管控;同时,公有云的资源使用也无法与私有云资源使用进行统一管理。3、私有云和公有云存在服务和界面上的差异,需要多个操作界面的重复登录,造成操作和体验上的诸多不便。当前的云服务架构并没有一个统一的标准,在使用过程中需要一个开放的云管理平台,既能兼顾历史投资、又要支持面向未来的演进,能够以统一的方式集中管理私有云、公有云以及异构虚拟化和不同供应商的云平台,实现资源调度与管理的自动化,并且为上层应用按需、自助、敏捷、弹性地提供云服务。ManageOne:混合云统一管理平台8月15日,在2019华为云城市峰会广州站上,华为云发布基于鲲鹏处理器的全栈混合云解决方案华为云Stack 6.5(以下简称HCS 6.5),除了提供种类丰富的云服务来支撑企业多类型业务云化需求之外,还针对多云及混合云场景下的管理难题,提供统一云管理平台ManageOne来应对这一挑战。ManageOne是HCS的核心部件之一,拥有诸多强大的云数据中心管理能力。包括灵活的服务自定义和服务目录,可以匹配组织模型实现精确的资源和服务供给;强大的自动化和服务编排,能够简化业务应用的发放和维护流程,极大提升运营运维效率;全面丰富的大屏和报表特性,能够支持各种KPI指标的图形化呈现,从而为经营决策团队提供有效的数据支撑等。云联邦:实现混合云统一管理黑科技特别指出的是,ManageOne还有一项强大黑科技——“云联邦”。“云联邦”是HCS推出的新一代混合云技术,基于统一架构,通过云联邦认证和用户映射将私有云和公有云结成联邦体系,多云VDC分权分域,统一运营和运维能力实现混合云统一管理。HCS“云联邦”混合云实现华为公有云全量180+服务接入、统一精细管控、多云统一运营、多云统一运维提供企业一致体验,无缝上云。传统混合云管理平台在调用公有云时,采用云平台API对接方式,每一种公有云服务,混合云管理平台都需要对接一次该云服务的OpenAPI,同时还需要开发一套服务Console。而每个服务具有众多API接口,例如OpenStack基础计算服务Nova的API接口就有上百个,对于高级服务的对接难度更有指数级的提升,而且公有云服务一旦发生变化,混合云管理平台必须要同步变更,导致传统混合云管理平台只能聚焦于公有云基础IaaS服务,无法实现线上PaaS、AI、大数据等高级服务的统一管理。而对于需要数字化转型的企业来说,业务创新更需要IT架构的支撑,采用传统混合云管理平台的企业,只能单独到公有云平台使用高级服务,造成业务架构割裂和分离,无法实现统一管理。ManageOne的云联邦技术就是为了解决这个问题而设计的,华为的HCS和华为的公有云有着统一架构的天然优势。基于统一身份认证模型,通过云联邦认证和用户映射将私有云和公有云结成联邦体系,使用元数据文件建立信任关系,线下用户直接映射到公有云虚拟用户,即可访问公有云全量服务。基于ManageOne的云联邦技术,企业能够轻松地使用线上PaaS、AI、大数据等高级服务,混合云推理训练,混合云开发测试、混合云灾备等高级解决方案。并且可帮助企业实时跟进最新技术平台,最新应用,助力企业实现新技术实践和数字化转型。基于云联邦技术实现混合云的分权分域管理,统一计量、统一监控,真正实现混合云统一管理。细粒度资源管控和成本控制ManageOne提供细粒度私有云和公有云资源管控能力,解决当前企业不能灵活实现资源权限设置,成本不可控,只能事后审计的困扰。在私有云侧,ManageOne提供VDC(Virtual Data Center, 虚拟数据中心)功能,企业的每个部门对应到一个VDC,在VDC中创建用户组和用户对应企业部门员工,通过给用户组设置私有云服务的访问权限,实现企业部门私有云资源管控。在公有云侧,为需要使用公有云服务的VDC在华为云上创建企业项目和用户组,把该用户组加入到企业项目中,并指定华为云服务的访问权限,即可实现部门公有云资源管控。此外,在为各业务部门创建VDC时,可以设置各业务部门购买华为云资源的费用上限,从而控制企业各部门用户能使用的华为云资源。简单高效帮助企业,进行分支机构和部门资源管控,成本管控。通过创新的两级云管理能力,还能够实现中心监控地方和资源互借等能力,从而达到中心云与地方云的管理和资源协同。ManageOne为浙江移动政企云客户提供省市多资源池统一监控,实现物理、虚拟化资源统一监控和故障处理,实现超大规模租户的统一管理;为陕西移动提供一云两池,业支、网管资源池物理隔离,统一管理,并根据部门划分VDC,实现多部门统一云服务管理,维护效率提升,人均维护设备数提升100%。HCS具备强大的云管理能力,也受到诸多客户及第三方机构的青睐。在全球权威的咨询与服务机构IDC最新发布的云系统和服务管理软件市场半年跟踪报告显示,HCS的云管理平台ManageOne在中国市场占有率位居第一。
-
总是报如下错误。使用 API Explorer AddDevice 创建设备时 ,无真实设备,node_id 如何获取?填写?
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签