You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:53:13