自己建网站写小说,网站开发语言用到,网站策划500字,网站建设 办公系统API接口
简介
EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示#xff08;融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能#xff0c;通过浏览器访问时打开的是融合前端的界面#xff0c;通过IP:Port/urlPref…
API接口
简介
EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能通过浏览器访问时打开的是融合前端的界面通过IP:Port/urlPrefix的形式访问的是其作为北向接口网关的其它组件后端API 目前由WebsiteGateway来承担北向接口网关的职责具体是由通过WebsiteGateway运行起来的各业务平台前端来承担。 所以北向接口调用的Endpoint可以使用任意一个业务平台前端的Endpoint。如下 平台 架构 endpoint 说明 EdgeGallery融合前端 融合 https://{PORTAL_IP}:30095 推荐使用该endpoint AppStore平台前端 独立 https://{PORTAL_IP}:30091 – Developer平台前端 独立 https://{PORTAL_IP}:30092 新版本1.5.2已弃用访问会出现Bug Mecm平台前端 独立 https://{PORTAL_IP}:30093 – Atp平台前端 独立 https://{PORTAL_IP}:30094 –
通过北向接口调用各平台的业务接口时URL按照如下格式调用
https://x.x.x.x:30095/{urlPrefix}/{业务接口自身的URL路径}
其中urlPrefix是各平台在网关中定义的路由前缀定义如下表所示 平台 urlPrefix AppStore mec-appstore Developer mec-developer Mecm-Inventory mecm-inventory Mecm-APPO mecm-appo Mecm-APM mecm-apm ATP mec-atp
除了以上关于各业务平台以及MEO相关的URL以外还有MEPM相关的URL该URL通过Ingress访问访问URL为
https://10.8.59.12:31252/{urlPrefix}/{业务接口自身的URL}
其中urlPrefix是各平台在网关中定义的路由前缀定义如下表所示 平台 urlPrefix Backend Service mepm-fe / mepm-fe:8200 lcmcontroller /lcmcontroller mecm-mepm-lcmcontroller:8094 apprulemgr /apprulemgr mecm-mepm-apprulemgr:8096 rescontroller /rescontroller mecm-mepm-rescontroller:8098
EdgeGallery各个组件的Service/NodePort情况如下仅供参考新版本有一定变化 Component Pod Name Service Name Node Port Internal Port appstore-be appstore-be-0 appstore-be-svc ClusterIP 8099 appstore-fe appstore-fe appstore-fe-svc 30091 8443 appstore-be-postgres appstore-be-postgres-0 appstore-be-postgres-svc ClusterIP 5432 developer-be developer-be-0 N/A N/A N/A developer-fe developer-fe developer-fe-svc 30092 8443 developer-be-postgres developer-be-postgres-0 developer-be-postgres-svc ClusterIP 5432 file-system file-system file-system-svc 30090 9500 filesystem-postgres filesystem-postgres filesystem-postgres ClusterIP 5432 healthcheck healthcheck healthcheck-svc 32759 9527 healthcheck-m healthcheck-m healthcheck-m-svc 32757 9529 user-mgmt user-mgmt user-mgmt-svc 30067 8067 user-mgmt-postgres user-mgmt-postgres-0 user-mgmt-postgres-svc ClusterIP 5432 user-mgmt-redis user-mgmt-redis-0 user-mgmt-redis-svc ClusterIP 6379 service-center service-center service-center ClusterIP 30100 mecm-fe mecm-fe mecm-fe-svc 30093 8443 mecm-appo mecm-appo mecm-appo-svc 30201 8091 mecm-apm mecm-apm mecm-apm-svc 30202 8092 mecm-inventory mecm-inventory mecm-inventory-svc 30203 8093 mecm-north mecm-north mecm-north-svc 30303 8102 mecm-applcm-controller mecm-applcm-controller mecm-applcm-controller-svc 30204 8094 mecm-resource-controller mecm-resource-controller mecm-resource-controller-svc 31952 8098 mecm-applcm-k8splugin mecm-applcm-k8splugin mecm-applcm-k8splugin-svc 30205 8095 mepserver mepserver-deploy mepserver-service ClusterIP 8080 mepauth mepauth-deploy mepauth-service ClusterIP 8088 kong-apigw apigw-kongy kong-service 30443 8443 mep-postgre-db pg-deploy pg-service ClusterIP 5432
ServiceComb端口列表 Component Service Name REST Port Spring Server Port (default 8080) appstore-be mec-appstore 8099 8099 appstore-fe appstore-fe 8080 8443 developer-be mec-developer 9082 9082 developer-fe developer-fe 8080 8443 user-mgmt user-mgmt-be 8067 8067 user-mgmt-fe user-mgmt-fe 8080 8443
调用AppStore接口示例
使用前需要安装新版本的Postman较老版本可能无法上传文件导致调用人脸识别API接口返回500错误新版本下载链接如下http://10.8.56.160:8082/Postman-win64-Setup.exe文尾附带静态资源服务器的启动YAML文件
使用前关闭SSL证书认证 获取XSRF-TOKEN
GET https://10.8.59.12:30095/ 在发送请求后依次在Postman界面中点击Cookies、XSRF-TOKEN就可以看到XSRF-TOKEN了 获取AccessToken
POST https://10.8.59.12:30095/mec-usermgmt/v1/accesstoken
需要传递的字段 Name Definition Type Required X-XSRF-TOKEN XSRF-TOKEN Header 是 userFlag 登录凭证用户名/邮箱/手机号 Body 是 password 密码 Body 是
需要注意Body部分只支持JSON格式不支持form-data 调用业务接口查看AppStore里面的app列表
#示例
GET https://10.8.59.12:30095/mec-appstore/mec/appstore/v1/apps
通过H X-XSRF-TOKEN: xxxx -H X-ACCESS-TOKEN: xxxx两个token访问业务 开发者指导 — EdgeGallery Documentation 0.0.1 文档
MECM API
APM应用包管理器开放API接口
Projects/MECM/MECM_APIs/apm-swagger-openapi.yaml · EdgeGallery/docs - Gitee.com
APPO应用编排器开放API接口
Projects/MECM/MECM_APIs/appo-swagger-openapi.yaml · EdgeGallery/docs - 码云 - 开源中国 (gitee.com)
Inventory应用视图开放API接口
Projects/MECM/MECM_APIs/inventory-swagger-openapi.yaml · EdgeGallery/docs - 码云 - 开源中国 (gitee.com)
MEP开放API接口Mp1和Mm5
EdgeGallery从1.3.0版本开始MEP已经完全实现ETSI接口规范具体实现接口及规范如下
MEP server 接口分为两类一类为遵循 ETSI MEC 011 v2.1.1 标准的 Mp1 接口主要为 App 提供服务注册发现App 状态通知订阅Dns 规则获取等功能另 一类为 Mm5 接口主要为 MECM/MEPM 提供配置管理功能。MEP auth目前主要作为鉴权模块为App提供token申请发放功能。
使用 Mp1 接口 mec 应用程序可以查询和激活/停用与其关联的 dns 规则。 该接口的实现按照 ETSI GS MEC 011 V2.1.1 文档
使用 Mp1 接口mec 应用程序可以查询和修改与其关联的流量规则。 该接口的实现符合 ETSI GS MEC 011 V2.1.1 文档
使用 Mm5 接口MECM 可以创建、查询、更新或删除应用程序配置其中包括与应用程序关联的多个 dns 和流量规则。 此接口的实现在 ETSI GS MEC 010-1 V1.1.1 和 ETSI GS MEC 010-2 V2.1.1 文档中指定 Projects/MEP/MEP_Interfaces.md · EdgeGallery/docs - 码云 - 开源中国 (gitee.com)
补充这份文档Mp1接口调用以及MEP单独部署本地开发验证说明书
MEP Auth无法调用现在只能通过mep-agent进行MEP的授权
#Service Authentication Interface
POST /mep/token
#AK/SK configuration interface
PUT /mep/appMng/v1/applications/{appInstanceId}/confs
Provider APP服务注册
生产者APP通过mep-agent自动将发布的能力注册到MEP平台上用户无需手动注册只需要在应用孵化流程的能力中心上补充如下信息即可 其中服务名称和内部端口号必须填上传YAML文件中Service的名称和Cluster端口号Service名称不区分大小写
除了在界面上填写相关信息实现MEP平台服务的自动注册也可以由应用调用相关API接口进行手动注册
#为指定APP注册服务一般使用mep-agent自动注册简化服务注册流程
POST /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services
#为APP手动注册服务实例无意义的调用因为没有指定Endpoint等信息
curl -XPOST https://mep-api-gw.mep:8443/mep/mec_service_mgmt/v1/applications/644c0b3d-3e31-492d-9c7a-2392589b0cff/services -k -H Authorization: Bearer $TOKEN -d {serName:FaceService,version:1.0,state:ACTIVE,serializer:JSON}#更新APP指定服务信息
PUT /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services/{serviceId}#删除APP指定服务
DELETE /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services/{serviceId}#应用发送确认消息确保实例化和启动阶段成功完成
POST /mep/mec_app_support/v1/applications/{appInstanceId}/confirm_ready
Consumer APP服务发现和能力调用服务管理相关接口
部署Consumer APP进入Consumer APP的容器进程网络栈
docker top docker ps | grep mep-agent | awk {print $10}
PIDxxx #该值为上一步命令返回结果中的PID值
nsenter -t $PID -n
通过mep-agent获取AccessToken
TOKENcurl -XGET -H Content-Type: application/json http://localhost:8080/mep-agent/v1/token | python3 -c import sys,json;datajson.load(sys.stdin);print(data[access_token])
获取当前MEP平台的Service列表
经测试该URL仅仅能在Pod内部通过ServiceName或者Service的ClusterIP访问在主机或者集群外访问会提示Unauthorized
#自动获取MEP平台API网关Service的Cluster IP
KONG_GWkubectl get svc -n mep | grep mep-api-gw | awk {print $3}
#查看MEP平台的能力
curl -XGET https://$KONG_GW:8443/mep/mec_service_mgmt/v1/services -H Authorization: Bearer $TOKEN -k
以上方式查询MEP平台的所有Service是不推荐的推荐使用mep-agent的API接口进行服务发现
curl -XGET http://localhost:8080/mep-agent/v1/endpoint/face-recognition | python3 -c import sys,json;datajson.load(sys.stdin);print(data[uris][0])
该接口调用后会返回JSON格式的Response从Response中取出data[uris][0]的内容即为服务对应的Endpoint
调用MEP平台提供的能力
通过上一步获取到的服务Endpoint中的URI 应用服务本身的URI路径即可访问该应用提供的API接口
curl -XGET https://$KONG_GW:8443/face-recognition1eae39e5618a11eda9d7/v1/face-recognition/ -H Authorization: Bearer $TOKEN -k
其它服务管理相关接口
#查询指定应用提供的服务
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services
#查询APP指定服务
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services/{serviceId}GET /mep/mec_service_mgmt/v1/services
事件订阅相关接口未实验
#查询指定APP的可用事件订阅信息
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions#为指定APP注册可用事件订阅
POST /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions#删除指定可用事件订阅信息
DELETE /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}#查询指定ID的可用事件订阅信息
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}#查询指定APP的终止事件订阅信息
GET /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions
#为指定APP注册终止事件订阅
POST /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions
#删除指定终止事件订阅信息
DELETE /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}
#查询指定ID的终止事件订阅信息
GET /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}
DNS规则API接口 GET /mep/mec_app_support/v1/applications/{appInstanceId}/dns_rules
#Query a specific dns rule
GET /mep/mec_app_support/v1/applications/{appInstanceId}/dns_rules/{dnsRuleId}
#Update a specific dns rule
PUT /mep/mec_app_support/v1/applications/{appInstanceId}/dns_rules/{dnsRuleId}
流规则未实验
GET /mep/mec_app_support/v1/applications/{appInstanceId}/traffic_rules
GET /mep/mec_app_support/v1/applications/{appInstanceId}/traffic_rules/{trafficRuleId}
PUT /mep/mec_app_support/v1/applications/{appInstanceId}/traffic_rules/{trafficRuleId}
消费者应用集成Mp1接口代码实现网络开放能力调用
clientsdk.py实现通过服务名查找对应的mep endpoint url
import requests
import restclientclientObjects {}def get_service_endpoint(service):This is a get service endpoint method for getting endpoint information by using service nameurl restclient.MEP_AGENT_URL /mep-agent/v1/endpoint/{0}.format(service)headers {Content-Type: application/json}if restclient.SSL_ENABLED:url restclient.HTTPS_URL urlresponse requests.get(url, headersheaders, verifyrestclient.SSL_CACERTPATH)else:url restclient.HTTP_URL urlresponse requests.get(url, headersheaders)# extracting data in json formatif response:data response.json()url data[uris]print(mep endpoint url url[0])return url[0]return class ClientFactory:This is a class for client factory implementation.# constructordef __init__(self, list_of_services):self.update_client_object(list_of_services)classmethoddef update_client_object(cls, list_of_services):This is a update client object method to get endpoint informationfor service in list_of_services:endpoint get_service_endpoint(service)if endpoint ! and http in endpoint or https in endpoint:clientObjects[service] restclient.RestClient(endpoint)classmethoddef get_client_by_service_name(cls, service):This is a get client by service name method to return client object by using service namereturn clientObjects[service]
restclient.py实现获取Mp1接口Token和发起Mp1接口服务调用请求
import os
import requestsHTTP_URL http://
HTTPS_URL https://
MEP_AGENT_URL os.environ.get(MEP_AGENT, 127.0.0.1:8080)
SSL_ENABLED False
ACCESS_TOKEN_ENABLED False
CONTENT_TYPE application/json
SSL_CACERTPATH /usr/app/ssl/ca.crtdef get_access_token():Get access token from mep-agent and return access token.url MEP_AGENT_URL /mep-agent/v1/tokenheaders {Content-Type: CONTENT_TYPE}if SSL_ENABLED:url HTTPS_URL urlresponse requests.get(url, headersheaders, verifySSL_CACERTPATH)else:url HTTP_URL urlresponse requests.get(url, headersheaders)# extracting data in json formatdata response.json()access_token data[access_token]return access_tokenclass RestClient:This is a class for rest client implementation.# rest client constructordef __init__(self, endpoint):self.endpoint endpointclassmethoddef get(cls, url):This is a get method for calling mep service via kongaccess_token get_access_token()access_token Bearer access_tokenheaders {Authorization: access_token}requests.packages.urllib3.disable_warnings() #disable warningsresponse requests.get(url, headersheaders, verifyFalse)return response.json()def get_endpoint(self):This is a get endpoint method for getting endpoint informationreturn self.endpoint
调用clientsdkclientsdk再调用restclient实现人脸识别业务的调用
import clientsdk
listofService [face-recognition]
sdk clientsdk.ClientFactory(listofService)
# 通过ServiceName得到url
face_client sdk.get_client_by_service_name(listofService[0])
# 通过url等到response
print(face_client.get(face_client.get_endpoint() /v1/face-recognition))
SDK安装和使用指南
开发者平台集成了API多语言SDK的生成通过Swagger Codegen组件自动生成API的客户端源码本地安装后更加方便的调用edgegallery平台提供的API能力目前支持python、java、go语言。
以人脸识别的SDK为例下面详细介绍SDK的安装和使用教程
进入融合前端集成开发选项中的能力中心找到并点击人脸识别的能力点击在线模拟器按钮会出现SDK的下载页面 下载python3的开发环境镜像使用以下Dockerfile构建安装好人脸识别SDK的镜像
FROM python:3.10-slim
ADD face-recognition.tgz test.py /
RUN https_proxyhttp://10.8.59.173:10809 pip3 install python-dateutil certifi urllib3 -i https://pypi.douban.com/simple cd /face-recognition python3 setup.py install
上面的Dockerfile文件中使用到的test.py文件的内容如下
#!/usr/bin/python3
import swagger_client
test swagger_client.FaceRecognitionApi()
print(test.health_check_get())
在EdgeGallery的集群中运行刚刚构建的镜像进行调试
kubectl run -it face-client --image face-client --image-pull-policy Never -- bash#进入容器后执行test.py脚本可以看到健康检查接口返回为1表示人脸识别应用运行正常
python3 test.py 5G网络能力集成
MEP集成5G网络能力的步骤如下
确定网络能力需求首先需要明确需要集成哪些5G网络能力例如UPFUser Plane Function、AMFAccess and Mobility Management Function、SMFSession Management Function等等。根据业务需求和网络架构选择需要集成的网络能力。集成网络能力模块根据选择的网络能力需求选择对应的网络能力模块进行集成。这些模块可以是标准化的3GPP网络功能模块5GC网元也可以是自定义的网络功能模块。将这些模块打包成Docker镜像或者Kubernetes应用程序部署到EdgeGallery中的Kubernetes集群上。实现网络能力接口为了让其他应用程序可以使用集成的网络能力需要实现对应的网络能力接口。这些接口可以是标准的3GPP接口也可以是自定义的RESTful API接口等。开发者可以使用API网关等技术将网络能力接口暴露给其他应用程序。集成网络能力SDK为了简化开发者集成网络能力的流程可以提供网络能力SDKSoftware Development Kit。这些SDK包含了网络能力模块和对应的接口实现以及相关的文档和示例代码等。开发者可以使用这些SDK快速集成所需的网络能力。
集成5G网络能力需要明确网络需求选择对应的网络能力模块进行集成实现对应的网络能力接口并提供网络能力SDK以方便开发者集成。EdgeGallery提供了开放的平台和相关工具方便开发者集成和管理各种网络能力和应用。
MEP Pod网络详解
由于应用需要使用MEP平台开放能力或者暴露网络能力给MEP平台因此对于应用来说需要具有调用MEP平台API接口的能力并将这部分调用MEP平台API能力的代码集成在自己的应用代码中才能正常将应用集成到MEC平台上而应用调用MEP平台的API是通过在应用内集成mep-agent实现的具体实现流程如下 图中MEP的Pod暴露了2个Service其它Service如dnsserver等未列出同时通过Multus使用默认Calico网络创建了Pod的默认网卡MACVLAN驱动为该Pod另外创建两张网卡mp1和mm5分别负责Mm5接口和Mp1接口的API调用。mep-mm5的Service虽然定义的是Mm5接口的Service但实际调用的是MEP中默认的Calico网卡而Pod中通过Macvlan创建的另一张Mm5网卡没有被其它应用或Service调用不知道这个是EdgeGallery v1.5.2版本的Bug还是故意这么做的。 EdgeGallery代码重构裁剪 Postgres向国产数据库迁移包括所有使用数据库的组件代码修改4人/月MECM包含MEPM和MEO因为暂时不做MEO所以需要理清MEPM与B/OSS的交互流程另外lcmcontroller和k8splugin问题较多经常出现业务部署失败的情况4人/月MEP包含DNS Server、Kong、MEP Auth、MEP Server四个组件目前该组件Bug较多需要投入人力解决2人/月Appstore偶尔出现发布失败的问题需要优化1人/月DeveloperSwagger界面无法使用的问题需要投入人力解决1人/月ATP无需重构投入人力理解测试原理1人/月User-Mgmt无需重构与5GC的联调N33/N5/N6接口适配2人/月前端界面包括Developer、MEPM、MECM、ATP、Appstore部分界面已经弃用需投入人力研究是否可以裁剪2人/月便捷部署与Kubernetes适配和信创操作系统适配2人/月