#创作者激励# 领航计划(五): 玩转KubeEdge Router(核心) 原创

Piwriw.
发布于 2023-3-11 20:03
浏览
0收藏

领航计划(五): 玩转KubeEdge Router

什么是 Router

  • router 是 KubeEdge 中的一种通过实现 CRDs 来实现与边缘端进行MQTT通信的模式
  • 在 KubeEdge 中通过 Rule 和 RuleEndPoint 实现了几种通信模式

配置开启 router

云端(cloud)

  • 开启router模式
# 如果你是通过pod安装的cloudcore 查看是否开启
#可以通过kubectl edit pod <cloudcore_name> -n kubeedge 修改
kubectl describe cm cloudcore -n kubeedge 
.......
  router:
    enable: true
.......

边缘端(edge)

  • 开启eventbusservicebus
vi /etc/kubeedge/config/edgecore.yaml
  metaManager:
    contextSendGroup: hub
    contextSendModule: websocket
    enable: true
    metaServer:
      enable: true
      server: 127.0.0.1:10550
      tlsCaFile: /etc/kubeedge/ca/rootCA.crt
      tlsCertFile: /etc/kubeedge/certs/server.crt
      tlsPrivateKeyFile: /etc/kubeedge/certs/server.key
    remoteQueryTimeout: 60
  serviceBus:
    enable: true
    port: 9060
    server: 127.0.0.1
    timeout: 60

什么是 EventBus 和 ServiceBus

EventBus-边缘消息

    1. 通过MQTT接收外部客户端到消息
    1. 通过MQTT发送消息

ServiceBus-边缘消息

    1. 云端通过 beehive 发送消息
    1. EdgeHub接收消息然后发送给ServiceBus
    1. ServiceBus 提供http调用然后返回消息

三大消息传递

云到边 - eventbus

    1. 用户创建源和目标的规则
    1. 云端APP调用api发送消息,消息到边缘端后通过eventbus 发布到 MQTT Broker
    1. 边缘端应用收到订阅的相关消息

云到边 - servicebus

    1. 用户创建源和目标的规则
    1. 云端 App 调用云端 api 发送消息,到达 servicebus
    1. servicebus 调用 边缘端 App 的 http API

边的 eventbus ->云

    1. 用户创建源和目标的规则
    1. 边缘应用发布消息到 MQTT Broker,eventbus 订阅消息并发布到云端
    1. 云端应用通过配置 router 中定义的规则得到上述消息

我的最佳实践

环境准备

  • KubeEdge、k8s 、node、cloud
  • 在云边,准备 go version = 1.17 ,开启 Go Modules 和goproxy代理
  • 在边缘端,打开 servicebuseventbus,检查你的 /etc/kubeedge/config/edgecore.yaml

eventbus->rest

1. 准备ruleendpoint

kubectl apply -f ruleEndpoint-eventbus.yaml
kubectl apply -f ruleEndpoint-rest.yaml

ruleEndpoint-rest.yaml:

apiVersion: rules.kubeedge.io/v1
kind: RuleEndpoint
metadata:
name: my-rest
labels:
 description: test
spec:
ruleEndpointType: "rest"
properties: {}

ruleEndpoint-eventbus.yaml:

apiVersion: rules.kubeedge.io/v1
kind: RuleEndpoint
metadata:
  name: my-eventbus
  labels:
    description: test
spec:
  ruleEndpointType: "eventbus"
  properties: {}

2. 准备 rule-eventbus-to-rest.yaml文件

  • 需要注意修改node_name为你的边缘节点,targetResource:用的你的服务器ip

rule-eventbus-to-rest.yaml:

apiVersion: rules.kubeedge.io/v1
kind: Rule
metadata:
  name: my-rule-eventbus-rest
  labels:
    description: test
spec:
  source: "my-eventbus"
  sourceResource: {"topic": "test","node_name": "edge-02"}
  target: "my-rest"
  targetResource: {"resource":"http://yourip/myevents"}

3. 通过web测试

main.go:

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"io/ioutil"
)

func main() {
	r := gin.Default()
	r.POST("/myevents", func(c *gin.Context) {
		s, _ := ioutil.ReadAll(c.Request.Body)
		fmt.Printf("edge say '%s' ", s)
	})
	r.Run()
}
go mod tidy 
go run main.go	

4. 在边缘端通过mosquitto进行测试

mosquitto_pub -t 'default/test' -d -m '{"edgemsg":"edge send msg to cloud by eventbus"}'

5. 验证结果

 #创作者激励# 领航计划(五): 玩转KubeEdge Router(核心)-开源基础软件社区

rest->servicebus

1. 准备ruleendpoint

kubectl apply -f ruleEndpoint-rest.yaml
kubectl apply -f ruleEndpoint-servicebus.yaml

ruleEndpoinr-rest.yaml:

apiVersion: rules.kubeedge.io/v1
kind: RuleEndpoint
metadata:
  name: my-rest
  labels:
    description: test
spec:
  ruleEndpointType: "rest"
  properties: {}

ruleEndpoint-servicebus.yaml:

apiVersion: rules.kubeedge.io/v1
kind: RuleEndpoint
metadata:
  name: my-servicebus
  labels:
    description: test
spec:
  ruleEndpointType: "servicebus"
  properties: { "service_port": "8888" }

2. 准备rule-rest-to-servicebus.yaml

apiVersion: rules.kubeedge.io/v1
kind: Rule
metadata:
  name: my-rule-rest-servicebus
  labels:
    description: test
spec:
  source: "my-rest"
  sourceResource: { "path": "/rest" }
  target: "my-servicebus"
  targetResource: { "path": "/servicebus" }

3. 部署web测试

go mod tidy
go run main.go

main.go:

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	r := gin.Default()
    r.POST("/servicebus", func(c *gin.Context) {
		s, _ := ioutil.ReadAll(c.Request.Body)
		fmt.Printf("edge say '%s' ", s)
	})
	r.Run(":8888")
}

4.在云端发送进行测试,注意edge-02是你边缘节点的名字

curl -H "Content-type: application/json" -X POST -d '{"msg":"cloud send"}' http://127.0.0.1:9443/edge-02/default/rest

5. 验证结果

 #创作者激励# 领航计划(五): 玩转KubeEdge Router(核心)-开源基础软件社区

MoreInfo

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2023-3-12 14:31:31修改
1
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐