grpcwebproxy: поток прерывается RST_STREAM
Я работаю над рабочим примером gRPC-web, используя прокси, предоставленный Improbable. Мой сервер и сам прокси-сервер работают в контейнерах Docker и подключены к сети. Вот Dockerfile, который я использую для прокси:
from golang:alpine as builder
RUN apk --no-cache add git
RUN go get -u github.com/improbable-eng/grpc-web/go/grpcwebproxy
from alpine
RUN apk --no-cache add ca-certificates
WORKDIR /
COPY --from=builder /go/bin/grpcwebproxy .
COPY localhost.crt localhost.key /
CMD ["/grpcwebproxy"]
И выдержка из файла Compose:
app-server-grpcwebproxy:
build:
context: grpcwebproxy
ports:
- "8080:8080"
- "8443:8443"
links:
- app-server
command: /grpcwebproxy --backend_addr=stern-server:9000 --server_tls_cert_file=localhost.crt --server_tls_key_file=localhost.key
Когда я запускаю контейнеры, вывод журнала от прокси-сервера, кажется, указывает, что он подключился к серверу gRPC:
time="2018-02-27T18:22:42Z" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc42016e370, CONNECTING" system=system
time="2018-02-27T18:22:42Z" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc42016e370, READY" system=system
Но когда я отправляю gRPC-веб-запрос на прокси, он возвращает мне ошибку.
$ curl 'https://localhost:8443/helloworld.Greeter/SayHello' -H 'content-type: application/grpc-web+proto' -H 'x-grpc-web: 1' -H 'authority: localhost:8443' --data-binary $'\x00\x00\x00\x00\x04\n\x02yo' --insecure -v
...
< HTTP/2 200
< access-control-expose-headers: Grpc-Message, Vary, Content-Type, Grpc-Status
< content-type: application/grpc+proto
< grpc-message: stream terminated by RST_STREAM with error code: INTERNAL_ERROR
< grpc-status: 13
....
С env vars GRPC_TRACE=all
а также GRPC_VERBOSITY=DEBUG
установить, я могу видеть эту строку в выводе сервера:
D0227 20:00:30.713151575 1 call.cc:753] 1: {"created":"@1519761630.713126987","description":"Error received from peer","file":"../deps/grpc/src/core/lib/surface/call.cc","file_line":1148,"grpc_message":"Stream removed","grpc_status":2}
Я не вижу никакой другой явно значимой информации, но полный вывод журнала находится здесь: https://github.com/improbable-eng/grpc-web/files/1764477/log.txt
Простое клиентское приложение grpc-node может подключаться к серверу.
var grpc = require('grpc');
var messages = require('./src/_proto/helloworld_pb');
var services = require('./src/_proto/helloworld_grpc_pb');
var client = new services.GreeterClient('localhost:9000', grpc.credentials.createInsecure());
var request = new messages.HelloRequest();
var user = 'world';
request.setName(user);
client.sayHello(request, function(err, response) {
console.log(response.getMessage());
});
Что выводит Hello world
без проблем, что говорит о том, что с моим сервером все в порядке. О чем говорят эти ошибки? Может ли быть проблема конфигурации или несоответствие версии на чем-то?