3

我正在尝试创建一个 grpc-web 客户端来连接到我的 grpc 服务器。我已经有了用 C++ 编写的 grpc 服务器,它与 C# 客户端配合得很好,一切正常并经过测试。现在我正在尝试创建一个 js 客户端来连接到我的服务。所以我期望返回一个简单的“你好”给我,但我得到的是:“net::ERR_CONNECTION_REFUSED”。

我已经放弃了本教程:hello world,还尝试了一个:来自 grpc-web 的 fron proxy

我已经成功生成了原型文件。我的客户看起来像这样:

const {HelloRequest, HelloResponse} = require('./definitions_pb.js');
const {GreeterClient} = require('./definitions_grpc_web_pb.js');

var echoService = new GreeterClient('http://192.168.88.150:8080');

var request = new HelloRequest();
request.setName('Mark');

echoService.sayHello(request, {}, function(err, response) {
  // ...
});

我感到困惑的是我必须在 docker 中运行的代理,所以我怀疑它搞砸了。我的 envoy.yaml 文件如下所示:

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9091 }

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route:
                  cluster: greeter_service
                  max_grpc_timeout: 0s
              cors:
                allow_origin:
                - "*"
                allow_methods: GET, PUT, DELETE, POST, OPTIONS
                allow_headers: keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout
                max_age: "1728000"
                expose_headers: custom-header-1,grpc-status,grpc-message
                enabled: true
          http_filters:
          - name: envoy.grpc_web
          - name: envoy.cors
          - name: envoy.router
  clusters:
  - name: greeter_service
    connect_timeout: 0.25s
    type: logical_dns
    http2_protocol_options: {}
    lb_policy: round_robin
    hosts: [{ socket_address: { address: 192.168.88.150, port_value: 50051 }}]

和 Docker 文件:

 FROM envoyproxy/envoy:latest
COPY ./envoy.yaml /etc/envoy/envoy.yaml
CMD /usr/local/bin/envoy -c /etc/envoy/envoy.yaml

我使用“ npx webpack client.js”来创建 main.js。

要启动特使代理,我按照教程中的说明进行操作:

>> docker build -t envoy -f ./Dockerfile .
>> docker run -d -p 8080:8080 envoy

在启动我的服务器后,运行 docker 的东西并启动我的网络:

py -m http.server 8081

我得到了我一开始提到的那个错误。我在考虑 CORS 阻塞,但它在特使文件中启用。我真的很感激任何帮助。

@@编辑

所以我也尝试过envoy-frontcurl ,但我在那个例子中的指令有问题。主要是我得到:Invoke-WebRequest : Unable to connect to the remote server。我怀疑它与我的 docker 机器有关,但我不知道是什么。哦,我使用的是 Docker-Toolbox 而不是 Docker for Windows,因为 mym 系统不支持 Docker for Windows。

4

0 回答 0