envoyproxy/envoy

Proposal: add config blob discovery

Open

#11,547 opened on Jun 10, 2020

View on GitHub
 (18 comments) (0 reactions) (0 assignees)C++ (5,373 forks)batch import
area/xdsdesign proposalhelp wanted

Repository metrics

Stars
 (27,997 stars)
PR merge metrics
 (Avg merge 8d) (378 merged PRs in 30d)

Description

This proposal is to add a generic Blob Discovery Service that allows the control plane to push arbitrary data blobs and keep them up to date using resource versions. The motivation is Wasm extension files which are realistically on the order of MBs. The current solutions have many issues:

  • inlining MB sized binaries in LDS/RDS config is problematic and can cause head-of-line blocking in ADS;
  • URL fetcher has no interaction with xDS subscriptions. That means first xDS update is always NACKed. URL fetches also retrieves the same resource repeatedly, and does not re-fetch automatically. The failure mode of fetch failing after ACK can be an unrecoverable configuration error.

The API extension is to add a Blob resource reference and Blob config source to RemoteDataSource.

Blob discovery service client would be similar to RDS behavior. It would maintain a list of blobs indexed by references from Wasm and other extensions.

The behavior change in Wasm extensions would be:

  • Wasm issues a subscription for new blob references and puts the underlying listener into warming at first
  • On the first update, the listener is activated
  • On subsequent updates, Wasm performs an internal update (how it does merits more discussion, since creation and draining of VMs is expensive)

It is worth mentioning that BDS can also subsume SDS since the payload is mostly opaque in SDS.

Contributor guide