Protocols#
Description | The Protocols application manages BGP, static, and aggregate route resources to automatically generate routing configurations for network nodes in both default and custom VRFs. |
Supported OS | SR Linux, SR OS |
Catalog | nokia-eda/catalog / manifest |
Source Code | coming soon |
The Protocols application enables users to create and manage various routing protocols in EDA and contains resources that are split between Overlay and Default routing categories. These two categories define the deployment model for the resource.
Resources from the Default Routing category will be used in the network element's default VRF, whereas resources listed under the Overlay Routing category designed to be associated with a custom, non-default VRF.
The application provides the following components:
DEFAULT ROUTING
- Default BGP Groups
- Default BGP Peers
- Default Static Routes
- Default Aggregate Routes
- Default Route Reflectors
- Default Route Reflector Clients
OVERLAY ROUTING
- BGP Groups
- BGP Peers
- Static Routes
- Aggregate Routes
- Route Reflectors
- Route Reflector Clients
Summary dashboards for the following resource types:
- Default BGP Peers
- Default BGP Groups
- Default Route Reflectors
- Default Route Reflector Clients
Border Gateway Protocol (BGP)#
BGP configuration in the Protocols application supports both default VRF and custom VRF deployments, with comprehensive features for peer management, route reflection, and policy control.
Configuration Types#
The application supports two primary BGP deployment models:
- Default BGP: Configuration in the default VRF using
DefaultBGPPeer
andDefaultBGPGroup
custom resources (CRs). - Custom VRF BGP: Configuration in custom IP-VRFs using
BGPPeer
andBGPGroup
CRs.
BGP Groups#
BGP Groups enable centralized management of peer configurations, ensuring consistent policy application across multiple peers.
Because a BGP group in the default VRF and custom VRF usually have different configuration options and represent different groups, two BGP groups resource types are offered - DefaultBGPGroup
and BGPGroup
.
Default BGP Group Configuration#
DEFAULT ROUTING → DGDefault BGP Group
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultBGPGroup
metadata:
name: example-default-group
namespace: eda
spec:
description: "Default VRF BGP group"
localAS:
autonomousSystem: 65001
timers:
holdTime: 90
keepAlive: 30
ipv4Unicast:
enabled: true
maxReceivedRoutes: 1000
EOF
Custom VRF BGP Group Configuration#
OVERLAY ROUTING → BGBGP Group
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: BGPGroup
metadata:
name: example-custom-group
namespace: eda
spec:
description: "Custom VRF BGP group"
localAS:
autonomousSystem: 65002
timers:
holdTime: 90
keepAlive: 30
ipv4Unicast:
enabled: true
maxReceivedRoutes: 1000
EOF
BGP Peers#
BGP peers represent individual BGP sessions and can inherit configurations from BGP groups. The Protocols application supports both explicit peer configuration and dynamic neighbor discovery. Selecting an interface will bind the session to the Toponode on which the Interface is deployed. The interface can be a DefaultInterface (interface in the default VRF) or a SystemInterface (primary loopback in the default VRF).
Default BGP Peer Configuration#
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultBGPPeer
metadata:
name: example-default-peer
namespace: eda
spec:
description: "Default VRF BGP peer"
group: "example-default-group"
interface: "system"
interfaceKind: "SYSTEMINTERFACE"
peerAS:
autonomousSystem: 65100
peerIP: "192.168.1.1"
EOF
Custom VRF BGP Peer Configuration#
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: BGPPeer
metadata:
name: example-custom-peer
namespace: eda
spec:
description: "Custom VRF BGP peer"
group: "example-custom-group"
interface: "customer-1"
interfaceKind: "ROUTEDINTERFACE"
peerAS:
autonomousSystem: 65200
peerIP: "192.168.2.1"
EOF
Address Family Support#
The Protocols application provides comprehensive support for multiple BGP address families including, but not limited to:
IPv4 Unicast#
- Enable/disable IPv4 unicast routing
- Support for IPv6 next-hops (RFC 5549)
- Configurable maximum route limits
- Next-hop self options
- Independent policy control
IPv6 Unicast#
- Enable/disable IPv6 unicast routing
- Configurable maximum route limits
- Independent policy control
L2VPN EVPN#
- Enable/disable EVPN
- Support for IPv6 next-hops
- Configurable maximum route limits
- Integration with overlay services
Route Reflection#
Route reflection enables scalable iBGP deployments by eliminating the need for a full mesh of iBGP sessions. The Protocols application supports route reflection in both default and custom VRFs.
The router reflector resources can select the clients to connect to using a label selector. The label selector will select RouteReflectorClient or DefaultRouteReflectorClient resources; if the clients are not EDA resources, you may specify a list of client IPs to which the the route reflector will attempt to establish a session.
Configuration Types#
- Default VRF: Using
DefaultRouteReflector
andDefaultRouteReflectorClient
. - Custom VRF: Using
RouteReflector
andRouteReflectorClient
.
Route Reflector Configuration#
Default VRF Example#
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultRouteReflector
metadata:
name: example-default-rr
namespace: eda
spec:
description: "Default VRF Route Reflector"
clusterID: "1.1.1.1"
defaultBGPRRGroup: "rr-group"
interface: "system"
interfaceKind: "SYSTEMINTERFACE"
clientSelector:
- "role=leaf"
clientIPs:
- "192.168.1.1"
- "192.168.1.2"
ipv4Unicast:
enabled: true
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultRouteReflector
metadata:
name: example-default-rr
namespace: eda
spec:
description: "Default VRF Route Reflector"
clusterID: "1.1.1.1"
defaultBGPRRGroup: "rr-group"
interface: "system"
interfaceKind: "SYSTEMINTERFACE"
clientSelector:
- "role=leaf"
clientIPs:
- "192.168.1.1"
- "192.168.1.2"
ipv4Unicast:
enabled: true
EOF
Custom VRF Route Reflector Example#
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: RouteReflector
metadata:
name: example-custom-rr
namespace: eda
spec:
clusterID: "2.2.2.2"
bgpGroup: "custom-rr-group"
interface: "customer-1"
interfaceKind: "ROUTEDINTERFACE"
ipv4ClientSelector:
- "role=customer-edge"
ipv6ClientSelector:
- "role=customer-edge"
clientIPs:
- "172.16.1.1"
- "172.16.1.2"
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: RouteReflector
metadata:
name: example-custom-rr
namespace: eda
spec:
clusterID: "2.2.2.2"
bgpGroup: "custom-rr-group"
interface: "customer-1"
interfaceKind: "ROUTEDINTERFACE"
ipv4ClientSelector:
- "role=customer-edge"
ipv6ClientSelector:
- "role=customer-edge"
clientIPs:
- "172.16.1.1"
- "172.16.1.2"
EOF
Route Reflector Client Configuration#
Route reflector clients establish sessions with route reflectors based on selectors or explicit IP addresses. The label selector will select DefaultRouteReflector or RouteReflector resources, or a list of IP addresses can be provided which the router relctor client will try to establish a session to.
Default VRF Client Example#
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultRouteReflectorClient
metadata:
name: example-default-rr-client
namespace: eda
spec:
defaultBgpClientGroup: "client-group"
interface: "system"
interfaceKind: "SYSTEMINTERFACE"
routeReflectorSelector:
- "role=spine"
routeReflectorIPs:
- "192.168.0.1"
- "192.168.0.2"
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultRouteReflectorClient
metadata:
name: example-default-rr-client
namespace: eda
spec:
defaultBgpClientGroup: "client-group"
interface: "system"
interfaceKind: "SYSTEMINTERFACE"
routeReflectorSelector:
- "role=spine"
routeReflectorIPs:
- "192.168.0.1"
- "192.168.0.2"
EOF
Custom VRF Client Example#
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: RouteReflectorClient
metadata:
name: example-custom-rr-client
namespace: eda
spec:
bgpGroup: "custom-client-group"
interface: "customer-1"
interfaceKind: "ROUTEDINTERFACE"
ipv4RouteReflectorSelector:
- "role=provider-edge"
ipv6RouteReflectorSelector:
- "role=provider-edge"
routeReflectorIPs:
- "172.16.0.1"
- "172.16.0.2"
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: RouteReflectorClient
metadata:
name: example-custom-rr-client
namespace: eda
spec:
bgpGroup: "custom-client-group"
interface: "customer-1"
interfaceKind: "ROUTEDINTERFACE"
ipv4RouteReflectorSelector:
- "role=provider-edge"
ipv6RouteReflectorSelector:
- "role=provider-edge"
routeReflectorIPs:
- "172.16.0.1"
- "172.16.0.2"
EOF
Static Routes#
Static routes provide explicit path control for network traffic.
Configuration Types#
The application supports two types of static route deployments:
- Default Static Routes: Configuration in the default VRF using a
DefaultStaticRoute
resource. - Custom VRF Static Routes: Configuration in custom VRFs using a
StaticRoute
resource.
Default VRF Static Route Configuration#
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultStaticRoute
metadata:
name: example-default-static
namespace: eda
spec:
defaultRouter: "default-router"
prefixes:
- "192.168.0.0/24"
- "172.16.0.0/24"
preference: 5
nexthopGroup:
nexthops:
- ipPrefix: "10.0.0.1"
- ipPrefix: "10.0.0.2"
resolve: true
bfd:
enabled: true
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultStaticRoute
metadata:
name: example-default-static
namespace: eda
spec:
defaultRouter: "default-router"
prefixes:
- "192.168.0.0/24"
- "172.16.0.0/24"
preference: 5
nexthopGroup:
nexthops:
- ipPrefix: "10.0.0.1"
- ipPrefix: "10.0.0.2"
resolve: true
bfd:
enabled: true
EOF
Custom VRF Static Route Configuration#
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: StaticRoute
metadata:
name: example-custom-static
namespace: eda
spec:
router: "customer-router"
prefixes:
- "192.168.1.0/24"
- "192.168.2.0/24"
preference: 10
nodes:
- "node1"
- "node2"
nexthopGroup:
nexthops:
- ipPrefix: "10.1.0.1"
bfd:
enabled: true
- ipPrefix: "10.1.0.2"
resolve: true
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: StaticRoute
metadata:
name: example-custom-static
namespace: eda
spec:
router: "customer-router"
prefixes:
- "192.168.1.0/24"
- "192.168.2.0/24"
preference: 10
nodes:
- "node1"
- "node2"
nexthopGroup:
nexthops:
- ipPrefix: "10.1.0.1"
bfd:
enabled: true
- ipPrefix: "10.1.0.2"
resolve: true
EOF
Route Aggregation#
Route aggregation enables efficient route summarization and management.
Configuration Types#
The application supports two types of route aggregation:
- Default Aggregate Routes: Configuration in the default VRF using a
DefaultAggregateRoute
resource. - Custom VRF Aggregate Routes: Configuration in custom VRFs using an
AggregateRoute
resource.
Default VRF Aggregate Route Configuration#
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: DefaultAggregateRoute
metadata:
name: example-default-aggregate
namespace: eda
spec:
defaultRouter: "default-router"
prefixes:
- "192.168.0.0/16"
- "172.16.0.0/12"
aggregatorIP: "10.0.0.1"
aggregatorASN: 65001
summaryOnly: true
generateICMP: false
EOF
Custom VRF Aggregate Route Configuration#
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: AggregateRoute
metadata:
name: example-custom-aggregate
namespace: eda
spec:
router: "customer-router"
prefixes:
- "192.168.1.0/24"
- "192.168.2.0/24"
aggregatorIP: "10.0.0.2"
aggregatorASN: 65002
nodes:
- "node1"
- "node2"
summaryOnly: true
generateICMP: false
cat << 'EOF' | kubectl apply -f -
apiVersion: protocols.eda.nokia.com/v1alpha1
kind: AggregateRoute
metadata:
name: example-custom-aggregate
namespace: eda
spec:
router: "customer-router"
prefixes:
- "192.168.1.0/24"
- "192.168.2.0/24"
aggregatorIP: "10.0.0.2"
aggregatorASN: 65002
nodes:
- "node1"
- "node2"
summaryOnly: true
generateICMP: false
EOF
Operational State and Verification#
BGP Status#
# Check BGP peer status
kubectl get bgppeers
NAME SESSION STATE LAST CHANGE ENABLED OPERATIONAL STATE PEER AS
example-peer Established 10m true up 65100
# Check BGP group status
kubectl get bgpgroups
NAME LAST CHANGE OPERATIONAL STATE
example-group 10m up
# Check route reflector status
kubectl get routereflectors
NAME LAST CHANGE OPERATIONAL STATE NUM RR BGP PEERS NUM RR BGP PEERS DOWN
rr-1 10m up 4 0
Static Route Status#
# Check static route status
kubectl get staticroutes
NAME LAST CHANGE OPERATIONAL STATE HEALTH
custom-route 10m up 100