使用Kubernetes Node Client创建Secret时提示namespace参数缺失
问题
尝试在命名空间a316e0ae-19cc-46ce-84ae-b8236ba20ffc中创建Secret,编写的JavaScript代码如下:
import { KubeConfig, CoreV1Api } from "@kubernetes/client-node"; const kc = new KubeConfig(); kc.loadFromDefault(); const k8sCoreApi = kc.makeApiClient(CoreV1Api); const namespace = "a316e0ae-19cc-46ce-84ae-b8236ba20ffc"; const secretManifest = { apiVersion: 'v1', kind: 'Secret', namespace, metadata: { name: 'environment', // Secret name namespace }, data: { username: Buffer.from('hans.hubert@example.com').toString('base64'), password: Buffer.from('Pa$$w0rd').toString('base64'), }, type: 'Opaque', }; // Call createNamespacedSecret with the correct body structure k8sCoreApi.createNamespacedSecret(namespace, secretManifest).then((secret) => { console.log("Secret created", secret) }).catch(console.error);
但始终收到错误:
RequiredError: Required parameter namespace was null or undefined when calling CoreV1Api.createNamespacedSecret. at CoreV1ApiRequestFactory.createNamespacedSecret (file:///home/marc/projects/kubernets/open-haus.cloud/node_modules/@kubernetes/client-node/dist/gen/apis/CoreV1Api.js:2850:19) at ObservableCoreV1Api.createNamespacedSecretWithHttpInfo (file:///home/marc/projects/kubernets/open-haus.cloud/node_modules/@kubernetes/client-node/dist/gen/types/ObservableAPI.js:12243:59) at ObservableCoreV1Api.createNamespacedSecret (file:///home/marc/projects/kubernets/open-haus.cloud/node_modules/@kubernetes/client-node/dist/gen/types/ObservableAPI.js:12268:21) at ObjectCoreV1Api.createNamespacedSecret (file:///home/marc/projects/kubernets/open-haus.cloud/node_modules/@kubernetes/client-node/dist/gen/types/ObjectParamAPI.js:4652:25) at file:///home/marc/projects/kubernets/open-haus.cloud/deploy.mjs:41:12 at ModuleJob.run (node:internal/modules/esm/module_job:218:25) at async ModuleLoader.import (node:internal/modules/esm/loader:329:24) at async loadESM (node:internal/process/esm_loader:28:7) at async handleMainPromise (node:internal/process/esm_run_main:113:12) { api: 'CoreV1Api', method: 'createNamespacedSecret', field: 'namespace' }
当前使用k3s v1.31.3+k3s1和Kubernetes Node Client v1.0.0,代码符合官方文档要求,求解决办法。
解决方案
这个报错是因为Kubernetes Node Client v1.0.0版本的API参数结构发生了变化——createNamespacedSecret方法不再直接将manifest作为第二个参数,而是需要传入一个包含body字段的配置对象。
修改调用代码即可解决:
k8sCoreApi.createNamespacedSecret(namespace, { body: secretManifest }) .then((secret) => { console.log("Secret created", secret) }).catch(console.error);
额外优化建议:
- 移除Secret manifest中根级的
namespace字段,Kubernetes只需要metadata内的namespace配置即可,根级字段属于冗余配置 - 可以在调用API前添加
console.log(namespace),确认变量确实被正确赋值,排除变量未定义的可能性
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

