Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过https验证Google Kubernetes群集证书?_Javascript_Node.js_Kubernetes_Axios_Google Kubernetes Engine - Fatal编程技术网

Javascript 通过https验证Google Kubernetes群集证书?

Javascript 通过https验证Google Kubernetes群集证书?,javascript,node.js,kubernetes,axios,google-kubernetes-engine,Javascript,Node.js,Kubernetes,Axios,Google Kubernetes Engine,我在尝试访问Google Kubernetes引擎上托管的Kubernetes集群时有点迷茫 我想使用集群证书对提供的kubernetes端点进行身份验证,以便可以运行对kubernetes API的API请求,例如创建部署 我正在尝试从外部API(从一个NodeJS应用程序,托管在google app engine上)创建部署,我将在不同的kubernetes集群上自动创建部署,不一定在同一个google项目中 我曾经使用basic auth对kubernetes api进行身份验证,这很简单

我在尝试访问Google Kubernetes引擎上托管的Kubernetes集群时有点迷茫

我想使用集群证书对提供的kubernetes端点进行身份验证,以便可以运行对kubernetes API的API请求,例如创建部署

我正在尝试从外部API(从一个NodeJS应用程序,托管在google app engine上)创建部署,我将在不同的kubernetes集群上自动创建部署,不一定在同一个google项目中

我曾经使用basic auth对kubernetes api进行身份验证,这很简单,我所需要的只是集群的用户名和密码,然后对两者进行base64编码并将其放入身份验证头中。我用axios做的,一点问题都没有

现在我想切换到使用客户端证书,我想我缺乏一些理解

我想我需要获得集群提供的端点ip,下载google提供的集群证书。。。看起来是这样的:

…可能是base64编码并将其保存为.crt、.cert或???.pem文件,然后使用httpagent将axios指向该文件?(我尝试将原始数据保存为.crt和.cert文件,并将其设置为httpagent,但这并不令人惊讶地奏效)

我是否需要某种类型的客户端/服务器密钥对来获得证书,或者可能需要API密钥

我还阅读了一些关于将承载令牌设置为授权头的内容,我想这需要与证书配对,但我不确定在哪里可以找到/生成此令牌

如果有人能帮我解决这个模糊的问题我会非常感激

提前谢谢


另外,我一直在尝试破解K8s文档,我想我已经接近了,但我仍然不确定我在看的是正确的文档:

我不确定使用手动身份验证是否最适合这种情况,因为Kubernetes引擎的一个好功能是它会自动为您提供kubectl的身份验证配置,通过“gcloud容器群集获取凭据”命令。 还有一些资源(如连接到另一个集群)是通过GCP IAM权限而不是Kubernetes内部控制的。
我建议您深入查看此页面:

这也应该为您处理证书


一般来说,我建议您先查看GKE文档,然后再查看kubernetes文档,因为GKE不仅是kubernetes文档,而且它还可以使管理某些事情变得更简单。

我不确定使用手动身份验证是否最适合这种情况,Kubernetes引擎的一个好特性是,它将通过“gcloud container clusters get credentials”命令自动为kubectl提供身份验证配置。 还有一些资源(如连接到另一个集群)是通过GCP IAM权限而不是Kubernetes内部控制的。
我建议您深入查看此页面:

这也应该为您处理证书


一般来说,我建议您在kubernetes one之前先查看GKE文档,因为GKE不仅是kubernetes,而且它还可以让管理某些事情变得更容易。

我已经解决了这个问题,我想我会发布一个答案,以防有人遇到我的情况,需要参考

答案是很好的,我认为这是最安全的心态,最好将一切都放在谷歌环境内部。但在我的例子中,即使只是为了测试,我也确实需要通过https从另一个域与kubernetes API进行接口

事实证明,这比我预期的要简单,我需要做的不是使用CA证书,而是从google cloud shell获取一个服务帐户令牌,并将其放在授权头中(非常类似于基本身份验证)。(此外,我应该使用服务帐户的客户端证书检查kubernetes端点的有效性,但我没有这样做。)

进入google cloud shell并通过相关集群的身份验证后,运行以下操作:

  • kubectl获取服务帐户
  • kubectl获取服务帐户默认值-o yaml
  • kubectl get secret-default-token-some\u id\u string-o yaml
  • kubectl create clusterrolebinding default servicecomport admin--clusterrole=cluster admin--servicecomport=default:default
  • 第1点显示是否存在默认的服务帐户,在Google Kubernetes引擎上创建的集群应该是这样

    第2点打印出默认的服务帐户,并应提供服务帐户名称,如“机密默认令牌abcd”

    第3点打印令牌及其相应的证书。令牌以base64编码字符串的形式打印,需要先对其进行解码,然后才能在http请求中使用

    第4点为默认服务帐户分配一个角色(Kubernetes RBAC的一部分),使其具有在群集中创建和删除部署的正确权限

    然后,在postman或进行Kubernetes api调用的任何地方,设置授权标头,如下所示:

    授权:持票人

    现在,您可以直接调用kubernetes api,例如,创建或删除部署

    如上所述,证书在第3点中也作为base64编码字符串提供,可用于验证kubernetes端点,但我还没有对此进行测试(肯定是更安全的方法)

    此外,我在nodejs脚本中进行http调用,我必须设置一个环境变量
    process.env.NODE\u TLS\u REJECT\u UNAUTHOR