Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pod to Pod Bandwidth Reservation #197

Open
mudverma opened this issue Mar 19, 2020 · 3 comments
Open

Pod to Pod Bandwidth Reservation #197

mudverma opened this issue Mar 19, 2020 · 3 comments
Labels
enhancement New feature or request major feature Features requiring thorough changes, and multiple PRs

Comments

@mudverma
Copy link

Proposal/Question:

For Bandwidth sensitive telco and or video/audio streaming applications we need to block bandwidth between pods. This is specially needed in service chaining scenarios.

Currently calico supports local traffic shaping (bandwidth reservation) per pod. What we want is bandwidth reservation between pods.

Can this be achieved with current implementation? If not, we are considering adding such a feature.

Screenshot 2020-03-16 at 3 50 07 PM

We want to take community opinion on this.

@Levovar Levovar added enhancement New feature or request major feature Features requiring thorough changes, and multiple PRs labels Mar 19, 2020
@Levovar
Copy link
Collaborator

Levovar commented Mar 19, 2020

yeah, the holy grail of universal traffic shaping :)
I do agree with you that this is required, and we were also internally considering this for a time now.
currently it is not possible

I don't have an exact design for this, but such a solution should adhere to some basic requirements:

  • it should be a universal solution, e.g. work with at least all dyanmic CNI backends (SR-IOV, MACVLAN, IPVLAN)
  • because of this the shaping rules (I guess some iptables magic) probably need to be provisioned inside the Pod's network namespace
  • need to be API driven. I think this shouldn't be added to the existing DANM API, but would be better controlled via a new CRD, with a new independent Controller applying the changes (similarly to a NetworkPolicy Controller)
    as such htis functionality would better belong to our utility repo, rather than the core (https://github.com/nokia/danm-utils)

@mudverma
Copy link
Author

@Levovar Thank You for detailed insights. Indeed helpful. You mentioned that you had considered this internally. What things did you consider and what blockers you guys faced, if any. Also, what were the reasons not to pursue this until now. Just trying to get as much information as possible, before we proceed.

@Levovar
Copy link
Collaborator

Levovar commented Mar 24, 2020

@mudverma well, besides that it always seems like we have higher priority items, I think we first wanted to make sure that if such a functionality is introduced, not everyone can influence, or change these settings once applied. So the new (ClusterNetwork, TenantNetwork) APIs were always considered higher prio, but that is done now.
The other was that besides traffic shaping, we also consider generic network policies as a valid use-case. Generic meaning again working with at least all dynamic backends.
As we always imagined network policing rules should be created inside the Pod's netns, traffic shaping and network policing becomes almost the same problem (i.e. provision certain iptables rules inside the Pod's netns); we were thinking about creating one definitive API to capture both requirements

but I think it is probably anyway better to separate these needs, one API for shaping, one for policing, with their own, independent, optional controllers.
so this is just a thought process we had in the past, but I see no real blockers today

if you do really implement such functionality, I think it would be best to have an online design discussion first once you have some ideas regarding APIs / architecture etc.
or a design proposal PR, or something similar
I think it is beneficial to discuss the framework before an implementation, tends to save some rework effort usually :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request major feature Features requiring thorough changes, and multiple PRs
Projects
None yet
Development

No branches or pull requests

2 participants