如何使用API​​在pod(kubernetes)中执行命令?

spi*_*nus 8 google-cloud-platform kubernetes google-kubernetes-engine

我正在尝试在contianer中执行命令(使用kubernetes 1.1.2在GKE上的Kubernetes POD中).

阅读文档我明白我可以使用GET或POST查询在API端点上打开websocket连接来执行命令.当我使用GET时,它不能完全工作,返回错误.当我尝试使用POST时,类似的东西可能会起作用(但事实并非如此):

curl 'https://admin:xxx@IP/api/v1/namespaces/default/pods/hello-whue1/exec?stdout=1&stderr=1&command=ls' -H "Connection: upgrade" -k -X POST -H 'Upgrade: websocket'
Run Code Online (Sandbox Code Playgroud)

对此的回应是

unable to upgrade: missing upgrade headers in request: http.Header{"User-Agent":[]string{"curl/7.44.0"}, "Content-Length":[]string{"0"}, "Accept":[]string{"*/*"}, "Authorization":[]string{"Basic xxx=="}, "Connection":[]string{"upgrade"}, "Upgrade":[]string{"websocket"}}
Run Code Online (Sandbox Code Playgroud)

看起来应该足以升级post请求并开始使用websocket流,对吧?我错过了什么?

我还指出,使用POST打开websocket可能违反了websocket协议(只有GET才能工作?).

Ale*_*son 2

您可能会在使用Kubernetes 客户端库时获得最佳体验,它与 Kubectl 使用的代码相同,但如果由于某种原因这不是一个选项,那么我最好的建议是查看客户端库的代码以执行远程操作命令并查看它设置的标头。