diff --git a/Makefile.core.mk b/Makefile.core.mk index 302ca0d0be8..1a91315cdab 100644 --- a/Makefile.core.mk +++ b/Makefile.core.mk @@ -22,6 +22,7 @@ BAZEL_TARGETS ?= //... BAZEL_TEST_TARGETS ?= ${BAZEL_TARGETS} -tools/deb/... -tools/docker/... HUB ?= TAG ?= +repo_dir := . ifeq "$(origin CC)" "default" CC := clang @@ -118,6 +119,29 @@ lint: lint-copyright-banner format-go lint-go tidy-go @scripts/check-repository.sh @scripts/check-style.sh +protoc = protoc -I common-protos -I extensions +protoc_gen_docs_plugin := --docs_out=warnings=true,per_file=true,mode=html_fragment_with_front_matter:$(repo_dir)/ + +metadata_exchange_path := extensions/metadata_exchange +metadata_exchange_protos := $(wildcard $(metadata_exchange_path)/*.proto) +metadata_exchange_docs := $(metadata_exchange_protos:.proto=.pb.html) +$(metadata_exchange_docs): $(metadata_exchange_protos) + @$(protoc) -I ./extensions $(protoc_gen_docs_plugin)$(metadata_exchange_path) $^ + +stats_path := extensions/stats +stats_protos := $(wildcard $(stats_path)/*.proto) +stats_docs := $(stats_protos:.proto=.pb.html) +$(stats_docs): $(stats_protos) + @$(protoc) -I ./extensions $(protoc_gen_docs_plugin)$(stats_path) $^ + +stackdriver_path := extensions/stackdriver/config/v1alpha1 +stackdriver_protos := $(wildcard $(stackdriver_path)/*.proto) +stackdriver_docs := $(stackdriver_protos:.proto=.pb.html) +$(stackdriver_docs): $(stackdriver_protos) + @$(protoc) -I ./extensions $(protoc_gen_docs_plugin)$(stackdriver_path) $^ + +extensions-docs: $(metadata_exchange_docs) $(stats_docs) $(stackdriver_docs) + deb: export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_REL) //tools/deb:istio-proxy @@ -130,6 +154,6 @@ test_release: push_release: build export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/release-binary.sh -d "$(RELEASE_GCS_PATH)" -p && ./scripts/generate-wasm.sh -b -p -d "$(RELEASE_GCS_PATH)" -.PHONY: build clean test check artifacts +.PHONY: build clean test check artifacts extensions-proto include common/Makefile.common.mk diff --git a/common-protos/google/protobuf/duration.proto b/common-protos/google/protobuf/duration.proto new file mode 100644 index 00000000000..99cb102c353 --- /dev/null +++ b/common-protos/google/protobuf/duration.proto @@ -0,0 +1,116 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/duration"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DurationProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// A Duration represents a signed, fixed-length span of time represented +// as a count of seconds and fractions of seconds at nanosecond +// resolution. It is independent of any calendar and concepts like "day" +// or "month". It is related to Timestamp in that the difference between +// two Timestamp values is a Duration and it can be added or subtracted +// from a Timestamp. Range is approximately +-10,000 years. +// +// # Examples +// +// Example 1: Compute Duration from two Timestamps in pseudo code. +// +// Timestamp start = ...; +// Timestamp end = ...; +// Duration duration = ...; +// +// duration.seconds = end.seconds - start.seconds; +// duration.nanos = end.nanos - start.nanos; +// +// if (duration.seconds < 0 && duration.nanos > 0) { +// duration.seconds += 1; +// duration.nanos -= 1000000000; +// } else if (duration.seconds > 0 && duration.nanos < 0) { +// duration.seconds -= 1; +// duration.nanos += 1000000000; +// } +// +// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. +// +// Timestamp start = ...; +// Duration duration = ...; +// Timestamp end = ...; +// +// end.seconds = start.seconds + duration.seconds; +// end.nanos = start.nanos + duration.nanos; +// +// if (end.nanos < 0) { +// end.seconds -= 1; +// end.nanos += 1000000000; +// } else if (end.nanos >= 1000000000) { +// end.seconds += 1; +// end.nanos -= 1000000000; +// } +// +// Example 3: Compute Duration from datetime.timedelta in Python. +// +// td = datetime.timedelta(days=3, minutes=10) +// duration = Duration() +// duration.FromTimedelta(td) +// +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +// +// +message Duration { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. Note: these bounds are computed from: + // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + int64 seconds = 1; + + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + int32 nanos = 2; +} diff --git a/common-protos/google/protobuf/wrappers.proto b/common-protos/google/protobuf/wrappers.proto new file mode 100644 index 00000000000..9ee41e384ac --- /dev/null +++ b/common-protos/google/protobuf/wrappers.proto @@ -0,0 +1,123 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Wrappers for primitive (non-message) types. These types are useful +// for embedding primitives in the `google.protobuf.Any` type and for places +// where we need to distinguish between the absence of a primitive +// typed field and its default value. +// +// These wrappers have no meaningful use within repeated fields as they lack +// the ability to detect presence on individual elements. +// These wrappers have no meaningful use within a map or a oneof since +// individual entries of a map or fields of a oneof can already detect presence. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/wrappers"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "WrappersProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// Wrapper message for `double`. +// +// The JSON representation for `DoubleValue` is JSON number. +message DoubleValue { + // The double value. + double value = 1; +} + +// Wrapper message for `float`. +// +// The JSON representation for `FloatValue` is JSON number. +message FloatValue { + // The float value. + float value = 1; +} + +// Wrapper message for `int64`. +// +// The JSON representation for `Int64Value` is JSON string. +message Int64Value { + // The int64 value. + int64 value = 1; +} + +// Wrapper message for `uint64`. +// +// The JSON representation for `UInt64Value` is JSON string. +message UInt64Value { + // The uint64 value. + uint64 value = 1; +} + +// Wrapper message for `int32`. +// +// The JSON representation for `Int32Value` is JSON number. +message Int32Value { + // The int32 value. + int32 value = 1; +} + +// Wrapper message for `uint32`. +// +// The JSON representation for `UInt32Value` is JSON number. +message UInt32Value { + // The uint32 value. + uint32 value = 1; +} + +// Wrapper message for `bool`. +// +// The JSON representation for `BoolValue` is JSON `true` and `false`. +message BoolValue { + // The bool value. + bool value = 1; +} + +// Wrapper message for `string`. +// +// The JSON representation for `StringValue` is JSON string. +message StringValue { + // The string value. + string value = 1; +} + +// Wrapper message for `bytes`. +// +// The JSON representation for `BytesValue` is JSON string. +message BytesValue { + // The bytes value. + bytes value = 1; +} diff --git a/extensions/metadata_exchange/config.pb.html b/extensions/metadata_exchange/config.pb.html new file mode 100644 index 00000000000..fe23e7fdba7 --- /dev/null +++ b/extensions/metadata_exchange/config.pb.html @@ -0,0 +1,68 @@ +--- +title: Metadata Exchange Config +description: Configuration for Metadata Exchange Filter. +location: https://istio.io/docs/reference/config/proxy_extensions/metadata_exchange.html +layout: protoc-gen-docs +generator: protoc-gen-docs +weight: 20 +number_of_entries: 2 +--- +

PluginConfig

+
+ + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
maxPeerCacheSizeUInt32Value +

next id: 2 +maximum size of the peer metadata cache. +A long lived proxy that connects with many transient peers can build up a +large cache. To turn off the cache, set this field to zero.

+ +
+No +
+
+

google.protobuf.UInt32Value

+
+

Wrapper message for uint32.

+ +

The JSON representation for UInt32Value is JSON number.

+ + + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
valueuint32 +

The uint32 value.

+ +
+No +
+
diff --git a/extensions/metadata_exchange/config.proto b/extensions/metadata_exchange/config.proto index 4fa02df0885..85e029e3a17 100644 --- a/extensions/metadata_exchange/config.proto +++ b/extensions/metadata_exchange/config.proto @@ -15,6 +15,13 @@ syntax = "proto3"; +// clang-format off +// $title: Metadata Exchange Config +// $description: Configuration for Metadata Exchange Filter. +// $location: https://istio.io/docs/reference/config/proxy_extensions/metadata_exchange.html. +// $weight: 20 +// clang-format on + package metadata_exchange; import "google/protobuf/wrappers.proto"; diff --git a/extensions/stackdriver/config/v1alpha1/stackdriver_plugin_config.pb.html b/extensions/stackdriver/config/v1alpha1/stackdriver_plugin_config.pb.html new file mode 100644 index 00000000000..0beb81bc50b --- /dev/null +++ b/extensions/stackdriver/config/v1alpha1/stackdriver_plugin_config.pb.html @@ -0,0 +1,130 @@ +--- +title: Stackdriver Config +description: Configuration for Stackdriver filter. +location: https://istio.io/docs/reference/config/proxy_extensions/stackdriver.html +layout: protoc-gen-docs +generator: protoc-gen-docs +weight: 20 +number_of_entries: 1 +--- +

PluginConfig

+
+

next id: 9

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
disableServerAccessLoggingbool +

Optional. Controls whether to export server access log.

+ +
+No +
destinationServiceNamestring +

Optional. FQDN of destination service that the request routed to, e.g. +productpage.default.svc.cluster.local. If not provided, request host header +will be used instead

+ +
+No +
enableMeshEdgesReportingbool +

Optional. Controls whether or not to export mesh edges to a mesh edges +service. This is disabled by default.

+ +
+No +
meshEdgesReportingDurationDuration +

Optional. Allows configuration of the time between calls out to the mesh +edges service to report NEW edges. The minimum configurable duration is +10s. NOTE: This option ONLY configures the intermediate reporting of +novel edges. Once every 10m, all edges observed in that 10m window are +reported and the local cache is cleared. +The default duration is 1m. Any value greater than 10m will result in +reporting every 10m.

+ +
+No +
maxPeerCacheSizeint32 +

maximum size of the peer metadata cache. +A long lived proxy that connects with many transient peers can build up a +large cache. To turn off the cache, set this field to a negative value.

+ +
+No +
disableHostHeaderFallbackbool +

Optional: Disable using host header as a fallback if destination service is +not available from the controlplane. Disable the fallback if the host +header originates outsides the mesh, like at ingress.

+ +
+No +
maxEdgesBatchSizeint32 +

Optional. Allows configuration of the number of traffic assertions to batch +into a single request. Default is 100. Max is 1000.

+ +
+No +
disableHttpSizeMetricsbool +

Optional. Allows disabling of reporting of the request and response size +metrics for HTTP traffic. Defaults to false (request and response size +metrics are enabled).

+ +
+No +
+
diff --git a/extensions/stackdriver/config/v1alpha1/stackdriver_plugin_config.proto b/extensions/stackdriver/config/v1alpha1/stackdriver_plugin_config.proto index 24ad1955b08..8eea9c343e5 100644 --- a/extensions/stackdriver/config/v1alpha1/stackdriver_plugin_config.proto +++ b/extensions/stackdriver/config/v1alpha1/stackdriver_plugin_config.proto @@ -15,6 +15,13 @@ syntax = "proto3"; +// clang-format off +// $title: Stackdriver Config +// $description: Configuration for Stackdriver filter. +// $location: https://istio.io/docs/reference/config/proxy_extensions/stackdriver.html +// $weight: 20 +// clang-format on + package stackdriver.config.v1alpha1; import "google/protobuf/duration.proto"; diff --git a/extensions/stats/config.pb.html b/extensions/stats/config.pb.html new file mode 100644 index 00000000000..26d27446e58 --- /dev/null +++ b/extensions/stats/config.pb.html @@ -0,0 +1,278 @@ +--- +title: Stats Config +description: Configuration for Stats Filter +location: https://istio.io/docs/reference/config/proxy_extensions/stats.html +layout: protoc-gen-docs +generator: protoc-gen-docs +weight: 20 +number_of_entries: 4 +--- +

MetricConfig

+
+

Metric instance configuration overrides. +The metric value and the metric type are optional and permit changing the +reported value for an existing metric. +The standard metrics are optimized and reported through a “fast-path”. +The customizations allow full configurability, at the cost of a “slower” +path.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
dimensionsmap<string, string> +

(Optional) Collection of tag names and tag expressions to include in the +metric. Conflicts are resolved by the tag name by overriding previously +supplied values.

+ +
+No +
namestring +

(Optional) Metric name to restrict the override to a metric. If not +specified, applies to all.

+ +
+No +
tagsToRemovestring[] +

(Optional) A list of tags to remove.

+ +
+No +
matchstring +

NOT IMPLEMENTED. (Optional) Conditional enabling the override.

+ +
+No +
+
+

MetricDefinition

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
namestring +

Metric name.

+ +
+No +
valuestring +

Metric value expression.

+ +
+No +
typeMetricType +

NOT IMPLEMENTED (Optional) Metric type.

+ +
+No +
+
+

MetricType

+
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
COUNTER +
GAUGE +
HISTOGRAM +
+
+

PluginConfig

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
debugbool +

next id: 7 +The following settings should be rarely used. +Enable debug for this filter.

+ +
+No +
maxPeerCacheSizeint32 +

maximum size of the peer metadata cache. +A long lived proxy that connects with many transient peers can build up a +large cache. To turn off the cache, set this field to a negative value.

+ +
+No +
statPrefixstring +

prefix to add to stats emitted by the plugin.

+ +
+No +
fieldSeparatorstring +

Stats api squashes dimensions in a single string. +The squashed string is parsed at prometheus scrape time to recover +dimensions. The following 2 fields set the field and value separators {key: +value} –> key{valueseparator}value{fieldseparator}

+ +
+No +
valueSeparatorstring +

default: “==”

+ +
+No +
disableHostHeaderFallbackbool +

Optional: Disable using host header as a fallback if destination service is +not available from the controlplane. Disable the fallback if the host +header originates outsides the mesh, like at ingress.

+ +
+No +
tcpReportingDurationDuration +

Optional. Allows configuration of the time between calls out to for TCP +metrics reporting. The default duration is 15s.

+ +
+No +
metricsMetricConfig[] +

Metric overrides.

+ +
+No +
definitionsMetricDefinition[] +

Metric definitions.

+ +
+No +
+
diff --git a/extensions/stats/config.proto b/extensions/stats/config.proto index 9264b81a52b..dd86a1e84d2 100644 --- a/extensions/stats/config.proto +++ b/extensions/stats/config.proto @@ -15,6 +15,11 @@ syntax = "proto3"; +// $title: Stats Config +// $description: Configuration for Stats Filter +// $location: https://istio.io/docs/reference/config/proxy_extensions/stats.html +// $weight: 20 + package stats; import "google/protobuf/duration.proto";