使用kubernetes/client-node无法在指定Pod执行命令的报错问题
解决K8s Exec API返回400错误的问题
核心问题
exec.exec方法的command参数要求传入字符串数组,而非单个完整命令字符串。你当前将整个命令作为单个字符串传入,K8s API会把它当作一个独立的可执行文件去查找,导致参数错误,返回400响应。
修复代码
将命令拆分为字符串数组形式:
const k8s = require('@kubernetes/client-node') const stream = require('stream') const kc = new k8s.KubeConfig() kc.loadFromDefault() const k8sApi = kc.makeApiClient(k8s.CoreV1Api) const exec = new k8s.Exec(kc) const podName = 'test-pod-66fd96bf66-jd6wf' const containerName = 'test-container' // 拆分命令为字符串数组 const command = ['wget', '-O', '/dev/null', '-q', 'http://localhost:5000/sayHi'] exec.exec('default', podName, containerName, command, null, null, null, false) .catch(err => { console.log(err) })
额外排查点
- 确认Pod名称、容器名称正确,且Pod处于
Running状态 - 检查当前KubeConfig对应的账号拥有
pods/exec权限 - 验证容器内存在
wget命令,若缺失可替换为curl等已安装工具
内容的提问来源于stack exchange,提问作者Akshay Dudhe
相关产品推荐
相关产品推荐

