209 lines
18 KiB
HTML
209 lines
18 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.8.17"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>GRPC C++: xDS Features in gRPC</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">GRPC C++
|
|
 <span id="projectnumber">1.58.0</span>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.17 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */</script>
|
|
<div id="main-nav"></div>
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
</div><!-- top -->
|
|
<div class="PageDoc"><div class="header">
|
|
<div class="headertitle">
|
|
<div class="title">xDS Features in gRPC </div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><p>This document lists the <a href="https://github.com/envoyproxy/data-plane-api/tree/master/envoy/api/v2">xDS</a> features supported in various gRPC language implementations and versions.</p>
|
|
<p>Note that a gRPC client will simply ignore the configuration of a feature it does not support. The gRPC client does not generate a log to indicate that some configuration was ignored. It is impractical to generate a log and keep it up-to-date because xDS has a large number of APIs that gRPC does not support and the APIs keep evolving too. In the case where an xDS field corresponding to a feature is supported but the value configured for that field is not supported, a gRPC client will NACK such a configuration. We recommend reading the <a href="https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md">first gRFC</a> on xDS support in gRPC to understand the design philosophy.</p>
|
|
<p>Not all cluster load balancing policies are supported. A gRPC client will NACK the configuration that contains unsupported cluster load balancing policy. This will cause all cluster configurations to be rejected by the client because the xDS protocol currently requires rejecting all resources in a given response, rather than being able to reject only an individual resource from the response. Due to this limitation, you must ensure that all clients support the required cluster load balancing policy before configuring that policy for a service. For example, if you change the ROUND_ROBIN policy to RING_HASH, you must ensure that all the clients are upgraded to a version that supports RING_HASH.</p>
|
|
<p>The EDS policy will <em>not</em> support <a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/overprovisioning">overprovisioning</a>, which is different from Envoy. Envoy takes the overprovisioning into account in both <a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight">locality-weighted load balancing</a> and <a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/priority">priority failover</a>, but gRPC assumes that the xDS server will update it to redirect traffic when this kind of graceful failover is needed. gRPC will send the <a href="https://github.com/envoyproxy/envoy/pull/10136"><code>envoy.lb.does_not_support_overprovisioning</code> client feature</a> to the xDS server to tell the xDS server that it will not perform graceful failover; xDS server implementations may use this to decide whether to perform graceful failover themselves.</p>
|
|
<p>The EDS policy will not support per-endpoint stats; it will report only per-locality stats.</p>
|
|
<p>An <a href="https://github.com/envoyproxy/envoy/blob/12a4bc430eaf440ceb0d11286cfbd4c16b79cdd1/api/envoy/api/v2/endpoint/endpoint_components.proto#L72"><code>lb_endpoint</code></a> is ignored if the <code>health_status</code> is not HEALTHY or UNKNOWN. The optional <code>load_balancing_weight</code> is always ignored.</p>
|
|
<p>Initially, only <code>google_default</code> channel creds will be supported to authenticate with the xDS server.</p>
|
|
<p>The gRPC language implementations not listed in the table below do not support xDS features.</p>
|
|
<table class="markdownTable">
|
|
<tr class="markdownTableHead">
|
|
<th class="markdownTableHeadNone">Features </th><th class="markdownTableHeadNone">gRFCs </th><th class="markdownTableHeadNone"><a href="https://github.com/grpc/grpc/releases">C++, Python, Ruby, PHP</a> </th><th class="markdownTableHeadNone"><a href="https://github.com/grpc/grpc-java/releases">Java</a> </th><th class="markdownTableHeadNone"><a href="https://github.com/grpc/grpc-go/releases">Go</a> </th><th class="markdownTableHeadNone"><a href="https://github.com/grpc/grpc-node/releases">Node</a> </th></tr>
|
|
<tr class="markdownTableRowOdd">
|
|
<td class="markdownTableBodyNone"><b>xDS Infrastructure in gRPC client channel:</b><ul>
|
|
<li>
|
|
LDS->RDS->CDS->EDS flow</li>
|
|
<li>
|
|
ADS stream</li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md">A27</a> </td><td class="markdownTableBodyNone">v1.30.0 </td><td class="markdownTableBodyNone">v1.30.0 </td><td class="markdownTableBodyNone">v1.30.0 </td><td class="markdownTableBodyNone">v1.2.0 </td></tr>
|
|
<tr class="markdownTableRowEven">
|
|
<td class="markdownTableBodyNone"><b>Load Balancing:</b><ul>
|
|
<li>
|
|
<a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-virtualhost">Virtual host</a> domains matching</li>
|
|
<li>
|
|
Only default path ("" or "/") matching</li>
|
|
<li>
|
|
Priority-based weighted round-robin locality picking</li>
|
|
<li>
|
|
Round-robin endpoint picking within locality</li>
|
|
<li>
|
|
<a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-routeaction">Cluster</a> route action</li>
|
|
<li>
|
|
Client-side Load reporting via <a href="https://github.com/envoyproxy/data-plane-api/blob/master/envoy/service/load_stats/v3/lrs.proto">LRS</a></li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md">A27</a> </td><td class="markdownTableBodyNone">v1.30.0 </td><td class="markdownTableBodyNone">v1.30.0 </td><td class="markdownTableBodyNone">v1.30.0 </td><td class="markdownTableBodyNone">v1.2.0 </td></tr>
|
|
<tr class="markdownTableRowOdd">
|
|
<td class="markdownTableBodyNone">Request matching based on:<ul>
|
|
<li>
|
|
<a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-routematch">Path</a> (prefix, full path and safe regex)<ul>
|
|
<li>
|
|
<a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-routematch">case_sensitive</a> must be true else config is NACKed</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-headermatcher">Headers</a></li>
|
|
</ul>
|
|
Request routing to multiple clusters based on <a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-weightedcluster">weights</a> </td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A28-xds-traffic-splitting-and-routing.md">A28</a> </td><td class="markdownTableBodyNone">v1.31.0 </td><td class="markdownTableBodyNone">v1.31.0 </td><td class="markdownTableBodyNone">v1.31.0 </td><td class="markdownTableBodyNone">v1.3.0 </td></tr>
|
|
<tr class="markdownTableRowEven">
|
|
<td class="markdownTableBodyNone">Case insensitive prefix/full path matching:<ul>
|
|
<li>
|
|
<a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-routematch">case_sensitive</a> can be true or false</li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"></td><td class="markdownTableBodyNone">v1.34.0 </td><td class="markdownTableBodyNone">v1.34.0 </td><td class="markdownTableBodyNone">v1.34.0 </td><td class="markdownTableBodyNone">v1.3.0 </td></tr>
|
|
<tr class="markdownTableRowOdd">
|
|
<td class="markdownTableBodyNone">Support for <a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/api">xDS v3 APIs</a> </td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A30-xds-v3.md">A30</a> </td><td class="markdownTableBodyNone">v1.36.0 </td><td class="markdownTableBodyNone">v1.36.0 </td><td class="markdownTableBodyNone">v1.36.0 </td><td class="markdownTableBodyNone">v1.4.0 </td></tr>
|
|
<tr class="markdownTableRowEven">
|
|
<td class="markdownTableBodyNone">Support for <a href="https://www.envoyproxy.io/docs/envoy/latest/api/api_supported_versions">xDS v2 APIs</a> </td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A30-xds-v3.md#details-of-the-v2-to-v3-transition">A27</a> </td><td class="markdownTableBodyNone">< v1.51.0 </td><td class="markdownTableBodyNone">< v1.53.0 </td><td class="markdownTableBodyNone">TBA </td><td class="markdownTableBodyNone">< v1.8.0 </td></tr>
|
|
<tr class="markdownTableRowOdd">
|
|
<td class="markdownTableBodyNone"><a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-routeaction-maxstreamduration">Maximum Stream Duration</a>:<ul>
|
|
<li>
|
|
Only max_stream_duration is supported.</li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A31-xds-timeout-support-and-config-selector.md">A31</a> </td><td class="markdownTableBodyNone">v1.37.1 </td><td class="markdownTableBodyNone">v1.37.1 </td><td class="markdownTableBodyNone">v1.37.0 </td><td class="markdownTableBodyNone">v1.4.0 </td></tr>
|
|
<tr class="markdownTableRowEven">
|
|
<td class="markdownTableBodyNone"><a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/circuit_breaker.proto">Circuit Breaking</a>:<ul>
|
|
<li>
|
|
Only max_requests is supported.</li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A32-xds-circuit-breaking.md">A32</a> </td><td class="markdownTableBodyNone">v1.37.1 (N/A for PHP) </td><td class="markdownTableBodyNone">v1.37.1 </td><td class="markdownTableBodyNone">v1.37.0 </td><td class="markdownTableBodyNone">v1.4.0 </td></tr>
|
|
<tr class="markdownTableRowOdd">
|
|
<td class="markdownTableBodyNone"><a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/fault/v3/fault.proto">Fault Injection</a>:<br />
|
|
Only the following fields are supported:<ul>
|
|
<li>
|
|
delay</li>
|
|
<li>
|
|
abort</li>
|
|
<li>
|
|
max_active_faults</li>
|
|
<li>
|
|
headers</li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A33-Fault-Injection.md">A33</a> </td><td class="markdownTableBodyNone">v1.37.1 </td><td class="markdownTableBodyNone">v1.37.1 </td><td class="markdownTableBodyNone">v1.37.0 </td><td class="markdownTableBodyNone">v1.4.0 </td></tr>
|
|
<tr class="markdownTableRowEven">
|
|
<td class="markdownTableBodyNone"><a href="https://github.com/envoyproxy/envoy/blob/main/api/envoy/service/status/v3/csds.proto">Client Status Discovery Service</a> </td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A40-csds-support.md">A40</a> </td><td class="markdownTableBodyNone">v1.37.1 (C++)<br />
|
|
v1.38.0 (Python) </td><td class="markdownTableBodyNone">v1.37.1 </td><td class="markdownTableBodyNone">v1.37.0 </td><td class="markdownTableBodyNone">v1.5.0 </td></tr>
|
|
<tr class="markdownTableRowOdd">
|
|
<td class="markdownTableBodyNone"><a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers#ring-hash">Ring hash</a> load balancing policy:<br />
|
|
Only the following <a href="https://github.com/envoyproxy/envoy/blob/2443032526cf6e50d63d35770df9473dd0460fc0/api/envoy/config/route/v3/route_components.proto#L706">policy specifiers</a> are supported:<ul>
|
|
<li>
|
|
header</li>
|
|
<li>
|
|
filter_state with key <code>io.grpc.channel_id</code></li>
|
|
</ul>
|
|
Only <a href="https://github.com/envoyproxy/envoy/blob/2443032526cf6e50d63d35770df9473dd0460fc0/api/envoy/config/cluster/v3/cluster.proto#L383"><code>XX_HASH</code></a> function is supported. </td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A42-xds-ring-hash-lb-policy.md">A42</a> </td><td class="markdownTableBodyNone">v1.40.0<br />
|
|
(C++ and Python) </td><td class="markdownTableBodyNone">v1.40.1 </td><td class="markdownTableBodyNone">1.41.0 </td><td class="markdownTableBodyNone"></td></tr>
|
|
<tr class="markdownTableRowEven">
|
|
<td class="markdownTableBodyNone"><a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-retrypolicy">Retry</a>:<br />
|
|
Only the following fields are supported:<ul>
|
|
<li>
|
|
retry_on for the following conditions: cancelled, deadline-exceeded, internal, resource-exhausted, and unavailable.</li>
|
|
<li>
|
|
num_retries</li>
|
|
<li>
|
|
retry_back_off</li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A44-xds-retry.md">A44</a> </td><td class="markdownTableBodyNone">v1.40.0<br />
|
|
(C++ and Python) </td><td class="markdownTableBodyNone">v1.40.1 </td><td class="markdownTableBodyNone">1.41.0 </td><td class="markdownTableBodyNone"></td></tr>
|
|
<tr class="markdownTableRowOdd">
|
|
<td class="markdownTableBodyNone"><a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/security/security">Security</a>:<br />
|
|
Uses <a href="https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md#certificate-provider-plugin-framework">certificate providers</a> instead of SDS </td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md">A29</a> </td><td class="markdownTableBodyNone">v1.41.0<br />
|
|
(C++ and Python) </td><td class="markdownTableBodyNone">v1.41.0 </td><td class="markdownTableBodyNone">1.41.0 </td><td class="markdownTableBodyNone"></td></tr>
|
|
<tr class="markdownTableRowEven">
|
|
<td class="markdownTableBodyNone"><a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/rbac/v3/rbac.proto">Authorization (RBAC)</a>:<br />
|
|
<ul>
|
|
<li>
|
|
<code>LOG</code> action has no effect</li>
|
|
<li>
|
|
CEL unsupported and rejected</li>
|
|
</ul>
|
|
</td><td class="markdownTableBodyNone"><a href="https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md">A41</a> </td><td class="markdownTableBodyNone">v1.51.0<br />
|
|
(C++ and Python) </td><td class="markdownTableBodyNone">v1.42.0 </td><td class="markdownTableBodyNone">1.42.0 </td><td class="markdownTableBodyNone"></td></tr>
|
|
</table>
|
|
<p><a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/outlier">Outlier Detection</a>:<br />
|
|
Only the following detection types are supported:</p><ul>
|
|
<li>
|
|
Success Rate</li>
|
|
<li>
|
|
Failure Percentage</li>
|
|
</ul>
|
|
<p>| <a href="https://github.com/grpc/proposal/blob/master/A50-xds-outlier-detection.md">A50</a> | v1.51.0 | v1.49.0 | v1.50.0 | v1.7.0 | | <a href="https://github.com/envoyproxy/envoy/blob/57be3189ffa3372b34e9480d1f02b2d165e49077/api/envoy/config/cluster/v3/cluster.proto#L1208">Custom Load Balancer Configuration</a> | <a href="https://github.com/grpc/proposal/blob/master/A52-xds-custom-lb-policies.md">A52</a> | v1.55.0 | v1.47.0 | | | <a href="https://github.com/cncf/xds/blob/main/proposals/TP1-xds-transport-next.md">xDS Federation</a> | <a href="https://github.com/grpc/proposal/blob/master/A47-xds-federation.md">A47</a> | v1.55.0 | | | | <a href="https://github.com/envoyproxy/envoy/blob/a6d46b6ac4750720eec9a49abe701f0df9bf8e0a/api/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.proto#L36">Client-Side Weighted Round Robin LB Policy</a> | <a href="https://github.com/grpc/proposal/blob/master/A58-client-side-weighted-round-robin-lb-policy.md">A58</a> | v1.55.0 | | | | <a href="https://github.com/envoyproxy/envoy/blob/3fe4b8d335fa339ef6f17325c8d31f87ade7bb1a/api/envoy/config/route/v3/route_components.proto#L2280">StringMatcher for Header Matching</a> | <a href="https://github.com/grpc/proposal/blob/master/A63-xds-string-matcher-in-header-matching.md">A63</a> | v1.56.0 | | | | mTLS Credentials in xDS Bootstrap File | <a href="https://github.com/grpc/proposal/blob/master/A65-xds-mtls-creds-in-bootstrap.md">A65</a> | v1.57.0 | | | | </p>
|
|
</div></div><!-- contents -->
|
|
</div><!-- PageDoc -->
|
|
<!-- start footer part -->
|
|
<hr class="footer"/><address class="footer"><small>
|
|
Generated on Wed Sep 6 2023 16:09:16 for GRPC C++ by  <a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
</a> 1.8.17
|
|
</small></address>
|
|
</body>
|
|
</html>
|