bootstrap.proto 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. syntax = "proto3";
  2. package envoy.config.bootstrap.v3;
  3. import "envoy/config/accesslog/v3/accesslog.proto";
  4. import "envoy/config/cluster/v3/cluster.proto";
  5. import "envoy/config/core/v3/address.proto";
  6. import "envoy/config/core/v3/base.proto";
  7. import "envoy/config/core/v3/config_source.proto";
  8. import "envoy/config/core/v3/event_service_config.proto";
  9. import "envoy/config/core/v3/extension.proto";
  10. import "envoy/config/core/v3/resolver.proto";
  11. import "envoy/config/core/v3/socket_option.proto";
  12. import "envoy/config/listener/v3/listener.proto";
  13. import "envoy/config/metrics/v3/stats.proto";
  14. import "envoy/config/overload/v3/overload.proto";
  15. import "envoy/config/trace/v3/http_tracer.proto";
  16. import "envoy/extensions/transport_sockets/tls/v3/secret.proto";
  17. import "envoy/type/v3/percent.proto";
  18. import "google/protobuf/duration.proto";
  19. import "google/protobuf/struct.proto";
  20. import "google/protobuf/wrappers.proto";
  21. import "envoy/annotations/deprecation.proto";
  22. import "udpa/annotations/migrate.proto";
  23. import "udpa/annotations/security.proto";
  24. import "udpa/annotations/status.proto";
  25. import "udpa/annotations/versioning.proto";
  26. import "validate/validate.proto";
  27. option java_package = "io.envoyproxy.envoy.config.bootstrap.v3";
  28. option java_outer_classname = "BootstrapProto";
  29. option java_multiple_files = true;
  30. option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v3;bootstrapv3";
  31. option (udpa.annotations.file_status).package_version_status = ACTIVE;
  32. // [#protodoc-title: Bootstrap]
  33. // This proto is supplied via the :option:`-c` CLI flag and acts as the root
  34. // of the Envoy v3 configuration. See the :ref:`v3 configuration overview
  35. // <config_overview_bootstrap>` for more detail.
  36. // Bootstrap :ref:`configuration overview <config_overview_bootstrap>`.
  37. // [#next-free-field: 34]
  38. message Bootstrap {
  39. option (udpa.annotations.versioning).previous_message_type =
  40. "envoy.config.bootstrap.v2.Bootstrap";
  41. message StaticResources {
  42. option (udpa.annotations.versioning).previous_message_type =
  43. "envoy.config.bootstrap.v2.Bootstrap.StaticResources";
  44. // Static :ref:`Listeners <envoy_v3_api_msg_config.listener.v3.Listener>`. These listeners are
  45. // available regardless of LDS configuration.
  46. repeated listener.v3.Listener listeners = 1;
  47. // If a network based configuration source is specified for :ref:`cds_config
  48. // <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.DynamicResources.cds_config>`, it's necessary
  49. // to have some initial cluster definitions available to allow Envoy to know
  50. // how to speak to the management server. These cluster definitions may not
  51. // use :ref:`EDS <arch_overview_dynamic_config_eds>` (i.e. they should be static
  52. // IP or DNS-based).
  53. repeated cluster.v3.Cluster clusters = 2;
  54. // These static secrets can be used by :ref:`SdsSecretConfig
  55. // <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.SdsSecretConfig>`
  56. repeated envoy.extensions.transport_sockets.tls.v3.Secret secrets = 3;
  57. }
  58. // [#next-free-field: 7]
  59. message DynamicResources {
  60. option (udpa.annotations.versioning).previous_message_type =
  61. "envoy.config.bootstrap.v2.Bootstrap.DynamicResources";
  62. reserved 4;
  63. // All :ref:`Listeners <envoy_v3_api_msg_config.listener.v3.Listener>` are provided by a single
  64. // :ref:`LDS <arch_overview_dynamic_config_lds>` configuration source.
  65. core.v3.ConfigSource lds_config = 1;
  66. // xdstp:// resource locator for listener collection.
  67. // [#not-implemented-hide:]
  68. string lds_resources_locator = 5;
  69. // All post-bootstrap :ref:`Cluster <envoy_v3_api_msg_config.cluster.v3.Cluster>` definitions are
  70. // provided by a single :ref:`CDS <arch_overview_dynamic_config_cds>`
  71. // configuration source.
  72. core.v3.ConfigSource cds_config = 2;
  73. // xdstp:// resource locator for cluster collection.
  74. // [#not-implemented-hide:]
  75. string cds_resources_locator = 6;
  76. // A single :ref:`ADS <config_overview_ads>` source may be optionally
  77. // specified. This must have :ref:`api_type
  78. // <envoy_v3_api_field_config.core.v3.ApiConfigSource.api_type>` :ref:`GRPC
  79. // <envoy_v3_api_enum_value_config.core.v3.ApiConfigSource.ApiType.GRPC>`. Only
  80. // :ref:`ConfigSources <envoy_v3_api_msg_config.core.v3.ConfigSource>` that have
  81. // the :ref:`ads <envoy_v3_api_field_config.core.v3.ConfigSource.ads>` field set will be
  82. // streamed on the ADS channel.
  83. core.v3.ApiConfigSource ads_config = 3;
  84. }
  85. reserved 10, 11;
  86. reserved "runtime";
  87. // Node identity to present to the management server and for instance
  88. // identification purposes (e.g. in generated headers).
  89. core.v3.Node node = 1;
  90. // A list of :ref:`Node <envoy_v3_api_msg_config.core.v3.Node>` field names
  91. // that will be included in the context parameters of the effective
  92. // xdstp:// URL that is sent in a discovery request when resource
  93. // locators are used for LDS/CDS. Any non-string field will have its JSON
  94. // encoding set as the context parameter value, with the exception of
  95. // metadata, which will be flattened (see example below). The supported field
  96. // names are:
  97. // - "cluster"
  98. // - "id"
  99. // - "locality.region"
  100. // - "locality.sub_zone"
  101. // - "locality.zone"
  102. // - "metadata"
  103. // - "user_agent_build_version.metadata"
  104. // - "user_agent_build_version.version"
  105. // - "user_agent_name"
  106. // - "user_agent_version"
  107. //
  108. // The node context parameters act as a base layer dictionary for the context
  109. // parameters (i.e. more specific resource specific context parameters will
  110. // override). Field names will be prefixed with “udpa.node.” when included in
  111. // context parameters.
  112. //
  113. // For example, if node_context_params is ``["user_agent_name", "metadata"]``,
  114. // the implied context parameters might be::
  115. //
  116. // node.user_agent_name: "envoy"
  117. // node.metadata.foo: "{\"bar\": \"baz\"}"
  118. // node.metadata.some: "42"
  119. // node.metadata.thing: "\"thing\""
  120. //
  121. // [#not-implemented-hide:]
  122. repeated string node_context_params = 26;
  123. // Statically specified resources.
  124. StaticResources static_resources = 2;
  125. // xDS configuration sources.
  126. DynamicResources dynamic_resources = 3;
  127. // Configuration for the cluster manager which owns all upstream clusters
  128. // within the server.
  129. ClusterManager cluster_manager = 4;
  130. // Health discovery service config option.
  131. // (:ref:`core.ApiConfigSource <envoy_v3_api_msg_config.core.v3.ApiConfigSource>`)
  132. core.v3.ApiConfigSource hds_config = 14;
  133. // Optional file system path to search for startup flag files.
  134. string flags_path = 5;
  135. // Optional set of stats sinks.
  136. repeated metrics.v3.StatsSink stats_sinks = 6;
  137. // Configuration for internal processing of stats.
  138. metrics.v3.StatsConfig stats_config = 13;
  139. // Optional duration between flushes to configured stats sinks. For
  140. // performance reasons Envoy latches counters and only flushes counters and
  141. // gauges at a periodic interval. If not specified the default is 5000ms (5
  142. // seconds). Only one of `stats_flush_interval` or `stats_flush_on_admin`
  143. // can be set.
  144. // Duration must be at least 1ms and at most 5 min.
  145. google.protobuf.Duration stats_flush_interval = 7 [
  146. (validate.rules).duration = {
  147. lt {seconds: 300}
  148. gte {nanos: 1000000}
  149. },
  150. (udpa.annotations.field_migrate).oneof_promotion = "stats_flush"
  151. ];
  152. oneof stats_flush {
  153. // Flush stats to sinks only when queried for on the admin interface. If set,
  154. // a flush timer is not created. Only one of `stats_flush_on_admin` or
  155. // `stats_flush_interval` can be set.
  156. bool stats_flush_on_admin = 29 [(validate.rules).bool = {const: true}];
  157. }
  158. // Optional watchdog configuration.
  159. // This is for a single watchdog configuration for the entire system.
  160. // Deprecated in favor of *watchdogs* which has finer granularity.
  161. Watchdog watchdog = 8
  162. [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
  163. // Optional watchdogs configuration.
  164. // This is used for specifying different watchdogs for the different subsystems.
  165. // [#extension-category: envoy.guarddog_actions]
  166. Watchdogs watchdogs = 27;
  167. // Configuration for an external tracing provider.
  168. //
  169. // .. attention::
  170. // This field has been deprecated in favor of :ref:`HttpConnectionManager.Tracing.provider
  171. // <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.provider>`.
  172. trace.v3.Tracing tracing = 9
  173. [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
  174. // Configuration for the runtime configuration provider. If not
  175. // specified, a “null” provider will be used which will result in all defaults
  176. // being used.
  177. LayeredRuntime layered_runtime = 17;
  178. // Configuration for the local administration HTTP server.
  179. Admin admin = 12;
  180. // Optional overload manager configuration.
  181. overload.v3.OverloadManager overload_manager = 15 [
  182. (udpa.annotations.security).configure_for_untrusted_downstream = true,
  183. (udpa.annotations.security).configure_for_untrusted_upstream = true
  184. ];
  185. // Enable :ref:`stats for event dispatcher <operations_performance>`, defaults to false.
  186. // Note that this records a value for each iteration of the event loop on every thread. This
  187. // should normally be minimal overhead, but when using
  188. // :ref:`statsd <envoy_v3_api_msg_config.metrics.v3.StatsdSink>`, it will send each observed value
  189. // over the wire individually because the statsd protocol doesn't have any way to represent a
  190. // histogram summary. Be aware that this can be a very large volume of data.
  191. bool enable_dispatcher_stats = 16;
  192. // Optional string which will be used in lieu of x-envoy in prefixing headers.
  193. //
  194. // For example, if this string is present and set to X-Foo, then x-envoy-retry-on will be
  195. // transformed into x-foo-retry-on etc.
  196. //
  197. // Note this applies to the headers Envoy will generate, the headers Envoy will sanitize, and the
  198. // headers Envoy will trust for core code and core extensions only. Be VERY careful making
  199. // changes to this string, especially in multi-layer Envoy deployments or deployments using
  200. // extensions which are not upstream.
  201. string header_prefix = 18;
  202. // Optional proxy version which will be used to set the value of :ref:`server.version statistic
  203. // <server_statistics>` if specified. Envoy will not process this value, it will be sent as is to
  204. // :ref:`stats sinks <envoy_v3_api_msg_config.metrics.v3.StatsSink>`.
  205. google.protobuf.UInt64Value stats_server_version_override = 19;
  206. // Always use TCP queries instead of UDP queries for DNS lookups.
  207. // This may be overridden on a per-cluster basis in cds_config,
  208. // when :ref:`dns_resolvers <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolvers>` and
  209. // :ref:`use_tcp_for_dns_lookups <envoy_v3_api_field_config.cluster.v3.Cluster.use_tcp_for_dns_lookups>` are
  210. // specified.
  211. // This field is deprecated in favor of *dns_resolution_config*
  212. // which aggregates all of the DNS resolver configuration in a single message.
  213. bool use_tcp_for_dns_lookups = 20
  214. [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
  215. // DNS resolution configuration which includes the underlying dns resolver addresses and options.
  216. // This may be overridden on a per-cluster basis in cds_config, when
  217. // :ref:`dns_resolution_config <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`
  218. // is specified.
  219. // This field is deprecated in favor of
  220. // :ref:`typed_dns_resolver_config <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.typed_dns_resolver_config>`.
  221. core.v3.DnsResolutionConfig dns_resolution_config = 30
  222. [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
  223. // DNS resolver type configuration extension. This extension can be used to configure c-ares, apple,
  224. // or any other DNS resolver types and the related parameters.
  225. // For example, an object of
  226. // :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
  227. // can be packed into this *typed_dns_resolver_config*. This configuration replaces the
  228. // :ref:`dns_resolution_config <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.dns_resolution_config>`
  229. // configuration.
  230. // During the transition period when both *dns_resolution_config* and *typed_dns_resolver_config* exists,
  231. // when *typed_dns_resolver_config* is in place, Envoy will use it and ignore *dns_resolution_config*.
  232. // When *typed_dns_resolver_config* is missing, the default behavior is in place.
  233. // [#extension-category: envoy.network.dns_resolver]
  234. core.v3.TypedExtensionConfig typed_dns_resolver_config = 31;
  235. // Specifies optional bootstrap extensions to be instantiated at startup time.
  236. // Each item contains extension specific configuration.
  237. // [#extension-category: envoy.bootstrap]
  238. repeated core.v3.TypedExtensionConfig bootstrap_extensions = 21;
  239. // Specifies optional extensions instantiated at startup time and
  240. // invoked during crash time on the request that caused the crash.
  241. repeated FatalAction fatal_actions = 28;
  242. // Configuration sources that will participate in
  243. // xdstp:// URL authority resolution. The algorithm is as
  244. // follows:
  245. // 1. The authority field is taken from the xdstp:// URL, call
  246. // this *resource_authority*.
  247. // 2. *resource_authority* is compared against the authorities in any peer
  248. // *ConfigSource*. The peer *ConfigSource* is the configuration source
  249. // message which would have been used unconditionally for resolution
  250. // with opaque resource names. If there is a match with an authority, the
  251. // peer *ConfigSource* message is used.
  252. // 3. *resource_authority* is compared sequentially with the authorities in
  253. // each configuration source in *config_sources*. The first *ConfigSource*
  254. // to match wins.
  255. // 4. As a fallback, if no configuration source matches, then
  256. // *default_config_source* is used.
  257. // 5. If *default_config_source* is not specified, resolution fails.
  258. // [#not-implemented-hide:]
  259. repeated core.v3.ConfigSource config_sources = 22;
  260. // Default configuration source for xdstp:// URLs if all
  261. // other resolution fails.
  262. // [#not-implemented-hide:]
  263. core.v3.ConfigSource default_config_source = 23;
  264. // Optional overriding of default socket interface. The value must be the name of one of the
  265. // socket interface factories initialized through a bootstrap extension
  266. string default_socket_interface = 24;
  267. // Global map of CertificateProvider instances. These instances are referred to by name in the
  268. // :ref:`CommonTlsContext.CertificateProviderInstance.instance_name
  269. // <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CommonTlsContext.CertificateProviderInstance.instance_name>`
  270. // field.
  271. // [#not-implemented-hide:]
  272. map<string, core.v3.TypedExtensionConfig> certificate_provider_instances = 25;
  273. // Specifies a set of headers that need to be registered as inline header. This configuration
  274. // allows users to customize the inline headers on-demand at Envoy startup without modifying
  275. // Envoy's source code.
  276. //
  277. // Note that the 'set-cookie' header cannot be registered as inline header.
  278. repeated CustomInlineHeader inline_headers = 32;
  279. // Optional path to a file with performance tracing data created by "Perfetto" SDK in binary
  280. // ProtoBuf format. The default value is "envoy.pftrace".
  281. string perf_tracing_file_path = 33;
  282. }
  283. // Administration interface :ref:`operations documentation
  284. // <operations_admin_interface>`.
  285. // [#next-free-field: 7]
  286. message Admin {
  287. option (udpa.annotations.versioning).previous_message_type = "envoy.config.bootstrap.v2.Admin";
  288. // Configuration for :ref:`access logs <arch_overview_access_logs>`
  289. // emitted by the administration server.
  290. repeated accesslog.v3.AccessLog access_log = 5;
  291. // The path to write the access log for the administration server. If no
  292. // access log is desired specify ‘/dev/null’. This is only required if
  293. // :ref:`address <envoy_v3_api_field_config.bootstrap.v3.Admin.address>` is set.
  294. // Deprecated in favor of *access_log* which offers more options.
  295. string access_log_path = 1
  296. [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
  297. // The cpu profiler output path for the administration server. If no profile
  298. // path is specified, the default is ‘/var/log/envoy/envoy.prof’.
  299. string profile_path = 2;
  300. // The TCP address that the administration server will listen on.
  301. // If not specified, Envoy will not start an administration server.
  302. core.v3.Address address = 3;
  303. // Additional socket options that may not be present in Envoy source code or
  304. // precompiled binaries.
  305. repeated core.v3.SocketOption socket_options = 4;
  306. // Indicates whether :ref:`global_downstream_max_connections <config_overload_manager_limiting_connections>`
  307. // should apply to the admin interface or not.
  308. bool ignore_global_conn_limit = 6;
  309. }
  310. // Cluster manager :ref:`architecture overview <arch_overview_cluster_manager>`.
  311. message ClusterManager {
  312. option (udpa.annotations.versioning).previous_message_type =
  313. "envoy.config.bootstrap.v2.ClusterManager";
  314. message OutlierDetection {
  315. option (udpa.annotations.versioning).previous_message_type =
  316. "envoy.config.bootstrap.v2.ClusterManager.OutlierDetection";
  317. // Specifies the path to the outlier event log.
  318. string event_log_path = 1;
  319. // [#not-implemented-hide:]
  320. // The gRPC service for the outlier detection event service.
  321. // If empty, outlier detection events won't be sent to a remote endpoint.
  322. core.v3.EventServiceConfig event_service = 2;
  323. }
  324. // Name of the local cluster (i.e., the cluster that owns the Envoy running
  325. // this configuration). In order to enable :ref:`zone aware routing
  326. // <arch_overview_load_balancing_zone_aware_routing>` this option must be set.
  327. // If *local_cluster_name* is defined then :ref:`clusters
  328. // <envoy_v3_api_msg_config.cluster.v3.Cluster>` must be defined in the :ref:`Bootstrap
  329. // static cluster resources
  330. // <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.StaticResources.clusters>`. This is unrelated to
  331. // the :option:`--service-cluster` option which does not `affect zone aware
  332. // routing <https://github.com/envoyproxy/envoy/issues/774>`_.
  333. string local_cluster_name = 1;
  334. // Optional global configuration for outlier detection.
  335. OutlierDetection outlier_detection = 2;
  336. // Optional configuration used to bind newly established upstream connections.
  337. // This may be overridden on a per-cluster basis by upstream_bind_config in the cds_config.
  338. core.v3.BindConfig upstream_bind_config = 3;
  339. // A management server endpoint to stream load stats to via
  340. // *StreamLoadStats*. This must have :ref:`api_type
  341. // <envoy_v3_api_field_config.core.v3.ApiConfigSource.api_type>` :ref:`GRPC
  342. // <envoy_v3_api_enum_value_config.core.v3.ApiConfigSource.ApiType.GRPC>`.
  343. core.v3.ApiConfigSource load_stats_config = 4;
  344. }
  345. // Allows you to specify different watchdog configs for different subsystems.
  346. // This allows finer tuned policies for the watchdog. If a subsystem is omitted
  347. // the default values for that system will be used.
  348. message Watchdogs {
  349. // Watchdog for the main thread.
  350. Watchdog main_thread_watchdog = 1;
  351. // Watchdog for the worker threads.
  352. Watchdog worker_watchdog = 2;
  353. }
  354. // Envoy process watchdog configuration. When configured, this monitors for
  355. // nonresponsive threads and kills the process after the configured thresholds.
  356. // See the :ref:`watchdog documentation <operations_performance_watchdog>` for more information.
  357. // [#next-free-field: 8]
  358. message Watchdog {
  359. option (udpa.annotations.versioning).previous_message_type = "envoy.config.bootstrap.v2.Watchdog";
  360. message WatchdogAction {
  361. // The events are fired in this order: KILL, MULTIKILL, MEGAMISS, MISS.
  362. // Within an event type, actions execute in the order they are configured.
  363. // For KILL/MULTIKILL there is a default PANIC that will run after the
  364. // registered actions and kills the process if it wasn't already killed.
  365. // It might be useful to specify several debug actions, and possibly an
  366. // alternate FATAL action.
  367. enum WatchdogEvent {
  368. UNKNOWN = 0;
  369. KILL = 1;
  370. MULTIKILL = 2;
  371. MEGAMISS = 3;
  372. MISS = 4;
  373. }
  374. // Extension specific configuration for the action.
  375. core.v3.TypedExtensionConfig config = 1;
  376. WatchdogEvent event = 2 [(validate.rules).enum = {defined_only: true}];
  377. }
  378. // Register actions that will fire on given WatchDog events.
  379. // See *WatchDogAction* for priority of events.
  380. repeated WatchdogAction actions = 7;
  381. // The duration after which Envoy counts a nonresponsive thread in the
  382. // *watchdog_miss* statistic. If not specified the default is 200ms.
  383. google.protobuf.Duration miss_timeout = 1;
  384. // The duration after which Envoy counts a nonresponsive thread in the
  385. // *watchdog_mega_miss* statistic. If not specified the default is
  386. // 1000ms.
  387. google.protobuf.Duration megamiss_timeout = 2;
  388. // If a watched thread has been nonresponsive for this duration, assume a
  389. // programming error and kill the entire Envoy process. Set to 0 to disable
  390. // kill behavior. If not specified the default is 0 (disabled).
  391. google.protobuf.Duration kill_timeout = 3;
  392. // Defines the maximum jitter used to adjust the *kill_timeout* if *kill_timeout* is
  393. // enabled. Enabling this feature would help to reduce risk of synchronized
  394. // watchdog kill events across proxies due to external triggers. Set to 0 to
  395. // disable. If not specified the default is 0 (disabled).
  396. google.protobuf.Duration max_kill_timeout_jitter = 6 [(validate.rules).duration = {gte {}}];
  397. // If max(2, ceil(registered_threads * Fraction(*multikill_threshold*)))
  398. // threads have been nonresponsive for at least this duration kill the entire
  399. // Envoy process. Set to 0 to disable this behavior. If not specified the
  400. // default is 0 (disabled).
  401. google.protobuf.Duration multikill_timeout = 4;
  402. // Sets the threshold for *multikill_timeout* in terms of the percentage of
  403. // nonresponsive threads required for the *multikill_timeout*.
  404. // If not specified the default is 0.
  405. type.v3.Percent multikill_threshold = 5;
  406. }
  407. // Fatal actions to run while crashing. Actions can be safe (meaning they are
  408. // async-signal safe) or unsafe. We run all safe actions before we run unsafe actions.
  409. // If using an unsafe action that could get stuck or deadlock, it important to
  410. // have an out of band system to terminate the process.
  411. //
  412. // The interface for the extension is ``Envoy::Server::Configuration::FatalAction``.
  413. // *FatalAction* extensions live in the ``envoy.extensions.fatal_actions`` API
  414. // namespace.
  415. message FatalAction {
  416. // Extension specific configuration for the action. It's expected to conform
  417. // to the ``Envoy::Server::Configuration::FatalAction`` interface.
  418. core.v3.TypedExtensionConfig config = 1;
  419. }
  420. // Runtime :ref:`configuration overview <config_runtime>` (deprecated).
  421. message Runtime {
  422. option (udpa.annotations.versioning).previous_message_type = "envoy.config.bootstrap.v2.Runtime";
  423. // The implementation assumes that the file system tree is accessed via a
  424. // symbolic link. An atomic link swap is used when a new tree should be
  425. // switched to. This parameter specifies the path to the symbolic link. Envoy
  426. // will watch the location for changes and reload the file system tree when
  427. // they happen. If this parameter is not set, there will be no disk based
  428. // runtime.
  429. string symlink_root = 1;
  430. // Specifies the subdirectory to load within the root directory. This is
  431. // useful if multiple systems share the same delivery mechanism. Envoy
  432. // configuration elements can be contained in a dedicated subdirectory.
  433. string subdirectory = 2;
  434. // Specifies an optional subdirectory to load within the root directory. If
  435. // specified and the directory exists, configuration values within this
  436. // directory will override those found in the primary subdirectory. This is
  437. // useful when Envoy is deployed across many different types of servers.
  438. // Sometimes it is useful to have a per service cluster directory for runtime
  439. // configuration. See below for exactly how the override directory is used.
  440. string override_subdirectory = 3;
  441. // Static base runtime. This will be :ref:`overridden
  442. // <config_runtime_layering>` by other runtime layers, e.g.
  443. // disk or admin. This follows the :ref:`runtime protobuf JSON representation
  444. // encoding <config_runtime_proto_json>`.
  445. google.protobuf.Struct base = 4;
  446. }
  447. // [#next-free-field: 6]
  448. message RuntimeLayer {
  449. option (udpa.annotations.versioning).previous_message_type =
  450. "envoy.config.bootstrap.v2.RuntimeLayer";
  451. // :ref:`Disk runtime <config_runtime_local_disk>` layer.
  452. message DiskLayer {
  453. option (udpa.annotations.versioning).previous_message_type =
  454. "envoy.config.bootstrap.v2.RuntimeLayer.DiskLayer";
  455. // The implementation assumes that the file system tree is accessed via a
  456. // symbolic link. An atomic link swap is used when a new tree should be
  457. // switched to. This parameter specifies the path to the symbolic link.
  458. // Envoy will watch the location for changes and reload the file system tree
  459. // when they happen. See documentation on runtime :ref:`atomicity
  460. // <config_runtime_atomicity>` for further details on how reloads are
  461. // treated.
  462. string symlink_root = 1;
  463. // Specifies the subdirectory to load within the root directory. This is
  464. // useful if multiple systems share the same delivery mechanism. Envoy
  465. // configuration elements can be contained in a dedicated subdirectory.
  466. string subdirectory = 3;
  467. // :ref:`Append <config_runtime_local_disk_service_cluster_subdirs>` the
  468. // service cluster to the path under symlink root.
  469. bool append_service_cluster = 2;
  470. }
  471. // :ref:`Admin console runtime <config_runtime_admin>` layer.
  472. message AdminLayer {
  473. option (udpa.annotations.versioning).previous_message_type =
  474. "envoy.config.bootstrap.v2.RuntimeLayer.AdminLayer";
  475. }
  476. // :ref:`Runtime Discovery Service (RTDS) <config_runtime_rtds>` layer.
  477. message RtdsLayer {
  478. option (udpa.annotations.versioning).previous_message_type =
  479. "envoy.config.bootstrap.v2.RuntimeLayer.RtdsLayer";
  480. // Resource to subscribe to at *rtds_config* for the RTDS layer.
  481. string name = 1;
  482. // RTDS configuration source.
  483. core.v3.ConfigSource rtds_config = 2;
  484. }
  485. // Descriptive name for the runtime layer. This is only used for the runtime
  486. // :http:get:`/runtime` output.
  487. string name = 1 [(validate.rules).string = {min_len: 1}];
  488. oneof layer_specifier {
  489. option (validate.required) = true;
  490. // :ref:`Static runtime <config_runtime_bootstrap>` layer.
  491. // This follows the :ref:`runtime protobuf JSON representation encoding
  492. // <config_runtime_proto_json>`. Unlike static xDS resources, this static
  493. // layer is overridable by later layers in the runtime virtual filesystem.
  494. google.protobuf.Struct static_layer = 2;
  495. DiskLayer disk_layer = 3;
  496. AdminLayer admin_layer = 4;
  497. RtdsLayer rtds_layer = 5;
  498. }
  499. }
  500. // Runtime :ref:`configuration overview <config_runtime>`.
  501. message LayeredRuntime {
  502. option (udpa.annotations.versioning).previous_message_type =
  503. "envoy.config.bootstrap.v2.LayeredRuntime";
  504. // The :ref:`layers <config_runtime_layering>` of the runtime. This is ordered
  505. // such that later layers in the list overlay earlier entries.
  506. repeated RuntimeLayer layers = 1;
  507. }
  508. // Used to specify the header that needs to be registered as an inline header.
  509. //
  510. // If request or response contain multiple headers with the same name and the header
  511. // name is registered as an inline header. Then multiple headers will be folded
  512. // into one, and multiple header values will be concatenated by a suitable delimiter.
  513. // The delimiter is generally a comma.
  514. //
  515. // For example, if 'foo' is registered as an inline header, and the headers contains
  516. // the following two headers:
  517. //
  518. // .. code-block:: text
  519. //
  520. // foo: bar
  521. // foo: eep
  522. //
  523. // Then they will eventually be folded into:
  524. //
  525. // .. code-block:: text
  526. //
  527. // foo: bar, eep
  528. //
  529. // Inline headers provide O(1) search performance, but each inline header imposes
  530. // an additional memory overhead on all instances of the corresponding type of
  531. // HeaderMap or TrailerMap.
  532. message CustomInlineHeader {
  533. enum InlineHeaderType {
  534. REQUEST_HEADER = 0;
  535. REQUEST_TRAILER = 1;
  536. RESPONSE_HEADER = 2;
  537. RESPONSE_TRAILER = 3;
  538. }
  539. // The name of the header that is expected to be set as the inline header.
  540. string inline_header_name = 1
  541. [(validate.rules).string = {min_len: 1 well_known_regex: HTTP_HEADER_NAME strict: false}];
  542. // The type of the header that is expected to be set as the inline header.
  543. InlineHeaderType inline_header_type = 2 [(validate.rules).enum = {defined_only: true}];
  544. }