关于iot:Shifu高级功能命令行中间件之HTTP-到-SSH-的中间件

介绍

为了使Shifu能够整合开发者的驱动,咱们编写了一个简略的 HTTP 到 SSH 的中间件来供开发者应用

设计

这个 HTTP 到 SSH 的中间件设计如下:

  • 从中间件利用容器提供的公钥建设一个到容器的 SSH 连贯
  • 这个 SSH 连贯会被用作反向 HTTP 代理,代理到 localhost 的制订 HTTP 端口
  • 这个中间件会间接在 SSH 的会话中执行 HTTP 申请的 body 的内容
  • 中间件会将执行内容的后果以及状态代理回复给请求者

性能

代理 HTTP body 的内容到 SSH shell 并执行

中间件的次要性能就是将任意HTTP 申请中 body 的内容附加一个超时并执行

举例:

当应用curl去 Post 一个申请到制订 URL, 会是如下命令:

curl -X POST -d "ping 8.8.8.8" http://example.com

这个申请会被中间件传递到驱动容器中的shell中执行:

~ # ping 8.8.8.8

HTTP 的返回后果如下 (留神这个输入不全,是因为咱们设定了一个命令超时的环境变量):

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=36 time=47.227 ms
64 bytes from 8.8.8.8: seq=1 ttl=36 time=50.137 ms
64 bytes from 8.8.8.8: seq=3 ttl=36 time=47.619 ms

查看session.Run(cmd)谬误并设定 HTTP 的返回状态码

以后中间件会在胜利时返回200, 谬误或超时时返回400

对于出错的命令,中间件会将stdoutstderr合并到一起通过 HTTP 的 body 返回

应用

咱们写了一个 Dockerfile 的示例在[examples/driver_utils/simple-alpine/Dockerfile.sample](https://github.com/Edgenesis/shifu/blob/main/examples/driver_utils/simple-alpine/Dockerfile.sample),其中演示了如何将这个中间件退出到一个 alpine 的 Docker 镜像中

打包的 Docker 镜像会应用以下变量,因而咱们须要在yaml文件中进行配置:

  • EDGEDEVICE_DRIVER_SSH_KEY_PATH(必填)

    • 用来建设 SSH 连贯到本身的 SSH 密钥门路
  • EDGEDEVICE_DRIVER_HTTP_PORT (选填)

    • HTTP 服务的端口,默认为11112
  • EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND (选填)

    • 执行命令的超时,通过在命令后面加上timeout <seconds>来实现
  • EDGEDEVICE_DRIVER_SSH_USER (选填)

    • 咱们 SSH 到本身容器的用户,默认为root

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据