Kubernetes Javascript 客户端库适用于本地,但不适用于 GKE

问题描述 投票:0回答:2

我正在尝试使用 Kubernetes JS 客户端库,当我在本地环境中尝试它时(我使用 docker 运行本地 kubernetes),它工作正常,我正在创建一个用于测试目的的 pod,并且 pod 已创建。当我尝试使用 Google Kubernetes Engine 时,我收到“HttpError:HTTP 请求失败”。

这是我如何使用该库:

const kc = new k8s.KubeConfig();
kc.loadFromDefault();

const k8sApi = kc.makeApiClient(k8s.CoreV1Api);


然后我使用以下方法创建一个 pod,使用 V1Pod 主体:

k8sApi.createNamespacedPod("default", pod).then(
    (response) => {
        console.log(`Created pod -> ${response}`);
    },
    (err) => {
        console.log(`Error: ${err}`);
    }
);
javascript api http kubernetes google-kubernetes-engine
2个回答
1
投票

我不确定您是否解决了这个问题,但我通过对创建函数(即 api.createNamespacedCronJob(...))生成的错误使用 JSON.stringify(e) 获得了更多信息。如果您查看 k8s javascript 客户端的 github 存储库,则 HttpError 对象包含响应、正文和状态代码。这对我的情况非常有帮助。由于请求所使用的服务帐户的权限,这是 403 禁止的。

Kubernetes Javascript 客户端 HttpError(产生该消息): https://github.com/kubernetes-client/javascript/blob/ab5fc88afb4a205b1686078feca7e233f610c4f6/src/gen/api/apis.ts


0
投票

我前段时间也遇到过类似的问题,后来我发现它与 RBAC 有关。在本地环境(如 kind 或 minikube)中,您使用默认的 serviceaccount 或 RBAC 甚至可以在集群中禁用,但在公共云中,访问通常受到很大的限制。

如果有人遇到同样的问题 - 要解决此问题,您需要创建一个服务帐户、角色或集群角色并提供对 api 的访问,然后创建角色绑定。将新的服务帐户插入到部署(或其他资源)中,这就是您通常能够与公共云上的 k8s API 进行通信的方式。代码示例可以在以下链接中找到。

实施文件:

© www.soinside.com 2019 - 2024. All rights reserved.