Как настроить прокси-посредник в Minikube для службы gRPC? - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над небольшим API gRCP и столкнулся с небольшой проблемой.Я хочу, чтобы служба gRPC была доступна из внешнего интерфейса React, а это значит, что мне нужен прокси-посредник, который переводит gRPC -> HTTP1 и наоборот.

TL; DR Я думаю, что могу связаться с прокси-посланником, но прокси-сервер неправильно маршрутизирует мою службу.

Я опубликую информацию об услугах здесь и объясню, что происходит ниже.

Файлы yaml K8s (развертывание и обслуживание) для каждого из моих сервисов:
Развертывание моделирования

Файл конфигурации посланника и образ докера
ПосланникКонфиг
Envoy Dockerfile

Вот быстрая проверка работоспособности, чтобы убедиться, что мой сервис работает, без учета прокси посланника:

> kubectl get services
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP          37d
sim-dep           NodePort    10.105.65.65     <none>        9090:30780/TCP   3s
sim-dep-http1     NodePort    10.111.190.170   <none>        8080:30948/TCP   3s
sim-envoy-proxy   NodePort    10.110.178.132   <none>        9091:32068/TCP   17h

> curl <minikube ip>:30948/v1/todo/all
{"api":"v1","toDos":[{}]}

> ./client-grpc -server=192.168.99.100:30780
<success from server, too much to put here but it works>

ИтакНасколько я понимаю, этот прокси-сервер-посланник должен принимать подключения через порт 9091, а затем перенаправлять их на адрес sim-dep (DNS-сервер K8s работает) на порт 9090.
Вот мой код и ошибка при запуске этого наРеагировать приложение на моей машине (не в Minikube).

var todoService = new ToDoServiceClient(
   "http://192.168.99.100:32068/",
   null,
   null
);
var todo = new ToDo();
todo.setTitle("JS Created ToDo");
todo.setDescription("This todo was created with JS client");
var createRequest = new CreateRequest();
createRequest.setApi("v1");
createRequest.setTodo(todo);
var response = await todoService.create(createRequest, {}, <callback>);

Журналы:

upstream connect error or disconnect/reset before headers

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

enter image description here

Я не слишкомконечно, что с этим делать, но похоже, что он достигает посланника, но не достигает службы.Буду признателен за любую помощь в этом!:) И дай мне знать, если я пропустил какую-либо информацию здесь.Спасибо!

1 Ответ

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

Просто разобрался!

Для отладки я запустил прокси-контейнер локально.Я смог подключиться к нему и получил эту ошибку:

unknown service /v1.ToDoService

Я ненавижу себя за это, но эта ошибка, по сути, говорила это по-английски:

I can connect to your server, but I can't find a service called /v1.ToDoService

и послесмешно уставившись на мой код и выполняя проверки работоспособности, я понял, что он искал службу в неправильном месте ... ошибка действительно должна дать немного больше информации, но все, что мне нужно было сделать, это изменить URL-адрес соединения в моемJS клиент для этого:

http://localhost:32068

Без косой черты в конце!Ой!

Теперь, чтобы разобраться с развертыванием этого прокси ...

Итак, в развертывании службы gRPC есть метаданные, которые создают адрес DNS (не уверены, как он называется.) для обслуживания.Так что в моем случае я позвонил в мою службу sim-dep.Если вы выполните здесь руководство по , вы можете выполнить поиск DNS для своей службы, которая в моем случае дала мне

sim-dep.default.svc.cluster.local.

Теперь все, что мне нужно было сделать после обнаружения, это заменить адрес хоста конфига посланника на этот адрес, и все получилось!

...