Shifu高级功能:命令行中间件之HTTP 到 PowerShell 的中间件
2023/3/17 21:22:10
本文主要是介绍Shifu高级功能:命令行中间件之HTTP 到 PowerShell 的中间件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
简介
为了让你的设备接入Shifu。我们用Go编写了一个简单的HTTP到 PowerShell 的中间件,供开发者使用。
设计
这个HTTP到PowerShell的中间件是这样设计的:
- 中间件在主机上暴露了一个HTTP接口
- 该HTTP接口用于转发来自外部的请求到 Windows 主机
- 中间件将代理结果和执行状态返回给请求者
功能
将HTTP请求体代理到PowerShell shell并执行
接受HTTP请求体中的一切内容,并在规定超时时间内执行。
构建中间件
操作
386
GOOS=windows GOARCH=386 go build -a -o http2powershell.exe cmd/httpstub/powershellstub/powershellstub.go
amd64
GOOS=windows GOARCH=amd64 go build -a -o http2powershell.exe cmd/httpstub/powershellstub/powershellstub.go
使用方法
该可执行文件需要配置以下环境变量:
EDGEDEVICE_DRIVER_HTTP_PORT
(可选)- 驱动程序容器的HTTP服务器端口,默认为
11112
。
- 驱动程序容器的HTTP服务器端口,默认为
EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND
(可选)- 执行指令的超时时间,可以通过在命令前面加上
timeout <seconds>
来实现。
- 执行指令的超时时间,可以通过在命令前面加上
对于Windows
主机的操作:
如果要运行中间件,请双击http2powershell.exe
,默认情况下,中间件会在0.0.0.0
上监听11112
端口。
对于Shifu的操作:
使用/examples/simple-powershell-stub
中提供的样本部署文件。
在shifu
的根目录下发布:
kubectl apply -f driver_util/http-to-powershell-stub/examples/Simple-powershell-stub
代理命令
使用curl
向Windows
主机发布请求:
root@nginx:/# curl "edgedevice-powershell/issue_cmd?flags_no_parameter=ls,C:" Directory: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 6/5/2021 8:10 PM PerfLogs d-r--- 6/9/2022 2:48 PM Program Files d-r--- 4/29/2022 8:02 PM Program Files (x86) d-r--- 4/16/2022 1:46 AM Users d----- 6/9/2022 2:48 PM Windows d----- 4/17/2022 5:23 PM xampp root@nginx:/# curl "edgedevice-powershell/issue_cmd?flags_no_parameter=ping,8.8.8.8" Pinging 8.8.8.8 with 32 bytes of data: Reply from 8.8.8.8: bytes=32 time=64ms TTL=114 Reply from 8.8.8.8: bytes=32 time=56ms TTL=114 Reply from 8.8.8.8: bytes=32 time=57ms TTL=114 Reply from 8.8.8.8: bytes=32 time=59ms TTL=114 Ping statistics for 8.8.8.8: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 56ms, Maximum = 64ms, Average = 59ms
示例
当使用curl
向一个给定的URL发布请求时,命令如下:
curl "example.com/issue_cmd?flags_no_parameter=ping,8.8.8.8
。
然后请求将从HTTP的中间件传到Windows
主机的PowerShell
。
> powershell.exe ping 8.8.8.8
。
请注意,默认的定时EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND
可以被URL中的timeout
标志所覆盖,例如:
- 如果没有
timeout
标志(命令超时,输出不完整):
root@nginx:/# curl "example.com/issue_cmd?flags_no_parameter=ping,-n,6,8.8.8.8" Pinging 8.8.8.8 with 32 bytes of data: Reply from 8.8.8.8: bytes=32 time=58ms TTL=114 Reply from 8.8.8.8: bytes=32 time=51ms TTL=114 Reply from 8.8.8.8: bytes=32 time=59ms TTL=114 Reply from 8.8.8.8: bytes=32 time=45ms TTL=114 Reply from 8.8.8.8: bytes=32 time=59ms TTL=114
- 使用
timeout
标志(输出完整):
root@nginx:/# curl "example.com/issue_cmd?timeout=10&flags_no_parameter=ping,-n,6,8.8.8.8" Pinging 8.8.8.8 with 32 bytes of data: Reply from 8.8.8.8: bytes=32 time=60ms TTL=114 Reply from 8.8.8.8: bytes=32 time=60ms TTL=114 Reply from 8.8.8.8: bytes=32 time=59ms TTL=114 Reply from 8.8.8.8: bytes=32 time=59ms TTL=114 Reply from 8.8.8.8: bytes=32 time=59ms TTL=114 Reply from 8.8.8.8: bytes=32 time=60ms TTL=114 Ping statistics for 8.8.8.8: Packets: Sent = 6, Received = 6, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 59ms, Maximum = 60ms, Average = 59ms
我们还添加了一个参数stub_toleration
来处理deviceShifu和中间件之间的延迟问题。默认情况下,它被设置为1
秒,你可以用以下方法覆盖这个时间:
root@nginx:/# curl "example.com/issue_cmd?timeout=10&flags_no_parameter=ping,-n,6,8.8.8.8&stub_toleration=0"
本文由边无际授权发布
这篇关于Shifu高级功能:命令行中间件之HTTP 到 PowerShell 的中间件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 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扩展问题