我在Kubernetes容器中运行 node.js
服务 . 我的服务使用服务帐户内的令牌从POD内部调用API服务器 . 我的代码是这样的
var fs = require('fs');
var tokenFile ='/var/run/secrets/kubernetes.io/serviceaccount/token';
var restCall = function(serviceUrl,reqMethod,callback){
var token = "";
fs.readFile(tokenFile, 'utf8', function(err, data) {
if (err) throw err;
token ='Bearer '+data;
});
var serviceUrl = https://<clusterName>/api/v1/nodes
var options = {
url: serviceUrl,
headers: {
'Content-Type': 'application/json',
'Authorization': token
},
method: reqMethod
};
我收到此错误作为回应
证书链中的自签名证书 .
我可以通过rest客户端使用令牌进行调用,当我部署到容器时,它返回了套接字连接错误
3 回答
您使用https协议调用api,其中很可能证书未由外部CA签名 . 这个是正常的 . 在发出由其颁发的证书保护的服务之前,您应确保信任该CA . 大多数kube配置程序都会为您提供CA证书,以便您可以将其添加到受信任的证书中,或者在某些参数中提供给客户端 .
另一方面,当你在你的kube集群中调用api时,应该可以访问像
http://kubernetes.default/api/v1/nodes
这样的URL .尝试使用CA证书,您将在以下路径中获取它
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Radek Pieczonka在他的_1707203中提到了这一点,
错过了传递此环境变量node_tls_unauthorized = 0,这导致身份验证问题