我正在编写一个脚本,该脚本将在Kubernetes中创建机密,而不会将base64编码的文件以纯文本形式放置在etcd之外的任何位置。为了做到这一点,我直接与kubernetes的api服务器对话,而不是通过kubectl。当我提出请求时,它需要一个名称空间,这是有意义的。
然而,我收到的关于命名空间的响应是"所提供对象的命名空间与请求中发送的命名空间不匹配"。我查看了api服务器和kubectl的源代码,看看kubectl是否有我没有做的特殊事情会导致这个问题。我出现这个错误的原因是什么?我是不是丢了球头或者饼干之类的东西?
这是我的请求(我用JS写):
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);
在这个示例中,我故意省略了身份验证,我可以确认我是身份验证。
因此,解决方案是POST到"/api/v1/namespaces/{namespace}/secrets",而不是