gRPC
The gRPC runtime for some languages is relatively immature. See below for an overview of filters that can help bring gRPC to more languages.
gRPC-Web is supported by a that allows a gRPC-Web client to send requests to Envoy over HTTP/1.1 and get proxied to a gRPC server. It’s under active development and is expected to be the successor to the gRPC bridge filter.
Envoy supports two gRPC bridges:
which allows gRPC requests to be sent to Envoy over HTTP/1.1. Envoy then translates the requests to HTTP/2 for transport to the target server. The response is translated back to HTTP/1.1. When installed, the bridge filter gathers per RPC statistics in addition to the standard array of global HTTP statistics.
grpc_http1_reverse_bridge filter which allows gRPC requests to be sent to Envoy and then translated to HTTP/1.1 when sent to the upstream. The response is then converted back into gRPC when sent to the downstream. This filter can also optionally manage the gRPC frame header, allowing the upstream to not have to be gRPC aware at all.
gRPC services
When specifying gRPC services, it’s necessary to specify the use of either the Envoy gRPC client or the . We discuss the tradeoffs in this choice below.
The Envoy gRPC client is a minimal custom implementation of gRPC that makes use of Envoy’s HTTP/2 upstream connection management. Services are specified as regular Envoy clusters, with regular treatment of , endpoint discovery//load reporting, circuit breaking, , outlier detection. They share the same mechanism as the Envoy data plane. Similarly, cluster statistics are available for gRPC services. Since the client is minimal, it does not include advanced gRPC features such as or gRPC-LB lookaside.
The Google C++ gRPC client is based on the reference implementation of gRPC provided by Google at . It provides advanced gRPC features that are missing in the Envoy gRPC client. The Google C++ gRPC client performs its own load balancing, retries, timeouts, endpoint management, etc, independent of Envoy’s cluster management. The Google C++ gRPC client also supports custom authentication plugins.