On 11/20/2018 02:13 AM, Han Zhou wrote:
Hi Mark, thanks for writing up the interesting topic. I agree with Guru that holding packets and waiting for control plane change to get ready doesn't seem to work/scale. I am curious about the problem and I want to make sure I understand it correctly. It sounds like some FaaS scenario, is it? Is it reasonable in such scenario to keep at least one pod for the VIP even if it is idle? If not, is there any example system that actually works well by spinning up pods after requests came?

This won't answer your questions directly, but I just met with OpenShift networking devs and cleared something up. They currently have the ability to spin up pods based on incoming packets to a VIP. However, what they DON'T have is the ability to hold the incoming packet and reinject it once pods are spun up. As it turns out, this is a new feature request, rather than something that would put OVN in feature parity with the current OpenShift SDN.


Regards,
Han
On Fri, Nov 16, 2018 at 11:28 AM Guru Shetty <[email protected] <mailto:[email protected]>> wrote:

    I don't have specific comments. But I do believe that "holding"
    packet may
    not work well as the time taken to create new pods, assign IPs to those
    pod, create new load-balancer rules for the new pods, will be in
    "seconds".


    On Fri, 9 Nov 2018 at 12:26, Mark Michelson <[email protected]
    <mailto:[email protected]>> wrote:

     > Yesterday during the OVN IRC meeting, I brought up a subject that
     > requires a bit more discussion.
     >
     > The issue: OpenShift has a use case where it uses a load
    balancer. The
     > VIP of the load balancer is backed with k8s pods. During times of
     > inactivity, these pods may be deleted due to idleness.
    Eventually, all
     > backing pods may be removed due to idleness. What OpenShift wants is
     > when a packet arrives for the load balancer VIP in this scenario,
    they
     > want to be able to react by creating new backing pods, updating load
     > balancer configuration, and reprocessing the packet so that it will
     > reach a destination pod.
     >
     >  From an OVS/OVN perspective, what needs to happen is that based
    on an
     > incoming packet, an outside party needs to be notified to take an
     > action. The interesting part is at what layer the third party is
     > notified and how the incoming packet is further handled. We've
    discussed
     > this within Red Hat and have three ideas for how to do this.
     >
     > 1) The database approach
     > We add a new table to the southbound database, perhaps called
     > CMS_Events. In the situation where OpenShift wants unidling
    behavior, it
     > sets an option that results in ovn-controller installing a flow
    in OVS
     > to send the incoming packet to ovn-controller. ovn-controller, upon
     > receiving the incoming packet, buffers the packet and puts a new
    row in
     > the CMS_Events table. The CMS, upon seeing the event, takes its
     > necessary action. In this particular case, the CMS action is to
    spin up
     > pods and alter load balancer configuration. The CMS then sets a
    value in
     > row to indicate it has handled the event. ovn-controller, seeing the
     > event is handled, deletes the event and continues processing the
    packet,
     > allowing it to reach its destination.
     >
     > 2) The message passing approach
     > In the situation where OpenShift wants unidling behavior, it sets an
     > option that results in ovn-controller installing a flow in OVS to
    send
     > the incoming packet to ovn-controller. ovn-controller, upon receiving
     > the packet, buffers the packet and sends some sort of message to the
     > CMS. The contents of this message and the method by which the
    message is
     > sent would likely be dependent on the CMS in use. The CMS would
    act on
     > this message, spinning up new pods and altering load balancer
     > configuration. The CMS would then send a message back to
    ovn-controller,
     > where ovn-controller would continue processing the packet,
    allowing it
     > to reach its destination.
     >
     > 3) The second controller approach
     > In the situation where OpenShift wants unidling behavior, it sets an
     > option that results in ovn-controller installing a flow in OVS to
    send
     > the incoming packet to an external controller. The external
    controller,
     > upon receiving the packet, spins up new pods and alters load balancer
     > configuration. The external controller then (somehow) sends the
    packet
     > back into OVS so it can reach its destination.
     >
     > I presented the database approach during the meeting yesterday,
    but it's
     > worth presenting the other ideas we've discussed. Does any one of
    these
     > three ideas jump out as being significantly better than the
    others? Do
     > you have other ideas for how an external service can be contacted
    based
     > on the reception of a packet destined for a certain IP address?
     >
     > Thanks,
     > Mark Michelson
     > _______________________________________________
     > dev mailing list
     > [email protected] <mailto:[email protected]>
     > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
     >
    _______________________________________________
    dev mailing list
    [email protected] <mailto:[email protected]>
    https://mail.openvswitch.org/mailman/listinfo/ovs-dev


_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to