使用证书未成功验证Kubernetes API(NodeJS)客户端

时间:2017-04-19 05:03:44

标签: kubernetes google-cloud-platform google-kubernetes-engine kubectl

我在谷歌云中部署了一个Kubernetes群集,并尝试使用kubernetes客户端Kubernetes NodeJS API访问它。

为此,我们需要使用群集进行身份验证。我尝试仅使用 Username and Password 方法。我收到以下错误:

{ [Error: unable to verify the first certificate] code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }

然后我尝试使用CAcert, ClientCert and ClientKey进行身份验证。我基本上硬编码键而不是从文件中导入它。我从Lambda函数调用此API,我无法将证书存储在文件中。这样做,我得到以下错误:

[Error: error:0906D06C:PEM routines:PEM_read_bio:no start line]

我的直觉是只有密钥才能进行身份验证。但我认为我对证书做错了。我是否需要创建一些其他证书,或者使用证书的方法是错误的?

答案:

请参阅 Robert Bailey的评论。我错过了 Base64 的事情。添加它,我可以成功验证kubernetes集群并显示和部署新的pod等,

1 个答案:

答案 0 :(得分:1)

  

为此,我们需要使用群集进行身份验证。我试过用的只是   用户名和密码方法。我收到以下错误:

查看NodeJS客户端,我看不到提供集群CA证书以及用户名和密码的方法,因此除非您将strictSSL设置为false,否则此错误消息似乎是合理的(您的系统是说它不信任服务器提供的证书,这是正确的,因为它是一个自签名的证书颁发机构)。您可以通过将群集CA证书安装到系统证书根存储中来解决此问题,但使用不同的身份验证方法(并针对NodeJS客户端提交错误)似乎更可取。

  

然后我尝试使用CAcert,ClientCert和   ClientKey。我基本上硬编码键而不是从中导入它   文件。

您是否也尝试导入文件(进行比较)?看起来这是一个解析错误与您指定PEM块的方式,并且库可以更好地从文件而不是内联数据读取块。

  

我的直觉是只有密钥才能进行身份验证。但我觉得   我对证书做错了。我需要创建一些   其他证书或使用证书的方法是   错了?

使用用户名/密码或客户端密钥可以进行身份​​验证。 NodeJS库还允许您指向kubeconfig文件,该文件应允许您指定用户名/密码以及群集CA证书,以便您可以安全地连接到API端点(如果要使用基本身份验证)证书。