gRPC-web не может подключиться к серверу (проблема с настройкой прокси) - PullRequest
2 голосов
/ 15 марта 2019

Я пытаюсь создать веб-клиент grpc для подключения к моему серверу grpc. У меня уже есть мой сервер grpc, написанный на C ++, и он хорошо работает с клиентом C #, все в порядке и проверено. Сейчас я пытаюсь создать JS-клиент для подключения к моему сервису. Так что я ожидаю, что верну мне простой «привет», но я получу следующее: «net :: ERR_CONNECTION_REFUSED».

Я исполнил этот урок: Привет, мир , а также попробовал его: fron proxy из grpc-web

Я успешно сгенерировал прото-файлы. мой клиент выглядит так:

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

что меня смущает, так это прокси, который мне нужно запустить в докере, поэтому я подозреваю, что он испорчен. Мой файл 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

и после запуска моего сервера запустите эту докерскую программу и запустите мой веб:

py -m http.server 8081

Я получаю ту ошибку, о которой упоминал в начале. Я думал о блокировке CORS, но она включена в файле посланника. Я действительно оценил бы любую помощь.

@@ Edit

Итак, я также попробовал envoy-front , и у меня проблемы с инструкцией curl в этом примере. В основном я получаю: Invoke-WebRequest : Unable to connect to the remote server. Я подозреваю, что это связано с моим докером, но я не знаю что. О, а также я использую Docker-Toolbox, а не Docker для Windows, потому что моя система не поддерживает Docker для Windows.

1 Ответ

0 голосов
/ 19 марта 2019

Я понял это без использования докера или любой виртуальной машины, выглядит намного чище для меня. Постараюсь опубликовать завтра.

EDIT
Итак, это занимает немного больше времени, но если вы заинтересованы в моем решении, взгляните на мой репозиторий github , где я буду публиковать решения как gRPC, так и gRPC-web.

...