对Kubernetes api服务器的POST请求结果为;提供的对象的命名空间与请求时发送的命名空间不匹配;

对Kubernetes api服务器的POST请求结果为;提供的对象的命名空间与请求时发送的命名空间不匹配;,kubernetes,Kubernetes,我正在编写一个脚本,该脚本将在Kubernetes中创建秘密,而不会将base64编码的文件以纯文本形式放在etcd以外的任何地方。为此,我直接与kubernetes的api服务器交谈,而不是通过kubectl。当我发出请求时,它需要一个名称空间,这很有意义 但是,我收到的关于名称空间的响应是“提供的对象的名称空间与请求中发送的名称空间不匹配”。我查看了api服务器和kubectl的源代码,看看kubectl是否做了一些我没有做的特殊事情,这会导致这个问题。我出现这个错误的原因是什么?我是否缺少

我正在编写一个脚本,该脚本将在Kubernetes中创建秘密,而不会将base64编码的文件以纯文本形式放在etcd以外的任何地方。为此,我直接与kubernetes的api服务器交谈,而不是通过kubectl。当我发出请求时,它需要一个名称空间,这很有意义

但是,我收到的关于名称空间的响应是“提供的对象的名称空间与请求中发送的名称空间不匹配”。我查看了api服务器和kubectl的源代码,看看kubectl是否做了一些我没有做的特殊事情,这会导致这个问题。我出现这个错误的原因是什么?我是否缺少标题或cookie之类的东西

这是我的请求(我用JS编写):


在这个例子中,我故意省略了身份验证,我可以确认我是经过身份验证的。

因此,解决方案是发布到“/api/v1/namespace/{namespace}/secrets”

var data = JSON.stringify(/* Secret spec */);
var req = http.request({
    hostname: argObj.host ? argObj.host : '127.0.0.1',
    port: argObj.port ? argObj.port : '8080',
    path: '/api/v1/secrets',
    method: argObj.method ? argObj.method : 'POST',
    headers: {
        'Content-Type': 'application/json'
    }
}, (res)=>{/* handle res */});
req.write(data);