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

使用@kubernetes/client-node的loadFromOptions连接K8s集群无Pod数据问题

使用@kubernetes/client-node连接远程K8s集群返回空V1PodList的问题

问题描述

我尝试通过Node.js使用@kubernetes/client-node连接远程K8s集群,代码如下:

const k8s = require('@kubernetes/client-node')
const kc = new k8s.KubeConfig()
const cluster = {name: 'default', server: 'https://my-server.com'}
const user = {name: 'xxx', password: 'yyy'}
const context = {name: 'default', user: user.name, cluster: cluster.name}
kc.loadFromOptions({ clusters: [cluster], users: [user], contexts: [context], currentContext: context.name })
const k8sApi = kc.makeApiClient(k8s.CoreV1Api)
k8sApi.listPodForAllNamespaces().then(r => {
    console.log(r.body)
})

执行后未出现报错,但返回的结果为:

V1PodList {
    apiVersion: undefined,
    items: undefined,
    kind: undefined,
    metadata: undefined
}

使用相同参数通过kubectl可正常获取Pod数据,请问我遗漏了什么配置?

问题原因及解决方法

你遗漏了集群CA证书配置,同时用户认证的格式也需要调整,这两个点是导致API返回空结构的核心原因。

具体修正步骤

  1. 添加集群CA证书
    在cluster对象中加入certificateAuthorityData字段,值为K8s集群CA证书的Base64编码字符串(可从本地kubeconfig文件的clusters[].cluster.certificate-authority-data字段直接复制)。

  2. 调整用户认证格式
    密码认证的用户对象需要明确认证类型,正确结构如下:

    const user = {
      name: 'xxx',
      password: 'yyy',
      authProvider: {
        name: 'kubernetes'
      }
    }
    

修正后的完整代码

const k8s = require('@kubernetes/client-node')
const kc = new k8s.KubeConfig()
// 替换为你的集群CA证书Base64编码
const caCert = 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR......'
const cluster = {
  name: 'default',
  server: 'https://my-server.com',
  certificateAuthorityData: caCert
}
const user = {
  name: 'xxx',
  password: 'yyy',
  authProvider: { name: 'kubernetes' }
}
const context = { name: 'default', user: user.name, cluster: cluster.name }
kc.loadFromOptions({ 
  clusters: [cluster], 
  users: [user], 
  contexts: [context], 
  currentContext: context.name 
})
const k8sApi = kc.makeApiClient(k8s.CoreV1Api)
k8sApi.listPodForAllNamespaces().then(r => {
  console.log(r.body)
})

额外说明

如果你的集群使用token认证,用户对象可改为:

const user = {
  name: 'xxx',
  token: '你的认证token'
}

内容的提问来源于stack exchange,提问作者newman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:19