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

Reconcile RouteAdvertisements in cluster manager #4691

Open
wants to merge 15 commits into
base: master
Choose a base branch
from

Conversation

jcaamano
Copy link
Contributor

@jcaamano jcaamano commented Sep 2, 2024

Reconciles RouteAdvertisements in cluster manager.

For each selected FRRConfiguration and node, another FRRConfiguration might be generated:

  • If pod network advertisements are enabled, the generated FRRConfiguration will announce from the node the selected network prefixes for that node on the matching target VRFs.
  • If EgressIP advertisements are enabled, the generated FRRConfiguration will announce from the node the EgressIPs allocated to it on the matching target VRFs.
  • If pod network advertisements are enabled, the generated FRRConfiguration will import the target VRFs on the selected networks as required.
  • The generated FRRConfiguration will be labeled with the RouteAdvertisements name and annotated with an internal key to facilitate updating it when needed.

The controller will also annotate the NADs of the selected networks with the RouteAdvertisements that select them to facilitate processing for downstream zone/node controllers.

Finally, it will update the status of the RouteAdvertisements.

The controller processes selected events of RouteAdvertisements, FRRConfigurations, Nodes, EgressIPs and NADs.

Currently based on top of #4472 and #4533

@jcaamano jcaamano requested a review from a team as a code owner September 2, 2024 11:33
@github-actions github-actions bot added kind/documentation All issues related to documentation feature/egress-ip Issues related to EgressIP feature area/unit-testing Issues related to adding/updating unit tests area/e2e-testing feature/services&endpoints All issues related to the Servces/Endpoints API feature/egress-qos labels Sep 2, 2024
@jcaamano jcaamano force-pushed the cm-routeadvertisements branch 4 times, most recently from 3f494ed to 5a9aafb Compare September 6, 2024 16:33
@github-actions github-actions bot added the feature/kubevirt-live-migration All issues related to kubevirt live migration label Sep 9, 2024
@jcaamano jcaamano force-pushed the cm-routeadvertisements branch 3 times, most recently from 5b5aa6d to 43eafc0 Compare September 10, 2024 17:39
Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
Adds to NetInfo the concept of reconcilable network information. This is
network information that can change dynamically and network controllers
should be able to reconcile. This includes NADs which is information
that network controllers should have already been capable of reconciling
although they currently don't (for example, for multinetwork policies).
Also includes VRFs the network is leaking/advertising to, per node, that
network controllers need to be aware of and rec0oncile as it changes.

Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
Add the ability for network controllers to reconcile some network
information changes. Currently just changes of the VRFs the network is
leaking/advertising to. Support for reconciling NAD changes is not
included in this commit.

Currently reconciles if the network is advertised or not:
- for OVN network controller to configure or not the pod IP to node IP
  SNAT on the GR for a node of its zone
- for node network controller to configure or not br-ex flows to
  redirect pod IP ingress traffic to the OVN network

This should be enough to provide direct ingress capabilities for the
default network in SGW mode.

Note that secondary network controllers don't reconcile anything as
route advertising is not supported on them. Also cluster manager network
controllers don't reconcile much as they don't have the need.

Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
The plan is for the NAD controller to fetch route advertising
information on behalf of network controllers. It will have to do so for
the default network as well and will need access to its network
controller to reconcile that information.

Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
As node controllers will need to be informed of related events in new
level driven controllers to come.

Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
This annotation will be set by a future cluster manager controller on
the NADs and will list the names of route advertisements that apply to
the given NAD. This will ease processing time of other zone/node
controllers that need to track which route advertisements apply to a
network avoiding them from processing all route advertisements on each
of their reconciliation loops.

Note that this will happen for the default network as well. For that
probably a dummy NAD on ovn-kubernetes namespace is the best option.

Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
The network manager running within the NAD controller will, upon
ensuring a network, fetch the VRFs per node a pod network is being
leaked/advertised to from the applicable route advertisements
configuration, and include it in the network information used when
creating a network controller, or triggering a reconciliation if it was
already running.

This relies on annotations set by cluster manager on NADs pointing to
the route advertising configuration that applies to the network which
will come in a future PR/commit.

This includes the default network for which the ever existing default
network controller is used (instead of creating a new network
controller). If necessary, it is assumed that cluster manager will
create a dummy NAD for the default network in ovn-k namespace to set
annotations on. If no NADs for the default network exist or if they have
no annotations, network manager will reconcile the default network to a
default configuration (instead of destroying the network controller).

Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
For go-controller:

go get k8s.io/api v0.31.0
go get k8s.io/apimachinery v0.31.0
go get k8s.io/client-go v0.31.0
go get k8s.io/component-helpers v0.31.0
go get k8s.io/kubernetes v1.31.0
go get k8s.io/apiextensions-apiserver v0.31.0 // indirect
go get k8s.io/component-base v0.31.0 // indirect
go get sigs.k8s.io/controller-runtime v0.19.0
go mod vendor && go mod tidy

Fixed API changes and updated codegen

For e2e tests:

go get k8s.io/api v0.31.0
go get k8s.io/apimachinery v0.31.0
go get k8s.io/client-go v0.31.0
go get k8s.io/klog v1.0.0
go get k8s.io/kubernetes v1.31.0
go get k8s.io/pod-security-admission v0.31.0
go get k8s.io/apiextensions-apiserver v0.31.0
go get k8s.io/apiserver v0.31.0
go get k8s.io/cloud-provider v0.31.0
go get k8s.io/component-base v0.31.0
go get k8s.io/component-helpers v0.31.0
go get k8s.io/controller-manager v0.31.0
go get k8s.io/kms v0.31.0
go get k8s.io/kubelet v0.31.0
go get k8s.io/kubectl v0.31.0

(konnectivity-client is not at 0.31 yet)

Fixed API changes

Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/e2e-testing area/unit-testing Issues related to adding/updating unit tests feature/egress-ip Issues related to EgressIP feature feature/egress-qos feature/kubevirt-live-migration All issues related to kubevirt live migration feature/services&endpoints All issues related to the Servces/Endpoints API kind/documentation All issues related to documentation
Projects
Status: Todo
Development

Successfully merging this pull request may close these issues.

1 participant