Closed kdorosh closed 4 years ago
there are a number of breaking changes that i'm tracking:
prefixRewrite
in route pluginsdestinations
in tcpGateway
(for Gateway)single
vs multiple
destination type (from the route action); simply make destination
an array of destinations; duplicate of https://github.com/solo-io/gloo/issues/1928ResourceRef
without providing a namespace - should default to the namespace of the referencing object
there may be more i detect as i go through, but this is the list i have currently
+1 to array of destinations
. All sounds good to me. Two comments:
enterprise
opaque types. Perhaps we could transfer all current use cases to strong-typing and keep the field as is in case there is a need for it in future GlooE features.~
feature
branch so we don't need to release multiple breaking changes? @EItanya recently enabled branch protection on feature-xyz
branchesAdding to the list here:
settings
nesting and proto duplication)
oneof
sConfig
message and flatten this up a level
after discussion with @ilackarms and @yuval-k , leaning towards a rename of plugins
rather than a complete removal/flattening of the plugins API.
Flattening would be challenging, and possibly more trouble than it's worth because we'd have to flatten plugins to two different messages for VirtualHost
s and Route
s:
This means that every plugin we add in the future would have to be added and documented twice, and would lead to large amounts of API bloat. (proto3 any
and writing our own marshal/unmarshal logic for gogoproto are even uglier alternatives)
The reason for the near-duplicate messages is to keep the Gloo/Gateway abstraction -- Gloo Route
s (and therefore Gloo VirtualHost
s with Gloo Route
s) don't need to and shouldn't know about route delegation (the differing config on the Route
messages).
A proper rename addresses all of @rickducott 's concerns (bar the unnecessary nesting, which I'm arguing here is necessary)
What is the proposed name?
Just to be clear, this is what we have now:
plugins:
hostRewrite:
hostRewrite: foo
prefixRewrite:
prefixRewrite: bar
...
And after the change, we will have:
newName:
hostRewrite: foo
prefixRewrite: bar
...
Is that right?
Initial rename idea is trafficPolicy
.
Yes, we would still be flattening the host/prefix rewrites.
Another recent @ilackarms idea is to delete the VirtualHost
abstraction altogether from the Gateway API, looking into it more
edit: I'm a big fan of this idea -- as it flattens nesting while making it clearer that our VirtualService API translates (eventually) to Envoy's VirtualHost API
@kdorosh we can remove the virtualHost
field from the Virtual Service entirely + move field in the VirtualHost
up one level.
the current structure exists because the original virtualHost was imported directly from gloo
@rickducott @kdorosh personally i like options
as a replacement for plugins
. it communicates that these are optional fields which extend the basic functionality (route to a destination)
another api break worth considering:
virtualService
refs should only select vs in their own namespace. currently they select all vs in the cluster, which is problematic for multi-tenant and self-service config modelsDestination
message; duplicate of https://github.com/solo-io/gloo/issues/1931message Destination {
oneof destination_type {
core.solo.io.ResourceRef upstream = 10;
KubernetesServiceDestination kube = 11;
ConsulServiceDestination consul = 12;
}
DestinationSpec destination_spec = 2;
Subset subset = 3;
}
My concerns:
destination_type
s support DestinationSpec
and Subsets
DestinationSpec
s intuitively feel like they should be destination_types (e.g. aws
, azure
)Subsets
is a pretty low-level concept that I think we can expose in more intuitive ways (e.g. ConsulServiceDestination
s allow you to target services based on tags and data centers; behind the scenes we use subsets, but the user does not have to be aware of that).I think we can make this central part of our APIs much more user-friendly. Such a refactor will however require vast changes to most of Gloo's components, e.g. FDS, UDS, a good number of plugins, and all the Gloo translation logic.
upstreamSpec
, it looks weird nested under spec
:
spec:
upstreamSpec:
linking
as relevant (potentialy breaking) changes
// prefix for addressing envoy stats for the tcp proxy
string stat_prefix = 3;
In HttpListener and TcpListener into appropriate HttpConnectionManagerSettings
message, or up higher because they apply to all listener types
duplicate of https://github.com/solo-io/gloo/issues/1932
I opened individual issues for each unfinished bullet point to track any remaining open work.
No need to track progress on this epic anymore now that Gloo 1.0 is out.
Virtual Service API can be cleaned up:
feature-rc1
branch tomaster
andmaster
tov0.x.y
; duplicate of https://github.com/solo-io/gloo/issues/1843TODO(kdorosh)
and remove deprecated codepath supportTicket is to determine the difficulty of implementation and whether the changes will have an acceptable payoff in the long run.
Other ideas include moving the entire
RoutePlugins
config up one level: https://github.com/solo-io/gloo/blob/master/projects/gateway/api/v1/virtual_service.proto#L215Open to concrete ideas/suggestions for other simplifications here.
Anything come to mind @rickducott @yuval-k @ilackarms @EItanya @mitchdraft ?