边缘服务调用
名词定义
- 容器应用:由容器服务配置和数据卷配置组成的应用。
- 函数应用:由函数服务配置和数据卷配置组成的应用。
功能简介
"边缘服务调用"是指在边缘节点上,可以通过约定的域名地址访问到运行在边缘计算平台上的其他服务。服务间的调用本质上基于 Kubernetes Pods 的网络模型和 Kubernetes Service 资源,更多信息请参阅 Kubernetes文档:使用 Service 连接到应用。
使用流程
边缘服务调用分为调用用户应用服务 、调用系统应用服务 和 调用函数应用服务。
调用用户应用服务
创建容器应用
在应用列表页面点击"创建应用"进入应用创建页面。填写应用信息,然后选择"容器应用",并在服务配置信息界面填写需要暴露的"容器端口"。 配置了"容器端口"之后,边缘计算平台会为该服务在端侧创建一个 Kubernetes Service 资源,用于代理到该服务对应的 Pods 的网络流量。如何创建应用具体可以参考 应用部署。
比如,创建了一个 nginx 应用,端口映射部分配置了容器端口为80
,服务类型为ClusterIP,如下图所示:
部署到边缘计算节点上后,通过 kubectl get service -n baetyl-edge
命令查看,可以观察到已经创建了一个 nginx 名称的 Kubernetes Service 资源。
其中,Kubernetes Service 名称与服务配置信息界面中的服务名称相同。接下来我们在边缘节点上的 Kubernetes 集群中,通过 Kubernetes Service 去访问 nginx 应用。
说明:如果上面的服务类型为 NodePort,则边缘侧的服务名称为
nginx-nodeport
,会自动带上-nodeport
的后缀。边缘侧服务调用也需要使用nginx-nodeport
。
服务调用
我们可以通过上一步中的 [服务名.baetyl-edge]:[容器端口号]
去访问具体的服务,比如对于上一步部署的 nginx 服务,可以使用 http://nginx.baetyl-edge:80
去访问 nginx 服务。其中baetyl-edge
是用户应用的namespace。
服务名称格式:
[协议名称]://[service-name.baetyl-edge]:[port]
参数解释
协议名称
:所使用的协议,比如http
,https
,tcp
,tls
,ssl
,mqtt
,mqtts
,opc.tcp
等。具体使用的协议名称取决于代码实现方式,举例如下:
- go语言连接baetyl-broker,服务访问地址
ssl://baetyl-broker.baetyl-edge-system:50010
,协议名称为ssl
- nodejs语言连接baetyl-broker,服务访问地址
mqtts://baetyl-broker.baetyl-edge-system:50010
,协议名称为mqtts
service-name
: 表示应用中的服务名称。如果是nodeport形式暴露,一般会有-nodeport
这样的后缀baetyl-edge
: 使用BIE部署的用户应用,全部都在baetyl-edge这个namespace之下port
: 表示该服务配置中的容器端口。
常见服务名称名称示例:
# http协议
http://nginx.baetyl-edge:80
# 所有通过nodeport部署的服务,需要在服务名称后面增加-nodeport这样的后缀,示例如下:
http://paddle-serving-ocr-nodeport.baetyl-edge:9999/ocr/prediction
# opc协议
opc.tcp://baetyl-opcua-simulator.baetyl-edge-system:4840
# ws协议
ws://baetyl-broker.baetyl-edge-system:8883
# wss协议
wss://baetyl-broker.baetyl-edge-system:8884
调用系统应用服务
边缘计算平台也会有一些系统应用,如baetyl-broker,baetyl-core,部署在 baetyl-edge-system
命令空间中,可以按照如下格式请求:
# mqtt协议访问baetyl-broker系统应用
tcp://baetyl-broker.baetyl-edge-system:1883
mqtt://baetyl-broker.baetyl-edge-system:1883
# mqtts协议访问baetyl-broker系统应用
ssl://baetyl-broker.baetyl-edge-system:50010
mqtts://baetyl-broker.baetyl-edge-system:50010
# https协议访问 baetyl-core 的节点影子接口
https://baetyl-core.baetyl-edge-system/node/properties
https://baetyl-core.baetyl-edge-system:443/node/properties
参数解释
baetyl-broker
:系统应用baetyl-broker的服务名称
是固定的,就叫baetyl-broker
baetyl-edge-system
:是系统容器应用所在的 Kubernetes 命令空间port
:是系统容器内端口,支持自定义配置http/https/tcp
:具体调用服务的协议
调用函数应用服务
对于函数应用的调用方式,与容器应用有所不同。端侧函数计算框架由前端代理和后端函数运行时(函数应用)两部分组成。baetyl-function 提供前端代理,是函数入口,通过暴露 HTTP 接口供其他服务调用,然后将请求透传给后端的函数运行时模块。
我们可以按照如下格式去请求某一个函数应用:
# http协议访问baetyl-function
https://baetyl-function.baetyl-edge-system:50011/[function-service]/[function]
参数解释
- 50011 : 是 baetyl-function 提供服务的端口,固定不变
- function-service : 是函数应用的当中的
服务名称
,在创建函数服务的时候定义- function :表示函数入口,如果 funciton 字段不指定的话,后端函数运行时会默认选择自身函数列表中的第一个函数