我在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客户端使用令牌进行调用,当我部署到容器时,它返回了套接字连接错误
您使用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在他的answer中提到这一点,
错过了传递此环境变量node_tls_unauthorized = 0,这导致身份验证问题