Shifu高级功能:命令行中间件之HTTP 到 SSH 的中间件
2023/3/16 21:22:03
本文主要是介绍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
对于出错的命令,中间件会将stdout
和stderr
合并到一起通过 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
- HTTP 服务的端口,默认为
EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND
(选填)- 执行命令的超时,通过在命令前面加上
timeout <seconds>
来实现
- 执行命令的超时,通过在命令前面加上
EDGEDEVICE_DRIVER_SSH_USER
(选填)- 我们 SSH 到自身容器的用户,默认为
root
- 我们 SSH 到自身容器的用户,默认为
这篇关于Shifu高级功能:命令行中间件之HTTP 到 SSH 的中间件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16轻巧的Kubernetes与WebAssembly的完美搭档
- 2024-11-16基于AWS的Java应用持续集成与持续部署全流程指南:从构建到部署在Amazon EKS上运行
- 2024-11-15为什么我在Kubernetes集群里需要一个API网关?
- 2024-11-15亚马逊EKS的未来发展趋势
- 2024-11-15使用Kubernetes简化分布式Spring Boot应用中的定时任务管理
- 2024-11-15教你轻松几步升级Hetzner上超划算的Kubernetes集群
- 2024-11-15动手排查Kubernetes网络故障之旅
- 2024-11-15Kubernetes监控:最佳实践指南
- 2024-11-15两年使用Kubernetes运行Airflow后我们学到的经验教训
- 2024-11-15如何用三条配置行解决我们在Kubernetes中遇到的gRPC扩展问题