argoproj / argo-rollouts

Progressive Delivery for Kubernetes
https://argo-rollouts.readthedocs.io/
Apache License 2.0
2.73k stars 852 forks source link

Subset Traffic Splitting without Weights and Header Matching #3638

Open bgreen9595 opened 3 months ago

bgreen9595 commented 3 months ago

Summary

I have a project with a bit of a complicated traffic management situation. We want to use Rollouts to have two versions of pods running at the same time, and split traffic based on Destination Rule Subsets but instead of splitting the weight based on traffic, we'd like to split the weight based on Header Matching.

The goal is to have canary traffic flow through canary microservices (if they exist). I have a virtualservice that does a match based on the incoming header, and have tested this virtualservice in isolation without rollouts. However, when I try to implement this in Rollouts, I get a couple issues:

Does anyone know a good way to implement this? Or would this be a new feature in Argo Rollouts?

Use Cases


Message from the maintainers:

Impacted by this bug? Give it a 👍. We prioritize the issues with the most 👍.

kostis-codefresh commented 3 months ago

Traffic splitting doesn't work with Blue/Green. That is by design, as blue/green is either 0% or 100% traffic.

Can you post the rollout spec that you have right now please?

bgreen9595 commented 2 months ago

Traffic splitting doesn't work with Blue/Green. That is by design, as blue/green is either 0% or 100% traffic.

Can you post the rollout spec that you have right now please?

@kostis-codefresh I guess if we don't split the traffic via BG, we need to split the traffic via a temporary URI that becomes available during the rollout, and then have the traffic for that new canary pods use the original uri match again. Is this possible using the canary strategy?

kostis-codefresh commented 2 months ago

What you describe should happen automatically with Argo Rollouts.

In the case of B/G you have a URL that starts with "blue" and then points to "green" when promoted. In the case of Canary you can actually have 3 urls, one that is always "stable", one that is always "preview" and one that follows the canary percentage.

Or am I missing something here?