Closed
Description
I believe that Channel's usage of a Kubernetes VirtualService could just be a Kubernetes Ingress resource (possibly implemented by Istio, possible not).
I'm talking about here:
eventing/pkg/controller/channel/controller.go
Line 511 in 904f403
Activity
evankanderson commentedon Jul 31, 2018
scothis commentedon Jul 31, 2018
The VirtualService is used to forward traffic for a specific Channel to the Bus. It also sets the HTTP Host header with a canonical value that the bus uses to know which channel the incoming request is for.
All of this traffic is originating from inside the cluster and generally should not be exposed outside of the cluster. Although there may be cases where we would want a channel to opt-in to being exposed externally.
scothis commentedon Aug 13, 2018
Note: in this context, service is always a k8s service and not a knative serving service.
There are two key attributes of the current behavior that are worth trying to preserve:
We can remove the VirtualService (and the Istio requirement for eventing) if we:
.status.domainInternal
with the new nameBy making each Channel's Service name unique in the cluster, we can continue to support either short DNS name or fully qualified names as the host. Strictly speaking, only a ClusterBus could have a name collision between namespaces.
If Istio is installed on the cluster, the Bus/Channels can still benefit from it's capabilities, we are simply not requiring Istio in order to use a Bus.
/assign @scothis
evankanderson commentedon Aug 15, 2018
Question re: item 1 in your changes. Isn't the Channel's Service already unique within the cluster? Or are you concerned about receiving a
Host
header with only the namespace-local name and not being able to resolve it uniquely across the entire cluster? How does VirtualService help with this (if at all)?I haven't experimented with it, but it's possible that the destination IP can be used to distinguish between different services pointed at the same set of labels. (I might get a chance to try this out tomorrow.)
scothis commentedon Aug 15, 2018
Channel's are unique within a namespace, and the service is currently derived from the channel's name, so collisions between namespaces is possible.
This is the concern I'm attempting to resolve
We use the VirtualService today to rewrite the
Host
header with a canonical name for the Channel, regardless how the service is invoked. (my-channel
vsmy-channel.default
vsmy-channel.default.svc.cluster.local
vs an ip)I would expect the destination IP to be the bus dispatcher pod that is receiving the traffic. I'm curious as to what you find.
Decouple eventing from Istio
Decouple eventing from Istio
lindydonna commentedon Mar 26, 2019
/kind feature-request
Harwayne commentedon Apr 1, 2019
To be clear about this feature request. Which of the following are we trying to do?
Pod
, but still require Istio to be installed.My reading of the issue thus far is that it wants to be able to remove Istio in its entirety. Is that correct?
akashrv commentedon Apr 1, 2019
/assign
19 remaining items