我已经创建了一个GKE集群,并在其中部署了两个名为 nodeservice1 和 nodeservice2 的node.js基本应用,其中仅打开 nodeservice1 世界(允许未经身份验证的呼叫= true)。
我的 nodeservice1 正在内部通过restcall调用 nodeservice2 ,并返回 nodeservice2 返回的内容。
我可以通过curl命令调用 nodeservice1 ,它工作正常。当我到达端点../restcall
(实际上在内部调用 nodeservice2 )时,它仅返回HTTPS 200 OK
。
注意:这两个应用程序均处于“云运行”状态。上面的设置
有帮助吗? TIA
我曾尝试从 nodeservice1 中访问以下URL。也尝试了curl命令: curl -v -H“主机:nodeservice1.istio-system.example.com” 34.80.18.249/restcall 其中34.80.18.249是我的istio入口负载平衡器IP。
/ restcall内部调用nodeservice2
当我检查正在运行的服务时,我的nodeservice1和nodeservice2的类型为= ExternalName。但是我公开了nodeservice1 = Loadbalancer和Nodeservice2 = ClusterIP。是我缺少的东西吗?
Nodeservice1的server.js文件:
var express = require("express");
var http = require('http');
var app = express();
app.get('/',function(req, res, next){
res.send('Hurrah !!! nodeservice1 is up and running !!!');
});
app.get('/restcall',function(req, res, next){
var data = '';
console.log('inside /restcall in nodeservice1');
http.get('http://nodeservice1.default.example.com:8080/restcall',(resp) =>{
console.log('inside response');
resp.on('data', function (chunk) {
data += chunk;
console.log('inside end restcall');
});
resp.on('end', () => {
res.send(data);
console.log('inside end restcall');
console.log(data);
})
})
})
app.listen('8080',function(){
console.log('Node service 2 server listening on port 8080');
});
Nodeservice2的server.js
var express = require("express");
var http = require('http');
var app = express();
app.get('/',function(req, res){
res.send('Hurrah !!! nodeservice2 is up and running !!!');
});
app.get('/restcall',function(req, res, next){
console.log('inside /restcall in nodeservice2');
res.send('restcall api successfull from nodeservice2 !!!');
});
app.listen('8080',function(){
console.log('Node service 2 server listening on port 8080');
});
答案 0 :(得分:1)
几周前我也遇到了同样的问题。我认为问题是您的nodeservice1无法在内部找到nodeservice2,我建议您尝试使用类似nodeservice1.default.svc.cluster.local的方法。尝试使用kubectl get svc列出您的服务。或者,如果您需要查看curl命令中发生的情况,请尝试-cur标志-v标志。