Skip to content

node.extensions does not distinguish between compiled-in and configured bootstrap extensions #44333

@golden-shoe

Description

@golden-shoe

Description:
Bootstrap extensions that are compiled-in get reported as node.extensions, even when it's not explicitly configured.
However, there are no attributes for the control plane to distinguish between a bootstrap extension that is "compiled-in" vs "compiled-in and configured"

Repro Steps:

  1. Extension is pulled in via extensions_build_config.bzl
"envoy.bootstrap.internal_listener": "//source/extensions/bootstrap/internal_listener:config",
  1. We want to vend an internal listener on nodes that have envoy.bootstrap.internal_listener configured in bootstrap.json, e.g:
"bootstrapExtensions": [
    {
      "name": "envoy.bootstrap.internal_listener",
      "typedConfig": {
        "@type": "type.googleapis.com/envoy.extensions.bootstrap.internal_listener.v3.InternalListener"
      }
    }
  ],
  1. However, some nodes may not have internal listener configured despite running the same binary.
  2. Control Plane see "envoy.bootstrap.internal_listener" in node.extensions, but has no way of knowing whether the extension is explicitly configured
  3. The node that does not explicit register internal listener then sees error:
[external/envoy/source/extensions/config_subscription/grpc/delta_subscription_state.cc:282] delta config for type.googleapis.com/envoy.config.listener.v3.Listener rejected: Error adding/updating           
listener(s) tunneling_encap_listener: error adding listener named 'tunneling_encap_listener': InternalListener bootstrap extension is mandatory 

A few notes

  1. Current workaround is to use node metadata to signal which bootstrap extension is configured
  2. Control plane should have a way to distinguish whether an extension is configured or not - either via node or extension state.

Metadata

Metadata

Assignees

Labels

area/xdsenhancementFeature requests. Not bugs or questions.help wantedNeeds help!no stalebotDisables stalebot from closing an issue

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions