繁体   English   中英

从Nodejs访问kubernetes集群API

[英]Access kubernetes cluster API from Nodejs

我有一个从 Create React App 搭建的客户端反应应用程序。 这部署在 Kubernetes 集群中并暴露于互联网。

现在,我想从这个 API 访问 REST API。 这个 REST API 部署到同一个集群,但只暴露给集群(而不是互联网)。

我的问题是,如果我为我的客户端反应应用程序添加 Nodejs 服务器层并部署到同一个集群,我是否能够访问 REST API 而不会暴露在互联网上?

或者,我应该将 go 暴露在互联网上吗?

不确定我是否完全按照。 但是,您可以从部署在 POD 中的 node.js 服务器访问 k8s API,它将获得与 POD 相同的权限。

I have something similar to this, an express application running in the pod that provides a REST API for a REACT app, calling the REST API looks up the specific k8s API I need for the APP. 我们经常使用 NodeRed 对这些 REST -> k8sAPI 进行原型制作。

希望这会有所帮助,下面是一个示例。 (完全披露,黑客不是程序员;-)

例子....

const axios = require("axios");
const k8s = require("@kubernetes/client-node");


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


async function getnskey(user) {
//Match username from gitlab with ns-map/namespace key and return   
    const k8sApi = kc.makeApiClient(k8s.CoreV1Api);

    const response = await k8sApi.readNamespacedConfigMap('ns-map', 'epicmgrsrv')

    let userns;
    
    let userlist = response.body.data;

    if ( userlist.hasOwnProperty(user)) {
        userns = userlist[user];
    }

    const response2 = await k8sApi.readNamespacedSecret('mgrsrvkey', userns)

    //let key = Buffer.from(response2.body.data["key"], 'base64').toString();

    const nskey = {
        userns: userns,
        nskey: response2.body.data["key"],
    };

    return nskey;
}

app.get("/user", (req, res) => {
    console.log("getting user data!");
//    console.log(JSON.stringify(req.headers));


    if (typeof(req.headers.authorization) !== undefined && req.headers.authorization.length > 10 ) {
        axios.get("https://api.github.com/user" , {
            headers: {
                Authorization: req.headers.authorization,
            },
        }).then((response) => {
            getnskey(response.data.login)
            .then(nskey => {

                const user = {
                    name: response.data.login,
                    userns: nskey.userns,
                    nskey: nskey.nskey,
                }
                console.log(user);
                res.send(user)
            })
        });
    } else {
        console.log("no authorization");
    }


    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM