Background
The exec-based API can be awkward for a few reasons:
- Many plugins need a daemon anyways
- Writing binaries to disk is a security risk
- Executing binaries in a containerized environment is fragile (not everything can / should be statically linked)
Considerations
- Not all CNI runtimes are daemons, so this would need to be optional (or we continue supporting 1.0 indefinitely)
- Golang and namespaces is still ripe for bugs
- Should we use gRPC?
- If a plugin is used for more than one "network", does that mean multiple processes, or should plugins support "multitenancy"?
Advantages
- Daemonized plugins could support additional lifecycle / methods
- garbage collection
- initialization
- Easier to deploy in as a container
Bidirectionality?
Would we want plugins to be able to send events to the runtime? Or should we still model this as a request-response protocol?
Background
The exec-based API can be awkward for a few reasons:
Considerations
Advantages
Bidirectionality?
Would we want plugins to be able to send events to the runtime? Or should we still model this as a request-response protocol?