Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI for PR 5798 #5799

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
5206f32
Added support for endpointslices
ajaychoudhary-hotstar Oct 28, 2024
593a324
updated test Yaml
ajaychoudhary-hotstar Oct 28, 2024
f129334
Removed break
ajaychoudhary-hotstar Oct 29, 2024
90cabf7
Added endpoints fallback in case endpointslice doesn't exists
ajaychoudhary-hotstar Oct 30, 2024
61568c5
Added condition to take only Ready pods for load balancing
ajaychoudhary-hotstar Nov 8, 2024
d5b3394
Fix lint errors
kflynn Nov 21, 2024
ab3572f
Fixed test case
ajaychoudhary-hotstar Nov 21, 2024
8a47a91
Switch KAT to Ubuntu 24.04. Clean up Docker lint stuff
kflynn Nov 26, 2024
7534cc6
Fix make generate
kflynn Nov 26, 2024
1ee3d7a
Merge branch 'master' of github.com:ajaychoudhary-hotstar/emissary in…
kflynn Nov 26, 2024
ad5da05
Update ENVOY_COMMIT and ENVOY_GO_CONTROL_PLANE_COMMIT
kflynn Dec 5, 2024
b545a46
gmake compile-envoy-protos
kflynn Nov 26, 2024
72f33e6
gmake generate
kflynn Nov 26, 2024
a185d63
Try switching to the GCR mirror for the base Envoy image
kflynn Nov 26, 2024
19b3af7
Don't mention the DockerHub mirror at all (for now)
kflynn Nov 26, 2024
5f31d14
Bump google.golang.org/grpc (to get grpc.NewClient for go-control-pla…
kflynn Nov 26, 2024
2cb04d9
gmake generate
kflynn Nov 26, 2024
ba33121
Switch the base Python image to use Golang 1.23.3
kflynn Dec 4, 2024
674d256
We're using Golang 1.23.3 now
kflynn Dec 4, 2024
149b8e8
Use cryptography instead of OpenSSL.crypto
kflynn Dec 4, 2024
3562e12
Whitespace
kflynn Dec 5, 2024
a79fc9c
Merge pull request #5806 from emissary-ingress/flynn/update-go-version
kflynn Dec 5, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,9 @@ it will be removed; but as it won't be user-visible this isn't considered a brea
instead of the Mapping name, which could reduce the cache's effectiveness. This has been fixed so
that the correct key is used. ([Incorrect Cache Key for Mapping])

- Feature: Emissary-ingress now supports resolving Endpoints from EndpointSlices in addition to the
existing support for Endpoints, supporting Services with more than 1000 endpoints.

[Incorrect Cache Key for Mapping]: https://github.com/emissary-ingress/emissary/issues/5714

## [3.9.0] November 13, 2023
Expand Down Expand Up @@ -401,7 +404,7 @@ it will be removed; but as it won't be user-visible this isn't considered a brea
releases, or a `Host` with or without a `TLSContext` as in prior 2.y releases.

- Bugfix: Prior releases of Emissary-ingress had the arbitrary limitation that a `TCPMapping` cannot
be used on the same port that HTTP is served on, even if TLS+SNI would make this possible.
be used on the same port that HTTP is served on, even if TLS+SNI would make this possible.
Emissary-ingress now allows `TCPMappings` to be used on the same `Listener` port as HTTP `Hosts`,
as long as that `Listener` terminates TLS.

Expand Down Expand Up @@ -567,7 +570,7 @@ it will be removed; but as it won't be user-visible this isn't considered a brea
releases, or a `Host` with or without a `TLSContext` as in prior 2.y releases.

- Bugfix: Prior releases of Emissary-ingress had the arbitrary limitation that a `TCPMapping` cannot
be used on the same port that HTTP is served on, even if TLS+SNI would make this possible.
be used on the same port that HTTP is served on, even if TLS+SNI would make this possible.
Emissary-ingress now allows `TCPMappings` to be used on the same `Listener` port as HTTP `Hosts`,
as long as that `Listener` terminates TLS.

Expand Down
105 changes: 52 additions & 53 deletions DEPENDENCIES.md

Large diffs are not rendered by default.

23 changes: 12 additions & 11 deletions _cxx/envoy.mk
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ export ENVOY_TEST_LABEL
# IF YOU MESS WITH ANY OF THESE VALUES, YOU MUST RUN `make update-base`.
ENVOY_REPO ?= https://github.com/datawire/envoy.git

# https://github.com/datawire/envoy/tree/rebase/release/v1.30.3
ENVOY_COMMIT ?= 99c27c6cf5753adb0390d05992d6e5f248f85ab2
# https://github.com/datawire/envoy/tree/rebase/release/v1.31.3
ENVOY_COMMIT ?= 628f5afc75a894a08504fa0f416269ec50c07bf9

ENVOY_COMPILATION_MODE ?= opt
# Increment BASE_ENVOY_RELVER on changes to `docker/base-envoy/Dockerfile`, or Envoy recipes.
Expand All @@ -24,7 +24,8 @@ BASE_ENVOY_RELVER ?= 0
FIPS_MODE ?=
export FIPS_MODE

ENVOY_DOCKER_REPO ?= docker.io/emissaryingress/base-envoy
# ENVOY_DOCKER_REPO ?= docker.io/emissaryingress/base-envoy
ENVOY_DOCKER_REPO ?= gcr.io/datawire/ambassador-base
ENVOY_DOCKER_VERSION ?= $(BASE_ENVOY_RELVER).$(ENVOY_COMMIT).$(ENVOY_COMPILATION_MODE)$(if $(FIPS_MODE),.FIPS)
ENVOY_DOCKER_TAG ?= $(ENVOY_DOCKER_REPO):envoy-$(ENVOY_DOCKER_VERSION)
# END LIST OF VARIABLES REQUIRING `make update-base`.
Expand All @@ -37,11 +38,11 @@ ENVOY_DOCKER_TAG ?= $(ENVOY_DOCKER_REPO):envoy-$(ENVOY_DOCKER_VERSION)
# which commits are ancestors, I added `make guess-envoy-go-control-plane-commit` to do that in an
# automated way! Still look at the commit yourself to make sure it seems sane; blindly trusting
# machines is bad, mmkay?
ENVOY_GO_CONTROL_PLANE_COMMIT = 57c85e1829e6fe6e73fb69b8a9d9f2d3780572a5
ENVOY_GO_CONTROL_PLANE_COMMIT = f888b4f71207d0d268dee7cb824de92848da9ede

# Set ENVOY_DOCKER_REPO to the list of mirrors to check
ENVOY_DOCKER_REPOS = docker.io/emissaryingress/base-envoy
ENVOY_DOCKER_REPOS += gcr.io/datawire/ambassador-base
# ENVOY_DOCKER_REPOS = docker.io/emissaryingress/base-envoy
# ENVOY_DOCKER_REPOS += gcr.io/datawire/ambassador-base

# Intro
include $(OSS_HOME)/build-aux/prelude.mk
Expand Down Expand Up @@ -136,31 +137,31 @@ verify-base-envoy:
exit 1; \
fi; \
echo "Nothing to build at this time"; \
exit 1; \
exit 0; \
fi; \
}

# builds envoy using release settings, see https://github.com/envoyproxy/envoy/blob/main/ci/README.md for additional
# details on configuring builds
.PHONY: build-envoy
.PHONY: build-envoy
build-envoy: $(OSS_HOME)/_cxx/envoy-build-image.txt
$(OSS_HOME)/_cxx/tools/build-envoy.sh

# build the base-envoy containers and tags them locally, this requires running `build-envoy` first.
# build the base-envoy containers and tags them locally, this requires running `build-envoy` first.
.PHONY: build-base-envoy-image
build-base-envoy-image: $(OSS_HOME)/_cxx/envoy-build-image.txt
docker build --platform="$(BUILD_ARCH)" -f $(OSS_HOME)/docker/base-envoy/Dockerfile.stripped -t $(ENVOY_DOCKER_TAG) $(OSS_HOME)/docker/base-envoy

# Allows pushing the docker image independent of building envoy and docker containers
# Note, bump the BASE_ENVOY_RELVER and re-build before pushing when making non-commit changes to have a unique image tag.
.PHONY: push-base-envoy-image
push-base-envoy-image:
push-base-envoy-image:
docker push $(ENVOY_DOCKER_TAG)


# `make update-base`: Recompile Envoy and do all of the related things.
.PHONY: update-base
update-base: $(OSS_HOME)/_cxx/envoy-build-image.txt
update-base: $(OSS_HOME)/_cxx/envoy-build-image.txt
$(MAKE) verify-base-envoy
$(MAKE) build-envoy
$(MAKE) build-base-envoy-image
Expand Down
5 changes: 4 additions & 1 deletion api/envoy/admin/v3/server_info.proto
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ message ServerInfo {
config.core.v3.Node node = 7;
}

// [#next-free-field: 40]
// [#next-free-field: 41]
message CommandLineOptions {
option (udpa.annotations.versioning).previous_message_type =
"envoy.admin.v2alpha.CommandLineOptions";
Expand Down Expand Up @@ -101,6 +101,9 @@ message CommandLineOptions {
// See :option:`--skip-hot-restart-on-no-parent` for details.
bool skip_hot_restart_on_no_parent = 39;

// See :option:`--skip-hot-restart-parent-stats` for details.
bool skip_hot_restart_parent_stats = 40;

// See :option:`--base-id-path` for details.
string base_id_path = 32;

Expand Down
17 changes: 16 additions & 1 deletion api/envoy/config/bootstrap/v3/bootstrap.proto
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
// <config_overview_bootstrap>` for more detail.

// Bootstrap :ref:`configuration overview <config_overview_bootstrap>`.
// [#next-free-field: 41]
// [#next-free-field: 42]
message Bootstrap {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.bootstrap.v2.Bootstrap";
Expand Down Expand Up @@ -411,6 +411,10 @@ message Bootstrap {

// Optional gRPC async manager config.
GrpcAsyncClientManagerConfig grpc_async_client_manager_config = 40;

// Optional configuration for memory allocation manager.
// Memory releasing is only supported for `tcmalloc allocator <https://github.com/google/tcmalloc>`_.
MemoryAllocatorManager memory_allocator_manager = 41;
}

// Administration interface :ref:`operations documentation
Expand Down Expand Up @@ -734,3 +738,14 @@ message CustomInlineHeader {
// The type of the header that is expected to be set as the inline header.
InlineHeaderType inline_header_type = 2 [(validate.rules).enum = {defined_only: true}];
}

message MemoryAllocatorManager {
// Configures tcmalloc to perform background release of free memory in amount of bytes per ``memory_release_interval`` interval.
// If equals to ``0``, no memory release will occur. Defaults to ``0``.
uint64 bytes_to_release = 1;

// Interval in milliseconds for memory releasing. If specified, during every
// interval Envoy will try to release ``bytes_to_release`` of free memory back to operating system for reuse.
// Defaults to 1000 milliseconds.
google.protobuf.Duration memory_release_interval = 2;
}
39 changes: 29 additions & 10 deletions api/envoy/config/cluster/v3/cluster.proto
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ message ClusterCollection {
}

// Configuration for a single upstream cluster.
// [#next-free-field: 57]
// [#next-free-field: 58]
message Cluster {
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Cluster";

Expand Down Expand Up @@ -168,7 +168,7 @@ message Cluster {
// The name of the match, used in stats generation.
string name = 1 [(validate.rules).string = {min_len: 1}];

// Optional endpoint metadata match criteria.
// Optional metadata match criteria.
// The connection to the endpoint with metadata matching what is set in this field
// will use the transport socket configuration specified here.
// The endpoint's metadata entry in ``envoy.transport_socket_match`` is used to match
Expand Down Expand Up @@ -754,12 +754,14 @@ message Cluster {

reserved "hosts", "tls_context", "extension_protocol_options";

// Configuration to use different transport sockets for different endpoints.
// The entry of ``envoy.transport_socket_match`` in the
// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`
// is used to match against the transport sockets as they appear in the list. The first
// :ref:`match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` is used.
// For example, with the following match
// Configuration to use different transport sockets for different endpoints. The entry of
// ``envoy.transport_socket_match`` in the :ref:`LbEndpoint.Metadata
// <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>` is used to match against the
// transport sockets as they appear in the list. If a match is not found, the search continues in
// :ref:`LocalityLbEndpoints.Metadata
// <envoy_v3_api_field_config.endpoint.v3.LocalityLbEndpoints.metadata>`. The first :ref:`match
// <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` is used. For example, with
// the following match
//
// .. code-block:: yaml
//
Expand All @@ -783,8 +785,9 @@ message Cluster {
// socket match in case above.
//
// If an endpoint metadata's value under ``envoy.transport_socket_match`` does not match any
// ``TransportSocketMatch``, socket configuration fallbacks to use the ``tls_context`` or
// ``transport_socket`` specified in this cluster.
// ``TransportSocketMatch``, the locality metadata is then checked for a match. Barring any
// matches in the endpoint or locality metadata, the socket configuration fallbacks to use the
// ``tls_context`` or ``transport_socket`` specified in this cluster.
//
// This field allows gradual and flexible transport socket configuration changes.
//
Expand Down Expand Up @@ -1148,6 +1151,22 @@ message Cluster {
// from the LRS stream here.]
core.v3.ConfigSource lrs_server = 42;

// [#not-implemented-hide:]
// A list of metric names from ORCA load reports to propagate to LRS.
//
// For map fields in the ORCA proto, the string will be of the form ``<map_field_name>.<map_key>``.
// For example, the string ``named_metrics.foo`` will mean to look for the key ``foo`` in the ORCA
// ``named_metrics`` field.
//
// The special map key ``*`` means to report all entries in the map (e.g., ``named_metrics.*`` means to
// report all entries in the ORCA named_metrics field). Note that this should be used only with trusted
// backends.
//
// The metric names in LRS will follow the same semantics as this field. In other words, if this field
// contains ``named_metrics.foo``, then the LRS load report will include the data with that same string
// as the key.
repeated string lrs_report_endpoint_metrics = 57;

// If track_timeout_budgets is true, the :ref:`timeout budget histograms
// <config_cluster_manager_cluster_stats_timeout_budgets>` will be published for each
// request. These show what percentage of a request's per try and global timeout was used. A value
Expand Down
10 changes: 7 additions & 3 deletions api/envoy/config/cluster/v3/outlier_detection.proto
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;

// See the :ref:`architecture overview <arch_overview_outlier_detection>` for
// more information on outlier detection.
// [#next-free-field: 25]
// [#next-free-field: 26]
message OutlierDetection {
option (udpa.annotations.versioning).previous_message_type =
"envoy.api.v2.cluster.OutlierDetection";
Expand All @@ -42,8 +42,8 @@ message OutlierDetection {
// Defaults to 30000ms or 30s.
google.protobuf.Duration base_ejection_time = 3 [(validate.rules).duration = {gt {}}];

// The maximum % of an upstream cluster that can be ejected due to outlier
// detection. Defaults to 10% but will eject at least one host regardless of the value.
// The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% .
// Will eject at least one host regardless of the value if :ref:`always_eject_one_host<envoy_v3_api_field_config.cluster.v3.OutlierDetection.always_eject_one_host>` is enabled.
google.protobuf.UInt32Value max_ejection_percent = 4 [(validate.rules).uint32 = {lte: 100}];

// The % chance that a host will be actually ejected when an outlier status
Expand Down Expand Up @@ -173,4 +173,8 @@ message OutlierDetection {
// Set of host's passive monitors.
// [#not-implemented-hide:]
repeated core.v3.TypedExtensionConfig monitors = 24;

// If enabled, at least one host is ejected regardless of the value of :ref:`max_ejection_percent<envoy_v3_api_field_config.cluster.v3.OutlierDetection.max_ejection_percent>`.
// Defaults to false.
google.protobuf.BoolValue always_eject_one_host = 25;
}
70 changes: 70 additions & 0 deletions api/envoy/config/core/v3/base.proto
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,59 @@ message RuntimeFeatureFlag {
string runtime_key = 2 [(validate.rules).string = {min_len: 1}];
}

message KeyValue {
// The key of the key/value pair.
string key = 1 [(validate.rules).string = {min_len: 1 max_bytes: 16384}];

// The value of the key/value pair.
bytes value = 2;
}

// Key/value pair plus option to control append behavior. This is used to specify
// key/value pairs that should be appended to a set of existing key/value pairs.
message KeyValueAppend {
// Describes the supported actions types for key/value pair append action.
enum KeyValueAppendAction {
// If the key already exists, this action will result in the following behavior:
//
// - Comma-concatenated value if multiple values are not allowed.
// - New value added to the list of values if multiple values are allowed.
//
// If the key doesn't exist then this will add pair with specified key and value.
APPEND_IF_EXISTS_OR_ADD = 0;

// This action will add the key/value pair if it doesn't already exist. If the
// key already exists then this will be a no-op.
ADD_IF_ABSENT = 1;

// This action will overwrite the specified value by discarding any existing
// values if the key already exists. If the key doesn't exist then this will add
// the pair with specified key and value.
OVERWRITE_IF_EXISTS_OR_ADD = 2;

// This action will overwrite the specified value by discarding any existing
// values if the key already exists. If the key doesn't exist then this will
// be no-op.
OVERWRITE_IF_EXISTS = 3;
}

// Key/value pair entry that this option to append or overwrite.
KeyValue entry = 1 [(validate.rules).message = {required: true}];

// Describes the action taken to append/overwrite the given value for an existing
// key or to only add this key if it's absent.
KeyValueAppendAction action = 2 [(validate.rules).enum = {defined_only: true}];
}

// Key/value pair to append or remove.
message KeyValueMutation {
// Key/value pair to append or overwrite. Only one of ``append`` or ``remove`` can be set.
KeyValueAppend append = 1;

// Key to remove. Only one of ``append`` or ``remove`` can be set.
string remove = 2 [(validate.rules).string = {max_bytes: 16384}];
}

// Query parameter name/value pair.
message QueryParameter {
// The key of the query parameter. Case sensitive.
Expand Down Expand Up @@ -411,6 +464,7 @@ message WatchedDirectory {
}

// Data source consisting of a file, an inline value, or an environment variable.
// [#next-free-field: 6]
message DataSource {
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.DataSource";

Expand All @@ -429,6 +483,22 @@ message DataSource {
// Environment variable data source.
string environment_variable = 4 [(validate.rules).string = {min_len: 1}];
}

// Watched directory that is watched for file changes. If this is set explicitly, the file
// specified in the ``filename`` field will be reloaded when relevant file move events occur.
//
// .. note::
// This field only makes sense when the ``filename`` field is set.
//
// .. note::
// Envoy only updates when the file is replaced by a file move, and not when the file is
// edited in place.
//
// .. note::
// Not all use cases of ``DataSource`` support watching directories. It depends on the
// specific usage of the ``DataSource``. See the documentation of the parent message for
// details.
WatchedDirectory watched_directory = 5;
}

// The message specifies the retry policy of remote data source when fetching fails.
Expand Down
8 changes: 3 additions & 5 deletions api/envoy/config/core/v3/config_source.proto
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,10 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
// xDS API and non-xDS services version. This is used to describe both resource and transport
// protocol versions (in distinct configuration fields).
enum ApiVersion {
// When not specified, we assume v2, to ease migration to Envoy's stable API
// versioning. If a client does not support v2 (e.g. due to deprecation), this
// is an invalid value.
AUTO = 0 [deprecated = true, (envoy.annotations.deprecated_at_minor_version_enum) = "3.0"];
// When not specified, we assume v3; it is the only supported version.
AUTO = 0;

// Use xDS v2 API.
// Use xDS v2 API. This is no longer supported.
V2 = 1 [deprecated = true, (envoy.annotations.deprecated_at_minor_version_enum) = "3.0"];

// Use xDS v3 API.
Expand Down
7 changes: 7 additions & 0 deletions api/envoy/config/core/v3/grpc_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
message GrpcService {
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.GrpcService";

// [#next-free-field: 6]
message EnvoyGrpc {
option (udpa.annotations.versioning).previous_message_type =
"envoy.api.v2.core.GrpcService.EnvoyGrpc";
Expand All @@ -55,6 +56,12 @@ message GrpcService {
// This limit is applied to individual messages in the streaming response and not the total size of streaming response.
// Defaults to 0, which means unlimited.
google.protobuf.UInt32Value max_receive_message_length = 4;

// This provides gRPC client level control over envoy generated headers.
// If false, the header will be sent but it can be overridden by per stream option.
// If true, the header will be removed and can not be overridden by per stream option.
// Default to false.
bool skip_envoy_headers = 5;
}

// [#next-free-field: 9]
Expand Down
Loading
Loading