#google-kubernetes-engine #grpc
#google-kubernetes-engine #grpc
Вопрос:
Что я пытаюсь сделать с GKE, так это:
GRPC-клиент -> L4 LB -> GRPC-сервер (внутри модуля)
Я попытался и получил «отказано в подключении» на стороне клиента.
Он отлично работает с ESPv1 (Extensible Service Proxy — компонент конечной точки Google, который использует nginx).
Я хотел бы знать, удалось ли кому-нибудь это сделать, или у вас есть объяснение, почему он не может работать без ESP.
При необходимости я могу опубликовать свою конфигурацию.
Обновить
Было предложено решение с использованием nginx. ESP также включает nginx, поэтому я хотел бы знать, возможно ли избежать nginx или любого прокси / обратного прокси-сервера, и если нет, то почему?
Что делает nginx, чтобы заставить grpc-соединение работать?
Комментарии:
1. Вы пытались исследовать это с помощью
tcpdump
на вашем GRPC-сервере? Вероятно, это могло бы многое рассказать вам о причине отказа в подключении.2. @mario да, я это сделал, но я собираюсь перепроверить. Я думаю, если есть трафик, он должен поступать с L4 LB, верно?
3. Да, я полагаю, что так.
Ответ №1:
Он должен (!?) работать без прокси. Я уверен, что сделал это, но я не смог найти сообщение в блоге, которое я написал, чтобы поделиться с вами. Я не помню очевидной причины, по которой L4 LB не работал бы (L7 — это другая история из-за HTTP / 2).
Безусловно, нет никаких требований к использованию NGINX; последняя версия ESP (как и со многими другими прокси в Google) теперь использует Envoy.
Можете ли вы подключиться к одному из модулей сервиса напрямую? Вы можете попробовать kubectl port-forward
подключиться к pod, а затем использовать эту конечную точку: порт непосредственно с клиента.
Возможно, вы захотите использовать grpcurl
, чтобы избежать необходимости использовать свой клиент для тестирования.
Использование балансировщика нагрузки L4, конечно, не обеспечивает балансировку нагрузки gRPC.
Комментарии:
1. На самом деле я пробовал с телеприсутствием, это похоже на переадресацию портов. И это работает таким образом. В настоящее время я получаю connection_refused на порту 443 извне. Также я заметил, что L4 фактически обеспечивает мне балансировку нагрузки путем подключения к случайному модулю. После этого соединение остается на этом модуле, и это нормально
2. Также я использую Espv1, который использует nginx.
3.
:443
предполагает TLS, и это может быть проблематично. ESP завершает TLS-соединение, но L4 этого не делает (насколько мне известно). Вы спросили, можете ли вы отказаться от ESP, и я думаю, что вы можете. Я собираюсь попробовать протестировать это сейчас.4. На самом деле я перенес настройку TLS на GRPC-сервер внутри модуля. Это работает с телеприсутствием, но не внутри GKE. Это не mTLS, просто TLS, с сертификатом домена.
5. Хммм… Я создал небезопасный сервис, и он работает через L4. Если у меня будет больше времени, я попробую обеспечить безопасность сервиса.