我在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客户端使用令牌进行调用,当我部署到容器时,它返回套接字连接错误
答案 0 :(得分:0)
您使用https协议调用api,其中很可能证书未由外部CA签名。这个是正常的。在发出由其颁发的证书保护的服务之前,您应确保信任该CA。大多数kube配置程序都会为您提供CA证书,以便您可以将其添加到您的可信证书中,或者在某个参数中提供给客户。
另一方面,当你在你的kube群集中呼叫api时,应该可以访问http://kubernetes.default/api/v1/nodes
之类的网址。
答案 1 :(得分:0)
尝试使用CA证书,您将在以下路径中获取
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Radek Pieczonka在他的answer,
中提到了这一点答案 2 :(得分:0)
错过了传递此环境变量node_tls_unauthorized = 0导致身份验证问题