async-grpc-xds 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/fixtures/async/grpc/test_interface.rb +79 -0
  4. data/fixtures/async/grpc/test_message.rb +56 -0
  5. data/lib/async/grpc/xds/ads_stream.rb +70 -0
  6. data/lib/async/grpc/xds/client.rb +255 -0
  7. data/lib/async/grpc/xds/context.rb +201 -0
  8. data/lib/async/grpc/xds/control_plane.rb +143 -0
  9. data/lib/async/grpc/xds/discovery_client.rb +356 -0
  10. data/lib/async/grpc/xds/health_checker.rb +88 -0
  11. data/lib/async/grpc/xds/load_balancer.rb +196 -0
  12. data/lib/async/grpc/xds/resource_builder.rb +138 -0
  13. data/lib/async/grpc/xds/resource_cache.rb +55 -0
  14. data/lib/async/grpc/xds/resources.rb +270 -0
  15. data/lib/async/grpc/xds/server.rb +34 -0
  16. data/lib/async/grpc/xds/service.rb +117 -0
  17. data/lib/async/grpc/xds/version.rb +12 -0
  18. data/lib/async/grpc/xds.rb +42 -0
  19. data/lib/envoy/annotations/deprecation_pb.rb +19 -0
  20. data/lib/envoy/config/cluster/v3/circuit_breaker_pb.rb +31 -0
  21. data/lib/envoy/config/cluster/v3/cluster_pb.rb +80 -0
  22. data/lib/envoy/config/cluster/v3/filter_pb.rb +28 -0
  23. data/lib/envoy/config/cluster/v3/outlier_detection_pb.rb +29 -0
  24. data/lib/envoy/config/core/v3/address_pb.rb +38 -0
  25. data/lib/envoy/config/core/v3/backoff_pb.rb +27 -0
  26. data/lib/envoy/config/core/v3/base_pb.rb +68 -0
  27. data/lib/envoy/config/core/v3/cel_pb.rb +24 -0
  28. data/lib/envoy/config/core/v3/config_source_pb.rb +42 -0
  29. data/lib/envoy/config/core/v3/event_service_config_pb.rb +27 -0
  30. data/lib/envoy/config/core/v3/extension_pb.rb +26 -0
  31. data/lib/envoy/config/core/v3/grpc_method_list_pb.rb +27 -0
  32. data/lib/envoy/config/core/v3/grpc_service_pb.rb +45 -0
  33. data/lib/envoy/config/core/v3/health_check_pb.rb +47 -0
  34. data/lib/envoy/config/core/v3/http_service_pb.rb +27 -0
  35. data/lib/envoy/config/core/v3/http_uri_pb.rb +27 -0
  36. data/lib/envoy/config/core/v3/protocol_pb.rb +51 -0
  37. data/lib/envoy/config/core/v3/proxy_protocol_pb.rb +31 -0
  38. data/lib/envoy/config/core/v3/resolver_pb.rb +27 -0
  39. data/lib/envoy/config/core/v3/socket_cmsg_headers_pb.rb +25 -0
  40. data/lib/envoy/config/core/v3/socket_option_pb.rb +31 -0
  41. data/lib/envoy/config/core/v3/substitution_format_string_pb.rb +30 -0
  42. data/lib/envoy/config/core/v3/udp_socket_config_pb.rb +26 -0
  43. data/lib/envoy/config/endpoint/v3/endpoint_components_pb.rb +40 -0
  44. data/lib/envoy/config/endpoint/v3/endpoint_pb.rb +32 -0
  45. data/lib/envoy/config/endpoint/v3/load_report_pb.rb +36 -0
  46. data/lib/envoy/service/discovery/v3/ads_pb.rb +26 -0
  47. data/lib/envoy/service/discovery/v3/aggregated_discovery_service.rb +64 -0
  48. data/lib/envoy/service/discovery/v3/discovery_pb.rb +42 -0
  49. data/lib/envoy/type/matcher/v3/address_pb.rb +25 -0
  50. data/lib/envoy/type/matcher/v3/filter_state_pb.rb +27 -0
  51. data/lib/envoy/type/matcher/v3/http_inputs_pb.rb +29 -0
  52. data/lib/envoy/type/matcher/v3/metadata_pb.rb +28 -0
  53. data/lib/envoy/type/matcher/v3/node_pb.rb +27 -0
  54. data/lib/envoy/type/matcher/v3/number_pb.rb +27 -0
  55. data/lib/envoy/type/matcher/v3/path_pb.rb +27 -0
  56. data/lib/envoy/type/matcher/v3/regex_pb.rb +30 -0
  57. data/lib/envoy/type/matcher/v3/status_code_input_pb.rb +25 -0
  58. data/lib/envoy/type/matcher/v3/string_pb.rb +29 -0
  59. data/lib/envoy/type/matcher/v3/struct_pb.rb +28 -0
  60. data/lib/envoy/type/matcher/v3/value_pb.rb +31 -0
  61. data/lib/envoy/type/metadata/v3/metadata_pb.rb +32 -0
  62. data/lib/envoy/type/v3/hash_policy_pb.rb +26 -0
  63. data/lib/envoy/type/v3/http_pb.rb +22 -0
  64. data/lib/envoy/type/v3/http_status_pb.rb +25 -0
  65. data/lib/envoy/type/v3/percent_pb.rb +26 -0
  66. data/lib/envoy/type/v3/range_pb.rb +25 -0
  67. data/lib/envoy/type/v3/ratelimit_strategy_pb.rb +28 -0
  68. data/lib/envoy/type/v3/ratelimit_unit_pb.rb +22 -0
  69. data/lib/envoy/type/v3/semantic_version_pb.rb +23 -0
  70. data/lib/envoy/type/v3/token_bucket_pb.rb +26 -0
  71. data/lib/envoy.rb +83 -0
  72. data/lib/google/protobuf/any_pb.rb +18 -0
  73. data/lib/google/protobuf/duration_pb.rb +18 -0
  74. data/lib/google/protobuf/empty_pb.rb +18 -0
  75. data/lib/google/protobuf/struct_pb.rb +21 -0
  76. data/lib/google/protobuf/timestamp_pb.rb +18 -0
  77. data/lib/google/protobuf/wrappers_pb.rb +26 -0
  78. data/lib/google/rpc/status_pb.rb +20 -0
  79. data/lib/udpa/annotations/migrate_pb.rb +22 -0
  80. data/lib/udpa/annotations/security_pb.rb +23 -0
  81. data/lib/udpa/annotations/sensitive_pb.rb +19 -0
  82. data/lib/udpa/annotations/status_pb.rb +21 -0
  83. data/lib/udpa/annotations/versioning_pb.rb +20 -0
  84. data/lib/validate/validate_pb.rb +43 -0
  85. data/lib/xds/annotations/v3/status_pb.rb +26 -0
  86. data/lib/xds/core/v3/authority_pb.rb +23 -0
  87. data/lib/xds/core/v3/cidr_pb.rb +24 -0
  88. data/lib/xds/core/v3/collection_entry_pb.rb +26 -0
  89. data/lib/xds/core/v3/context_params_pb.rb +22 -0
  90. data/lib/xds/core/v3/extension_pb.rb +23 -0
  91. data/lib/xds/core/v3/resource_locator_pb.rb +26 -0
  92. data/lib/xds/core/v3/resource_name_pb.rb +24 -0
  93. data/lib/xds/core/v3/resource_pb.rb +24 -0
  94. data/lib/xds/type/matcher/v3/domain_pb.rb +27 -0
  95. data/lib/xds/type/matcher/v3/http_inputs_pb.rb +22 -0
  96. data/lib/xds/type/matcher/v3/ip_pb.rb +28 -0
  97. data/lib/xds/type/matcher/v3/matcher_pb.rb +34 -0
  98. data/lib/xds/type/matcher/v3/range_pb.rb +31 -0
  99. data/lib/xds/type/matcher/v3/regex_pb.rb +25 -0
  100. data/lib/xds/type/matcher/v3/string_pb.rb +27 -0
  101. data/license.md +21 -0
  102. data/plan.md +156 -0
  103. data/proto/envoy/annotations/deprecation.proto +34 -0
  104. data/proto/envoy/annotations/resource.proto +19 -0
  105. data/proto/envoy/config/README.md +3 -0
  106. data/proto/envoy/config/cluster/v3/BUILD +18 -0
  107. data/proto/envoy/config/cluster/v3/circuit_breaker.proto +121 -0
  108. data/proto/envoy/config/cluster/v3/cluster.proto +1407 -0
  109. data/proto/envoy/config/cluster/v3/filter.proto +40 -0
  110. data/proto/envoy/config/cluster/v3/outlier_detection.proto +180 -0
  111. data/proto/envoy/config/core/v3/BUILD +16 -0
  112. data/proto/envoy/config/core/v3/address.proto +214 -0
  113. data/proto/envoy/config/core/v3/backoff.proto +37 -0
  114. data/proto/envoy/config/core/v3/base.proto +662 -0
  115. data/proto/envoy/config/core/v3/cel.proto +63 -0
  116. data/proto/envoy/config/core/v3/config_source.proto +283 -0
  117. data/proto/envoy/config/core/v3/event_service_config.proto +29 -0
  118. data/proto/envoy/config/core/v3/extension.proto +32 -0
  119. data/proto/envoy/config/core/v3/grpc_method_list.proto +33 -0
  120. data/proto/envoy/config/core/v3/grpc_service.proto +355 -0
  121. data/proto/envoy/config/core/v3/health_check.proto +443 -0
  122. data/proto/envoy/config/core/v3/http_service.proto +35 -0
  123. data/proto/envoy/config/core/v3/http_uri.proto +58 -0
  124. data/proto/envoy/config/core/v3/protocol.proto +807 -0
  125. data/proto/envoy/config/core/v3/proxy_protocol.proto +114 -0
  126. data/proto/envoy/config/core/v3/resolver.proto +36 -0
  127. data/proto/envoy/config/core/v3/socket_cmsg_headers.proto +28 -0
  128. data/proto/envoy/config/core/v3/socket_option.proto +108 -0
  129. data/proto/envoy/config/core/v3/substitution_format_string.proto +136 -0
  130. data/proto/envoy/config/core/v3/udp_socket_config.proto +32 -0
  131. data/proto/envoy/config/endpoint/v3/BUILD +16 -0
  132. data/proto/envoy/config/endpoint/v3/endpoint.proto +137 -0
  133. data/proto/envoy/config/endpoint/v3/endpoint_components.proto +229 -0
  134. data/proto/envoy/config/endpoint/v3/load_report.proto +220 -0
  135. data/proto/envoy/config/listener/v3/BUILD +18 -0
  136. data/proto/envoy/config/listener/v3/api_listener.proto +34 -0
  137. data/proto/envoy/config/listener/v3/listener.proto +455 -0
  138. data/proto/envoy/config/listener/v3/listener_components.proto +353 -0
  139. data/proto/envoy/config/listener/v3/quic_config.proto +108 -0
  140. data/proto/envoy/config/listener/v3/udp_listener_config.proto +52 -0
  141. data/proto/envoy/config/route/v3/BUILD +19 -0
  142. data/proto/envoy/config/route/v3/route.proto +172 -0
  143. data/proto/envoy/config/route/v3/route_components.proto +2918 -0
  144. data/proto/envoy/config/route/v3/scoped_route.proto +133 -0
  145. data/proto/envoy/extensions/transport_sockets/tls/v3/BUILD +14 -0
  146. data/proto/envoy/extensions/transport_sockets/tls/v3/cert.proto +12 -0
  147. data/proto/envoy/extensions/transport_sockets/tls/v3/common.proto +597 -0
  148. data/proto/envoy/extensions/transport_sockets/tls/v3/secret.proto +61 -0
  149. data/proto/envoy/extensions/transport_sockets/tls/v3/tls.proto +366 -0
  150. data/proto/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.proto +67 -0
  151. data/proto/envoy/service/README.md +3 -0
  152. data/proto/envoy/service/discovery/v3/BUILD +13 -0
  153. data/proto/envoy/service/discovery/v3/ads.proto +44 -0
  154. data/proto/envoy/service/discovery/v3/discovery.proto +443 -0
  155. data/proto/envoy/type/BUILD +9 -0
  156. data/proto/envoy/type/hash_policy.proto +28 -0
  157. data/proto/envoy/type/http.proto +24 -0
  158. data/proto/envoy/type/http_status.proto +140 -0
  159. data/proto/envoy/type/matcher/v3/address.proto +22 -0
  160. data/proto/envoy/type/matcher/v3/filter_state.proto +33 -0
  161. data/proto/envoy/type/matcher/v3/http_inputs.proto +71 -0
  162. data/proto/envoy/type/matcher/v3/metadata.proto +110 -0
  163. data/proto/envoy/type/matcher/v3/node.proto +29 -0
  164. data/proto/envoy/type/matcher/v3/number.proto +33 -0
  165. data/proto/envoy/type/matcher/v3/path.proto +31 -0
  166. data/proto/envoy/type/matcher/v3/regex.proto +97 -0
  167. data/proto/envoy/type/matcher/v3/status_code_input.proto +23 -0
  168. data/proto/envoy/type/matcher/v3/string.proto +94 -0
  169. data/proto/envoy/type/matcher/v3/struct.proto +91 -0
  170. data/proto/envoy/type/matcher/v3/value.proto +80 -0
  171. data/proto/envoy/type/metadata/v3/metadata.proto +117 -0
  172. data/proto/envoy/type/percent.proto +52 -0
  173. data/proto/envoy/type/range.proto +43 -0
  174. data/proto/envoy/type/semantic_version.proto +24 -0
  175. data/proto/envoy/type/token_bucket.proto +36 -0
  176. data/proto/envoy/type/v3/BUILD +12 -0
  177. data/proto/envoy/type/v3/hash_policy.proto +43 -0
  178. data/proto/envoy/type/v3/http.proto +24 -0
  179. data/proto/envoy/type/v3/http_status.proto +199 -0
  180. data/proto/envoy/type/v3/percent.proto +57 -0
  181. data/proto/envoy/type/v3/range.proto +50 -0
  182. data/proto/envoy/type/v3/ratelimit_strategy.proto +79 -0
  183. data/proto/envoy/type/v3/ratelimit_unit.proto +37 -0
  184. data/proto/envoy/type/v3/semantic_version.proto +27 -0
  185. data/proto/envoy/type/v3/token_bucket.proto +39 -0
  186. data/proto/google/protobuf/any.proto +162 -0
  187. data/proto/google/protobuf/duration.proto +115 -0
  188. data/proto/google/protobuf/empty.proto +51 -0
  189. data/proto/google/protobuf/struct.proto +95 -0
  190. data/proto/google/protobuf/timestamp.proto +145 -0
  191. data/proto/google/protobuf/wrappers.proto +157 -0
  192. data/proto/google/rpc/status.proto +47 -0
  193. data/proto/readme.md +70 -0
  194. data/proto/udpa/annotations/migrate.proto +49 -0
  195. data/proto/udpa/annotations/security.proto +31 -0
  196. data/proto/udpa/annotations/sensitive.proto +14 -0
  197. data/proto/udpa/annotations/status.proto +34 -0
  198. data/proto/udpa/annotations/versioning.proto +17 -0
  199. data/proto/validate/validate.proto +862 -0
  200. data/proto/xds/annotations/v3/migrate.proto +46 -0
  201. data/proto/xds/annotations/v3/security.proto +30 -0
  202. data/proto/xds/annotations/v3/sensitive.proto +16 -0
  203. data/proto/xds/annotations/v3/status.proto +59 -0
  204. data/proto/xds/annotations/v3/versioning.proto +20 -0
  205. data/proto/xds/core/v3/authority.proto +22 -0
  206. data/proto/xds/core/v3/cidr.proto +25 -0
  207. data/proto/xds/core/v3/collection_entry.proto +55 -0
  208. data/proto/xds/core/v3/context_params.proto +23 -0
  209. data/proto/xds/core/v3/extension.proto +26 -0
  210. data/proto/xds/core/v3/resource.proto +29 -0
  211. data/proto/xds/core/v3/resource_locator.proto +118 -0
  212. data/proto/xds/core/v3/resource_name.proto +42 -0
  213. data/proto/xds/type/matcher/v3/cel.proto +37 -0
  214. data/proto/xds/type/matcher/v3/domain.proto +46 -0
  215. data/proto/xds/type/matcher/v3/http_inputs.proto +23 -0
  216. data/proto/xds/type/matcher/v3/ip.proto +53 -0
  217. data/proto/xds/type/matcher/v3/matcher.proto +144 -0
  218. data/proto/xds/type/matcher/v3/range.proto +69 -0
  219. data/proto/xds/type/matcher/v3/regex.proto +46 -0
  220. data/proto/xds/type/matcher/v3/string.proto +71 -0
  221. data/proto/xds/type/v3/cel.proto +77 -0
  222. data/proto/xds/type/v3/range.proto +40 -0
  223. data/proto/xds/type/v3/typed_struct.proto +44 -0
  224. data/readme.md +37 -0
  225. data/releases.md +5 -0
  226. data/xds/Dockerfile.backend +24 -0
  227. data/xds/Dockerfile.control-plane +22 -0
  228. data/xds/backend_server.rb +68 -0
  229. data/xds/docker-compose.yaml +89 -0
  230. data/xds/go.mod +22 -0
  231. data/xds/go.sum +82 -0
  232. data/xds/readme.md +122 -0
  233. data/xds/test/async/grpc/xds/client.rb +294 -0
  234. data/xds/test/async/grpc/xds/control_plane.rb +94 -0
  235. data/xds/test_server.go +355 -0
  236. data/xds/update_protos.sh +123 -0
  237. data.tar.gz.sig +0 -0
  238. metadata +386 -0
  239. metadata.gz.sig +2 -0
@@ -0,0 +1,114 @@
1
+ syntax = "proto3";
2
+
3
+ package envoy.config.core.v3;
4
+
5
+ import "envoy/config/core/v3/substitution_format_string.proto";
6
+
7
+ import "udpa/annotations/status.proto";
8
+ import "validate/validate.proto";
9
+
10
+ option java_package = "io.envoyproxy.envoy.config.core.v3";
11
+ option java_outer_classname = "ProxyProtocolProto";
12
+ option java_multiple_files = true;
13
+ option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
14
+ option (udpa.annotations.file_status).package_version_status = ACTIVE;
15
+
16
+ // [#protodoc-title: Proxy protocol]
17
+
18
+ message ProxyProtocolPassThroughTLVs {
19
+ enum PassTLVsMatchType {
20
+ // Pass all TLVs.
21
+ INCLUDE_ALL = 0;
22
+
23
+ // Pass specific TLVs defined in tlv_type.
24
+ INCLUDE = 1;
25
+ }
26
+
27
+ // The strategy to pass through TLVs. Default is INCLUDE_ALL.
28
+ // If INCLUDE_ALL is set, all TLVs will be passed through no matter the tlv_type field.
29
+ PassTLVsMatchType match_type = 1;
30
+
31
+ // The TLV types that are applied based on match_type.
32
+ // TLV type is defined as uint8_t in proxy protocol. See `the spec
33
+ // <https://www.haproxy.org/download/2.1/doc/proxy-protocol.txt>`_ for details.
34
+ repeated uint32 tlv_type = 2 [(validate.rules).repeated = {items {uint32 {lt: 256}}}];
35
+ }
36
+
37
+ // Represents a single Type-Length-Value (TLV) entry.
38
+ message TlvEntry {
39
+ // The type of the TLV. Must be a uint8 (0-255) as per the Proxy Protocol v2 specification.
40
+ uint32 type = 1 [(validate.rules).uint32 = {lt: 256}];
41
+
42
+ // The static value of the TLV.
43
+ // Only one of ``value`` or ``format_string`` may be set.
44
+ bytes value = 2;
45
+
46
+ // Uses the :ref:`format string <config_access_log_format_strings>` to dynamically
47
+ // populate the TLV value from stream information. This allows dynamic values
48
+ // such as metadata, filter state, or other stream properties to be included in
49
+ // the TLV.
50
+ //
51
+ // For example:
52
+ //
53
+ // .. code-block:: yaml
54
+ //
55
+ // type: 0xF0
56
+ // format_string:
57
+ // text_format_source:
58
+ // inline_string: "%DYNAMIC_METADATA(envoy.filters.network:key)%"
59
+ //
60
+ // The formatted string will be used directly as the TLV value.
61
+ // Only one of ``value`` or ``format_string`` may be set.
62
+ SubstitutionFormatString format_string = 3;
63
+ }
64
+
65
+ message ProxyProtocolConfig {
66
+ enum Version {
67
+ // PROXY protocol version 1. Human readable format.
68
+ V1 = 0;
69
+
70
+ // PROXY protocol version 2. Binary format.
71
+ V2 = 1;
72
+ }
73
+
74
+ // The PROXY protocol version to use. See https://www.haproxy.org/download/2.1/doc/proxy-protocol.txt for details
75
+ Version version = 1;
76
+
77
+ // This config controls which TLVs can be passed to upstream if it is Proxy Protocol
78
+ // V2 header. If there is no setting for this field, no TLVs will be passed through.
79
+ ProxyProtocolPassThroughTLVs pass_through_tlvs = 2;
80
+
81
+ // This config allows additional TLVs to be included in the upstream PROXY protocol
82
+ // V2 header. Unlike ``pass_through_tlvs``, which passes TLVs from the downstream request,
83
+ // ``added_tlvs`` provides an extension mechanism for defining new TLVs that are included
84
+ // with the upstream request. These TLVs may not be present in the downstream request and
85
+ // can be defined at either the transport socket level or the host level to provide more
86
+ // granular control over the TLVs that are included in the upstream request.
87
+ //
88
+ // Host-level TLVs are specified in the ``metadata.typed_filter_metadata`` field under the
89
+ // ``envoy.transport_sockets.proxy_protocol`` namespace.
90
+ //
91
+ // .. literalinclude:: /_configs/repo/proxy_protocol.yaml
92
+ // :language: yaml
93
+ // :lines: 49-57
94
+ // :linenos:
95
+ // :lineno-start: 49
96
+ // :caption: :download:`proxy_protocol.yaml </_configs/repo/proxy_protocol.yaml>`
97
+ //
98
+ // **Precedence behavior**:
99
+ //
100
+ // - When a TLV is defined at both the host level and the transport socket level, the value
101
+ // from the host level configuration takes precedence. This allows users to define default TLVs
102
+ // at the transport socket level and override them at the host level.
103
+ // - Any TLV defined in the ``pass_through_tlvs`` field will be overridden by either the host-level
104
+ // or transport socket-level TLV.
105
+ //
106
+ // If there are multiple TLVs with the same type, only the TLVs from the highest precedence level
107
+ // will be used.
108
+ repeated TlvEntry added_tlvs = 3;
109
+ }
110
+
111
+ message PerHostConfig {
112
+ // Enables per-host configuration for Proxy Protocol.
113
+ repeated TlvEntry added_tlvs = 1;
114
+ }
@@ -0,0 +1,36 @@
1
+ syntax = "proto3";
2
+
3
+ package envoy.config.core.v3;
4
+
5
+ import "envoy/config/core/v3/address.proto";
6
+
7
+ import "udpa/annotations/status.proto";
8
+ import "validate/validate.proto";
9
+
10
+ option java_package = "io.envoyproxy.envoy.config.core.v3";
11
+ option java_outer_classname = "ResolverProto";
12
+ option java_multiple_files = true;
13
+ option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
14
+ option (udpa.annotations.file_status).package_version_status = ACTIVE;
15
+
16
+ // [#protodoc-title: Resolver]
17
+
18
+ // Configuration of DNS resolver option flags which control the behavior of the DNS resolver.
19
+ message DnsResolverOptions {
20
+ // Use TCP for all DNS queries instead of the default protocol UDP.
21
+ bool use_tcp_for_dns_lookups = 1;
22
+
23
+ // Do not use the default search domains; only query hostnames as-is or as aliases.
24
+ bool no_default_search_domain = 2;
25
+ }
26
+
27
+ // DNS resolution configuration which includes the underlying dns resolver addresses and options.
28
+ message DnsResolutionConfig {
29
+ // A list of dns resolver addresses. If specified, the DNS client library will perform resolution
30
+ // via the underlying DNS resolvers. Otherwise, the default system resolvers
31
+ // (e.g., /etc/resolv.conf) will be used.
32
+ repeated Address resolvers = 1 [(validate.rules).repeated = {min_items: 1}];
33
+
34
+ // Configuration of DNS resolver option flags which control the behavior of the DNS resolver.
35
+ DnsResolverOptions dns_resolver_options = 2;
36
+ }
@@ -0,0 +1,28 @@
1
+ syntax = "proto3";
2
+
3
+ package envoy.config.core.v3;
4
+
5
+ import "google/protobuf/wrappers.proto";
6
+
7
+ import "udpa/annotations/status.proto";
8
+
9
+ option java_package = "io.envoyproxy.envoy.config.core.v3";
10
+ option java_outer_classname = "SocketCmsgHeadersProto";
11
+ option java_multiple_files = true;
12
+ option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
13
+ option (udpa.annotations.file_status).package_version_status = ACTIVE;
14
+
15
+ // [#protodoc-title: Socket CMSG headers]
16
+
17
+ // Configuration for socket cmsg headers.
18
+ // See `:ref:CMSG <https://man7.org/linux/man-pages/man3/cmsg.3.html>`_ for further information.
19
+ message SocketCmsgHeaders {
20
+ // cmsg level. Default is unset.
21
+ google.protobuf.UInt32Value level = 1;
22
+
23
+ // cmsg type. Default is unset.
24
+ google.protobuf.UInt32Value type = 2;
25
+
26
+ // Expected size of cmsg value. Default is zero.
27
+ uint32 expected_size = 3;
28
+ }
@@ -0,0 +1,108 @@
1
+ syntax = "proto3";
2
+
3
+ package envoy.config.core.v3;
4
+
5
+ import "udpa/annotations/status.proto";
6
+ import "udpa/annotations/versioning.proto";
7
+ import "validate/validate.proto";
8
+
9
+ option java_package = "io.envoyproxy.envoy.config.core.v3";
10
+ option java_outer_classname = "SocketOptionProto";
11
+ option java_multiple_files = true;
12
+ option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
13
+ option (udpa.annotations.file_status).package_version_status = ACTIVE;
14
+
15
+ // [#protodoc-title: Socket option]
16
+
17
+ // Generic socket option message. This would be used to set socket options that
18
+ // might not exist in upstream kernels or precompiled Envoy binaries.
19
+ //
20
+ // For example:
21
+ //
22
+ // .. code-block:: json
23
+ //
24
+ // {
25
+ // "description": "support tcp keep alive",
26
+ // "state": 0,
27
+ // "level": 1,
28
+ // "name": 9,
29
+ // "int_value": 1,
30
+ // }
31
+ //
32
+ // 1 means SOL_SOCKET and 9 means SO_KEEPALIVE on Linux.
33
+ // With the above configuration, `TCP Keep-Alives <https://www.freesoft.org/CIE/RFC/1122/114.htm>`_
34
+ // can be enabled in socket with Linux, which can be used in
35
+ // :ref:`listener's<envoy_v3_api_field_config.listener.v3.Listener.socket_options>` or
36
+ // :ref:`admin's <envoy_v3_api_field_config.bootstrap.v3.Admin.socket_options>` socket_options etc.
37
+ //
38
+ // It should be noted that the name or level may have different values on different platforms.
39
+ // [#next-free-field: 8]
40
+ message SocketOption {
41
+ option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.SocketOption";
42
+
43
+ enum SocketState {
44
+ // Socket options are applied after socket creation but before binding the socket to a port
45
+ STATE_PREBIND = 0;
46
+
47
+ // Socket options are applied after binding the socket to a port but before calling listen()
48
+ STATE_BOUND = 1;
49
+
50
+ // Socket options are applied after calling listen()
51
+ STATE_LISTENING = 2;
52
+ }
53
+
54
+ // The `socket type <https://linux.die.net/man/2/socket>`_ to apply the socket option to.
55
+ // Only one field should be set. If multiple fields are set, the precedence order will determine
56
+ // the selected one. If none of the fields is set, the socket option will be applied to all socket types.
57
+ //
58
+ // For example:
59
+ // If :ref:`stream <envoy_v3_api_field_config.core.v3.SocketOption.SocketType.stream>` is set,
60
+ // it takes precedence over :ref:`datagram <envoy_v3_api_field_config.core.v3.SocketOption.SocketType.datagram>`.
61
+ message SocketType {
62
+ // The stream socket type.
63
+ message Stream {
64
+ }
65
+
66
+ // The datagram socket type.
67
+ message Datagram {
68
+ }
69
+
70
+ // Apply the socket option to the stream socket type.
71
+ Stream stream = 1;
72
+
73
+ // Apply the socket option to the datagram socket type.
74
+ Datagram datagram = 2;
75
+ }
76
+
77
+ // An optional name to give this socket option for debugging, etc.
78
+ // Uniqueness is not required and no special meaning is assumed.
79
+ string description = 1;
80
+
81
+ // Corresponding to the level value passed to setsockopt, such as IPPROTO_TCP
82
+ int64 level = 2;
83
+
84
+ // The numeric name as passed to setsockopt
85
+ int64 name = 3;
86
+
87
+ oneof value {
88
+ option (validate.required) = true;
89
+
90
+ // Because many sockopts take an int value.
91
+ int64 int_value = 4;
92
+
93
+ // Otherwise it's a byte buffer.
94
+ bytes buf_value = 5;
95
+ }
96
+
97
+ // The state in which the option will be applied. When used in BindConfig
98
+ // STATE_PREBIND is currently the only valid value.
99
+ SocketState state = 6 [(validate.rules).enum = {defined_only: true}];
100
+
101
+ // Apply the socket option to the specified `socket type <https://linux.die.net/man/2/socket>`_.
102
+ // If not specified, the socket option will be applied to all socket types.
103
+ SocketType type = 7;
104
+ }
105
+
106
+ message SocketOptionsOverride {
107
+ repeated SocketOption socket_options = 1;
108
+ }
@@ -0,0 +1,136 @@
1
+ syntax = "proto3";
2
+
3
+ package envoy.config.core.v3;
4
+
5
+ import "envoy/config/core/v3/base.proto";
6
+ import "envoy/config/core/v3/extension.proto";
7
+
8
+ import "google/protobuf/struct.proto";
9
+
10
+ import "envoy/annotations/deprecation.proto";
11
+ import "udpa/annotations/status.proto";
12
+ import "validate/validate.proto";
13
+
14
+ option java_package = "io.envoyproxy.envoy.config.core.v3";
15
+ option java_outer_classname = "SubstitutionFormatStringProto";
16
+ option java_multiple_files = true;
17
+ option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
18
+ option (udpa.annotations.file_status).package_version_status = ACTIVE;
19
+
20
+ // [#protodoc-title: Substitution format string]
21
+
22
+ // Optional configuration options to be used with json_format.
23
+ message JsonFormatOptions {
24
+ // The output JSON string properties will be sorted.
25
+ //
26
+ // .. note::
27
+ // As the properties are always sorted, this option has no effect and is deprecated.
28
+ //
29
+ bool sort_properties = 1
30
+ [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
31
+ }
32
+
33
+ // Configuration to use multiple :ref:`command operators <config_access_log_command_operators>`
34
+ // to generate a new string in either plain text or JSON format.
35
+ // [#next-free-field: 8]
36
+ message SubstitutionFormatString {
37
+ oneof format {
38
+ option (validate.required) = true;
39
+
40
+ // Specify a format with command operators to form a text string.
41
+ // Its details is described in :ref:`format string<config_access_log_format_strings>`.
42
+ //
43
+ // For example, setting ``text_format`` like below,
44
+ //
45
+ // .. validated-code-block:: yaml
46
+ // :type-name: envoy.config.core.v3.SubstitutionFormatString
47
+ //
48
+ // text_format: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n"
49
+ //
50
+ // generates plain text similar to:
51
+ //
52
+ // .. code-block:: text
53
+ //
54
+ // upstream connect error:503:path=/foo
55
+ //
56
+ // Deprecated in favor of :ref:`text_format_source <envoy_v3_api_field_config.core.v3.SubstitutionFormatString.text_format_source>`. To migrate text format strings, use the :ref:`inline_string <envoy_v3_api_field_config.core.v3.DataSource.inline_string>` field.
57
+ string text_format = 1
58
+ [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
59
+
60
+ // Specify a format with command operators to form a JSON string.
61
+ // Its details is described in :ref:`format dictionary<config_access_log_format_dictionaries>`.
62
+ // Values are rendered as strings, numbers, or boolean values as appropriate.
63
+ // Nested JSON objects may be produced by some command operators (e.g. FILTER_STATE or DYNAMIC_METADATA).
64
+ // See the documentation for a specific command operator for details.
65
+ //
66
+ // .. validated-code-block:: yaml
67
+ // :type-name: envoy.config.core.v3.SubstitutionFormatString
68
+ //
69
+ // json_format:
70
+ // status: "%RESPONSE_CODE%"
71
+ // message: "%LOCAL_REPLY_BODY%"
72
+ //
73
+ // The following JSON object would be created:
74
+ //
75
+ // .. code-block:: json
76
+ //
77
+ // {
78
+ // "status": 500,
79
+ // "message": "My error message"
80
+ // }
81
+ //
82
+ google.protobuf.Struct json_format = 2 [(validate.rules).message = {required: true}];
83
+
84
+ // Specify a format with command operators to form a text string.
85
+ // Its details is described in :ref:`format string<config_access_log_format_strings>`.
86
+ //
87
+ // For example, setting ``text_format`` like below,
88
+ //
89
+ // .. validated-code-block:: yaml
90
+ // :type-name: envoy.config.core.v3.SubstitutionFormatString
91
+ //
92
+ // text_format_source:
93
+ // inline_string: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n"
94
+ //
95
+ // generates plain text similar to:
96
+ //
97
+ // .. code-block:: text
98
+ //
99
+ // upstream connect error:503:path=/foo
100
+ //
101
+ DataSource text_format_source = 5;
102
+ }
103
+
104
+ // If set to true, when command operators are evaluated to null,
105
+ //
106
+ // * for ``text_format``, the output of the empty operator is changed from ``-`` to an
107
+ // empty string, so that empty values are omitted entirely.
108
+ // * for ``json_format`` the keys with null values are omitted in the output structure.
109
+ //
110
+ // .. note::
111
+ // This option does not work perfectly with ``json_format`` as keys with ``null`` values
112
+ // will still be included in the output. See https://github.com/envoyproxy/envoy/issues/37941
113
+ // for more details.
114
+ //
115
+ bool omit_empty_values = 3;
116
+
117
+ // Specify a ``content_type`` field.
118
+ // If this field is not set then ``text/plain`` is used for ``text_format`` and
119
+ // ``application/json`` is used for ``json_format``.
120
+ //
121
+ // .. validated-code-block:: yaml
122
+ // :type-name: envoy.config.core.v3.SubstitutionFormatString
123
+ //
124
+ // content_type: "text/html; charset=UTF-8"
125
+ //
126
+ string content_type = 4
127
+ [(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
128
+
129
+ // Specifies a collection of Formatter plugins that can be called from the access log configuration.
130
+ // See the formatters extensions documentation for details.
131
+ // [#extension-category: envoy.formatter]
132
+ repeated TypedExtensionConfig formatters = 6;
133
+
134
+ // If json_format is used, the options will be applied to the output JSON string.
135
+ JsonFormatOptions json_format_options = 7;
136
+ }
@@ -0,0 +1,32 @@
1
+ syntax = "proto3";
2
+
3
+ package envoy.config.core.v3;
4
+
5
+ import "google/protobuf/wrappers.proto";
6
+
7
+ import "udpa/annotations/status.proto";
8
+ import "validate/validate.proto";
9
+
10
+ option java_package = "io.envoyproxy.envoy.config.core.v3";
11
+ option java_outer_classname = "UdpSocketConfigProto";
12
+ option java_multiple_files = true;
13
+ option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
14
+ option (udpa.annotations.file_status).package_version_status = ACTIVE;
15
+
16
+ // [#protodoc-title: UDP socket config]
17
+
18
+ // Generic UDP socket configuration.
19
+ message UdpSocketConfig {
20
+ // The maximum size of received UDP datagrams. Using a larger size will cause Envoy to allocate
21
+ // more memory per socket. Received datagrams above this size will be dropped. If not set
22
+ // defaults to 1500 bytes.
23
+ google.protobuf.UInt64Value max_rx_datagram_size = 1
24
+ [(validate.rules).uint64 = {lt: 65536 gt: 0}];
25
+
26
+ // Configures whether Generic Receive Offload (GRO)
27
+ // <https://en.wikipedia.org/wiki/Large_receive_offload>_ is preferred when reading from the
28
+ // UDP socket. The default is context dependent and is documented where UdpSocketConfig is used.
29
+ // This option affects performance but not functionality. If GRO is not supported by the operating
30
+ // system, non-GRO receive will be used.
31
+ google.protobuf.BoolValue prefer_gro = 2;
32
+ }
@@ -0,0 +1,16 @@
1
+ # DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py.
2
+
3
+ load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package")
4
+
5
+ licenses(["notice"]) # Apache 2
6
+
7
+ api_proto_package(
8
+ deps = [
9
+ "//envoy/annotations:pkg",
10
+ "//envoy/config/core/v3:pkg",
11
+ "//envoy/type/v3:pkg",
12
+ "@com_github_cncf_xds//udpa/annotations:pkg",
13
+ "@com_github_cncf_xds//xds/annotations/v3:pkg",
14
+ "@com_github_cncf_xds//xds/core/v3:pkg",
15
+ ],
16
+ )
@@ -0,0 +1,137 @@
1
+ syntax = "proto3";
2
+
3
+ package envoy.config.endpoint.v3;
4
+
5
+ import "envoy/config/endpoint/v3/endpoint_components.proto";
6
+ import "envoy/type/v3/percent.proto";
7
+
8
+ import "google/protobuf/duration.proto";
9
+ import "google/protobuf/wrappers.proto";
10
+
11
+ import "udpa/annotations/status.proto";
12
+ import "udpa/annotations/versioning.proto";
13
+ import "validate/validate.proto";
14
+
15
+ option java_package = "io.envoyproxy.envoy.config.endpoint.v3";
16
+ option java_outer_classname = "EndpointProto";
17
+ option java_multiple_files = true;
18
+ option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3;endpointv3";
19
+ option (udpa.annotations.file_status).package_version_status = ACTIVE;
20
+
21
+ // [#protodoc-title: Endpoint configuration]
22
+ // Endpoint discovery :ref:`architecture overview <arch_overview_service_discovery_types_eds>`
23
+
24
+ // Each route from RDS will map to a single cluster or traffic split across
25
+ // clusters using weights expressed in the RDS WeightedCluster.
26
+ //
27
+ // With EDS, each cluster is treated independently from a LB perspective, with
28
+ // LB taking place between the Localities within a cluster and at a finer
29
+ // granularity between the hosts within a locality. The percentage of traffic
30
+ // for each endpoint is determined by both its load_balancing_weight, and the
31
+ // load_balancing_weight of its locality. First, a locality will be selected,
32
+ // then an endpoint within that locality will be chose based on its weight.
33
+ // [#next-free-field: 6]
34
+ message ClusterLoadAssignment {
35
+ option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.ClusterLoadAssignment";
36
+
37
+ // Load balancing policy settings.
38
+ // [#next-free-field: 7]
39
+ message Policy {
40
+ option (udpa.annotations.versioning).previous_message_type =
41
+ "envoy.api.v2.ClusterLoadAssignment.Policy";
42
+
43
+ message DropOverload {
44
+ option (udpa.annotations.versioning).previous_message_type =
45
+ "envoy.api.v2.ClusterLoadAssignment.Policy.DropOverload";
46
+
47
+ // Identifier for the policy specifying the drop.
48
+ string category = 1 [(validate.rules).string = {min_len: 1}];
49
+
50
+ // Percentage of traffic that should be dropped for the category.
51
+ type.v3.FractionalPercent drop_percentage = 2;
52
+ }
53
+
54
+ reserved 1, 5;
55
+
56
+ reserved "disable_overprovisioning";
57
+
58
+ // Action to trim the overall incoming traffic to protect the upstream
59
+ // hosts. This action allows protection in case the hosts are unable to
60
+ // recover from an outage, or unable to autoscale or unable to handle
61
+ // incoming traffic volume for any reason.
62
+ //
63
+ // At the client each category is applied one after the other to generate
64
+ // the 'actual' drop percentage on all outgoing traffic. For example:
65
+ //
66
+ // .. code-block:: json
67
+ //
68
+ // { "drop_overloads": [
69
+ // { "category": "throttle", "drop_percentage": 60 }
70
+ // { "category": "lb", "drop_percentage": 50 }
71
+ // ]}
72
+ //
73
+ // The actual drop percentages applied to the traffic at the clients will be
74
+ // "throttle"_drop = 60%
75
+ // "lb"_drop = 20% // 50% of the remaining 'actual' load, which is 40%.
76
+ // actual_outgoing_load = 20% // remaining after applying all categories.
77
+ //
78
+ // Envoy supports only one element and will NACK if more than one element is present.
79
+ // Other xDS-capable data planes will not necessarily have this limitation.
80
+ //
81
+ // In Envoy, this ``drop_overloads`` config can be overridden by a runtime key
82
+ // "load_balancing_policy.drop_overload_limit" setting. This runtime key can be set to
83
+ // any integer number between 0 and 100. 0 means drop 0%. 100 means drop 100%.
84
+ // When both ``drop_overloads`` config and "load_balancing_policy.drop_overload_limit"
85
+ // setting are in place, the min of these two wins.
86
+ repeated DropOverload drop_overloads = 2;
87
+
88
+ // Priority levels and localities are considered overprovisioned with this
89
+ // factor (in percentage). This means that we don't consider a priority
90
+ // level or locality unhealthy until the fraction of healthy hosts
91
+ // multiplied by the overprovisioning factor drops below 100.
92
+ // With the default value 140(1.4), Envoy doesn't consider a priority level
93
+ // or a locality unhealthy until their percentage of healthy hosts drops
94
+ // below 72%. For example:
95
+ //
96
+ // .. code-block:: json
97
+ //
98
+ // { "overprovisioning_factor": 100 }
99
+ //
100
+ // Read more at :ref:`priority levels <arch_overview_load_balancing_priority_levels>` and
101
+ // :ref:`localities <arch_overview_load_balancing_locality_weighted_lb>`.
102
+ google.protobuf.UInt32Value overprovisioning_factor = 3 [(validate.rules).uint32 = {gt: 0}];
103
+
104
+ // The max time until which the endpoints from this assignment can be used.
105
+ // If no new assignments are received before this time expires the endpoints
106
+ // are considered stale and should be marked unhealthy.
107
+ // Defaults to 0 which means endpoints never go stale.
108
+ google.protobuf.Duration endpoint_stale_after = 4 [(validate.rules).duration = {gt {}}];
109
+
110
+ // If true, use the :ref:`load balancing weight
111
+ // <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.load_balancing_weight>` of healthy and unhealthy
112
+ // hosts to determine the health of the priority level. If false, use the number of healthy and unhealthy hosts
113
+ // to determine the health of the priority level, or in other words assume each host has a weight of 1 for
114
+ // this calculation.
115
+ //
116
+ // .. note::
117
+ // This is not currently implemented for
118
+ // :ref:`locality weighted load balancing <arch_overview_load_balancing_locality_weighted_lb>`.
119
+ bool weighted_priority_health = 6;
120
+ }
121
+
122
+ // Name of the cluster. This will be the :ref:`service_name
123
+ // <envoy_v3_api_field_config.cluster.v3.Cluster.EdsClusterConfig.service_name>` value if specified
124
+ // in the cluster :ref:`EdsClusterConfig
125
+ // <envoy_v3_api_msg_config.cluster.v3.Cluster.EdsClusterConfig>`.
126
+ string cluster_name = 1 [(validate.rules).string = {min_len: 1}];
127
+
128
+ // List of endpoints to load balance to.
129
+ repeated LocalityLbEndpoints endpoints = 2;
130
+
131
+ // Map of named endpoints that can be referenced in LocalityLbEndpoints.
132
+ // [#not-implemented-hide:]
133
+ map<string, Endpoint> named_endpoints = 5;
134
+
135
+ // Load balancing policy settings.
136
+ Policy policy = 4;
137
+ }