无法在启用Istio的GKE集群中的2个node.js应用程序之间进行通信

时间:2019-09-11 13:21:52

标签: node.js google-cloud-platform google-kubernetes-engine istio

我已经创建了一个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。

  1. http://nodeservice2.istio-system:8080/restcall
  2. http://nodeservice2:8080/restcall

/ 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');
});

1 个答案:

答案 0 :(得分:1)

几周前我也遇到了同样的问题。我认为问题是您的nodeservice1无法在内部找到nodeservice2,我建议您尝试使用类似nodeservice1.default.svc.cluster.local的方法。尝试使用kubectl get svc列出您的服务。或者,如果您需要查看curl命令中发生的情况,请尝试-cur标志-v标志。