consul/connect: fix bug causing high cpu with multiple connect sidecars in group #10883
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes a bug where the underlying Envoy process of a Connect gateway
would consume a full core of CPU if there is more than one sidecar or gateway
in a group. The utilization was being caused by Consul injecting an
envoy_ready_listener
on
127.0.0.1:8443
, of which only one of the Envoys would be able to bind to.The others would spin in a hot loop trying to bind the listener.
As a workaround, we now specify
-address
during the Envoy bootstrap configstep, which is how Consul maps this ready listener. Because there is already
the
envoy_admin_listener
, and we need to continue supporting running gatewaysin host networking mode, and in those case we want to use the same port
value coming from the
service.port
field, we now bind the admin listener tothe
127.0.0.2
loop-back interface, and the ready listener takes127.0.0.1
.This shouldn't make a difference in the 99.999% use case where envoy is
being run in its official docker container. Advanced users can reference
${NOMAD_ENVOY_ADMIN_ADDR_<service>}
(as they ought to) if needed,as well as the new variable
${NOMAD_ENVOY_READY_ADDR_<service>}
for theenvoy_ready_listener
.Fixes #10826