Если к внутреннему сервису gRPC нужно обращаться напрямую, gRPC-Go предоставляет для этого пути опцию подключения:

conn, err := grpc.NewClient(
    "dns:///rpc.internal.example:443",
    grpc.WithTransportCredentials(transportCredentials),
    grpc.WithNoProxy(),
)

Импорт grpc — это google.golang.org/grpc. transportCredentials — существующая конфигурация credentials.TransportCredentials приложения. Обработайте err и закройте conn в обычном жизненном цикле клиента.

WithNoProxy отключает использование прокси для этого ClientConn. Другие клиенты и прокси-окружение процесса остаются без изменений. Пункт назначения должен быть доступен напрямую из сети приложения.

Опция игнорируется, если WithDialer или WithContextDialer задаёт собственный путь подключения; решения о маршрутизации принимает этот dialer. API верхнего уровня помечен как экспериментальный, поэтому сверьте его с установленной версией grpc-go.

NewClient создаёт клиентский канал, не доказывая, что сетевое соединение установлено. Следующий RPC или результат состояния соединения даёт это подтверждение. Обход прокси не требует отключения TLS.

Похожие статьи