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

Enhancement proposal for OVN secondary networks #811

Closed
wants to merge 24 commits into from

Conversation

maiqueb
Copy link
Contributor

@maiqueb maiqueb commented Jun 15, 2021

No description provided.

@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 15, 2021
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jun 15, 2021

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci openshift-ci bot requested review from abhat and squeed June 15, 2021 16:16
@maiqueb maiqueb force-pushed the ovn-secondary-networks branch from 9432582 to a2dbbe3 Compare June 22, 2021 12:01
@maiqueb maiqueb marked this pull request as ready for review June 23, 2021 14:19
@openshift-ci openshift-ci bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 23, 2021
@maiqueb maiqueb force-pushed the ovn-secondary-networks branch 2 times, most recently from 4c8370c to 78e7600 Compare June 23, 2021 15:05
maiqueb added 8 commits July 23, 2021 11:35
Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
Also add an example featuring external network connectivity.

Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
@maiqueb
Copy link
Contributor Author

maiqueb commented Aug 3, 2021

@squeed
Copy link
Contributor

squeed commented Aug 3, 2021

I believe we had talked about a CRD for defining OVN-Kubernetes networks, rather than pulling them from the NAD. Do you still want to work on that?

@maiqueb maiqueb force-pushed the ovn-secondary-networks branch from aa04fd2 to 042522e Compare August 3, 2021 12:02
@maiqueb
Copy link
Contributor Author

maiqueb commented Aug 3, 2021

I believe we had talked about a CRD for defining OVN-Kubernetes networks, rather than pulling them from the NAD. Do you still want to work on that?

Sure @squeed, just pushed a version with that I had half-prepared.

Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
@maiqueb maiqueb force-pushed the ovn-secondary-networks branch from 042522e to 61e3034 Compare August 3, 2021 12:14
@mikemckiernan
Copy link

My comment is pretty close to cosmetic, so I'll make it here rather than in a review. In the spec.config, can you use hasExternalConnectivity rather than has_external_connectivity? I believe that mixed case is the convention and would provide a consistent end-user experience.

I skimmed a bit at https://github.com/containernetworking/cni, but I could not locate explicit guidance.


type OVNSecondaryNetworkSpec struct {
// Subnet is a RFC 4632/4291-style string that represents an IP address and prefix length in CIDR notation
Subnet string `json:"subnet"`
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How are subnets validated? Do we prevent overlapping subnets with other things in the cluster? (other secondary networks, node CIDRs for the primary network, ClusterCIDR, serviceCIDR, etc)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, I guess that it only matters if the overlay has external connectivity.

We could ensure that we only render NADs for disconnected subnets, or for subnets with external connectivities that do not clash with the subnets you've listed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things:
1 - Can you explain what this field does? Does it provide IPAM, or is it just for routing? Does it cause a gateway to be created (at the .1)? Too much magic in this field...
2 - This should always be an array for dual-stack (or just disjoint ranges).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things:
1 - Can you explain what this field does? Does it provide IPAM, or is it just for routing? Does it cause a gateway to be created (at the .1)? Too much magic in this field...

I'll explain better.

2 - This should always be an array for dual-stack (or just disjoint ranges).

I am proposing a very simple model here; one IP per interface, and 1 subnet per logical switch. If the user desires dual stack, the option would be to create 2 OverlayNetworks, each with an IP version.

Is this model too narrow minded ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Starting simple is fine. However, let's just make this dual-stack from the get-go.

A convention is to have arrays for all IPs, and reject as invalid if there is more than one ip / cidr per family.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

type OVNSecondaryNetworkSpec struct {
// Subnet is a RFC 4632/4291-style string that represents an IP address and prefix length in CIDR notation
Subnet string `json:"subnet"`
HasExternalConnectivity bool `json:"hasExternalConnectivity,omitempty"`
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should spell out the guarantees around this. Is traffic going to be NAT-ed? Directly dumped onto the host's underlay? If NAT then what IP does it get NAT-ed to? Are there any guarantees around ingress to this network, or is only reply traffic that is allowed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No ingress at all is in scope of this feature; We might eventually desire it, but it would be only via kubernetes services, which still need to be made available for secondary networks. I can add this to the non-goals section of this enhancement proposal, for clarity.

Regarding how egress is implemented, I would prefer to avoid NAT - using a localnet port on the overlay logical switch seems preferable.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps ExternalConnectivity should be its own struct, to allow for expansion? What potential options are there?

  • no external access
  • using the node's gateway router
  • A centralized gateway

Copy link
Contributor Author

@maiqueb maiqueb Aug 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using the node's gateway router, afaiu, implies that we will be sharing the OVN db between OVN-K and whatever implements these overlays, right ?

That would only be an option if this feature is implemented in OVN-Kubernetes - and, imo, is one of the advantages of implementing it there - i.e. we wouldn't need to implement a centralized gateway to provide external connectivity to the pods.

Never-the-less, I think having ExternalConnectivity as a separate struct is a good suggestion, I'll model it; thanks!

@openshift-bot
Copy link

Inactive enhancement proposals go stale after 28d of inactivity.

See https://github.com/openshift/enhancements#life-cycle for details.

Mark the proposal as fresh by commenting /remove-lifecycle stale.
Stale proposals rot after an additional 7d of inactivity and eventually close.
Exclude this proposal from closing by commenting /lifecycle frozen.

If this proposal is safe to close now please do so with /close.

/lifecycle stale

@openshift-ci openshift-ci bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jul 19, 2022
@maiqueb
Copy link
Contributor Author

maiqueb commented Jul 19, 2022

/remove-lifecycle stale

@openshift-ci openshift-ci bot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jul 19, 2022
@openshift-bot
Copy link

Inactive enhancement proposals go stale after 28d of inactivity.

See https://github.com/openshift/enhancements#life-cycle for details.

Mark the proposal as fresh by commenting /remove-lifecycle stale.
Stale proposals rot after an additional 7d of inactivity and eventually close.
Exclude this proposal from closing by commenting /lifecycle frozen.

If this proposal is safe to close now please do so with /close.

/lifecycle stale

@openshift-ci openshift-ci bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Aug 17, 2022
@openshift-bot
Copy link

Stale enhancement proposals rot after 7d of inactivity.

See https://github.com/openshift/enhancements#life-cycle for details.

Mark the proposal as fresh by commenting /remove-lifecycle rotten.
Rotten proposals close after an additional 7d of inactivity.
Exclude this proposal from closing by commenting /lifecycle frozen.

If this proposal is safe to close now please do so with /close.

/lifecycle rotten
/remove-lifecycle stale

@openshift-ci openshift-ci bot added lifecycle/rotten Denotes an issue or PR that has aged beyond stale and will be auto-closed. and removed lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. labels Aug 24, 2022
@maiqueb
Copy link
Contributor Author

maiqueb commented Aug 24, 2022

/remove-lifecycle rotten

@openshift-ci openshift-ci bot removed the lifecycle/rotten Denotes an issue or PR that has aged beyond stale and will be auto-closed. label Aug 24, 2022
@dhellmann
Copy link
Contributor

/close

Since this isn't being actively developed, let's close the PR to keep the review queue clear for work that is more urgent. We can reopen this PR or submit a new one when work resumes.

@openshift-ci openshift-ci bot closed this Aug 25, 2022
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Aug 25, 2022

@dhellmann: Closed this PR.

In response to this:

/close

Since this isn't being actively developed, let's close the PR to keep the review queue clear for work that is more urgent. We can reopen this PR or submit a new one when work resumes.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@maiqueb
Copy link
Contributor Author

maiqueb commented Jan 13, 2023

/reopen

We will resume work on this enhancement in the following days / weeks.

@openshift-ci openshift-ci bot reopened this Jan 13, 2023
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 13, 2023

@maiqueb: Reopened this PR.

In response to this:

/reopen

We will resume work on this enhancement in the following days / weeks.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 13, 2023

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign dougbtv for approval by writing /assign @dougbtv in a comment. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 13, 2023

@maiqueb: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/markdownlint 1084e79 link true /test markdownlint

Full PR test history. Your PR dashboard.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@openshift-bot
Copy link

Inactive enhancement proposals go stale after 28d of inactivity.

See https://github.com/openshift/enhancements#life-cycle for details.

Mark the proposal as fresh by commenting /remove-lifecycle stale.
Stale proposals rot after an additional 7d of inactivity and eventually close.
Exclude this proposal from closing by commenting /lifecycle frozen.

If this proposal is safe to close now please do so with /close.

/lifecycle stale

@openshift-ci openshift-ci bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Feb 11, 2023
@openshift-bot
Copy link

Stale enhancement proposals rot after 7d of inactivity.

See https://github.com/openshift/enhancements#life-cycle for details.

Mark the proposal as fresh by commenting /remove-lifecycle rotten.
Rotten proposals close after an additional 7d of inactivity.
Exclude this proposal from closing by commenting /lifecycle frozen.

If this proposal is safe to close now please do so with /close.

/lifecycle rotten
/remove-lifecycle stale

@openshift-ci openshift-ci bot added lifecycle/rotten Denotes an issue or PR that has aged beyond stale and will be auto-closed. and removed lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. labels Feb 18, 2023
@openshift-bot
Copy link

Rotten enhancement proposals close after 7d of inactivity.

See https://github.com/openshift/enhancements#life-cycle for details.

Reopen the proposal by commenting /reopen.
Mark the proposal as fresh by commenting /remove-lifecycle rotten.
Exclude this proposal from closing again by commenting /lifecycle frozen.

/close

@openshift-ci openshift-ci bot closed this Feb 26, 2023
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 26, 2023

@openshift-bot: Closed this PR.

In response to this:

Rotten enhancement proposals close after 7d of inactivity.

See https://github.com/openshift/enhancements#life-cycle for details.

Reopen the proposal by commenting /reopen.
Mark the proposal as fresh by commenting /remove-lifecycle rotten.
Exclude this proposal from closing again by commenting /lifecycle frozen.

/close

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
lifecycle/rotten Denotes an issue or PR that has aged beyond stale and will be auto-closed.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants