虚拟路由实例 (VRF-Lite)
总结 阅读本主题以了解虚拟路由实例在 JCNR 中的实现。
虚拟路由实例允许管理员将云原生路由器划分为多个独立的虚拟路由器,每个虚拟路由器都有自己的路由表。将设备拆分为多个虚拟路由实例可以隔离通过网络传输的流量,而无需多个设备对网络进行分段。您可以使用虚拟路由实例隔离网络上的客户流量,并将特定于客户的实例绑定到客户拥有的接口。虚拟路由和转发 (VRF) 通常与第 3 层子接口结合使用,从而可以区分单个物理接口上的流量并与多个虚拟路由器关联。每个逻辑第 3 层子接口只能属于一个路由实例。有关详细信息,请查看 虚拟路由器实例 主题。
配置
您可以通过网络附件定义 (NAD) 清单在 JCNR 中创建虚拟路由实例。下面是用于创建 bluenet
虚拟路由器路由实例的示例 NAD:
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: blue spec: config: '{ "cniVersion":"0.4.0", "name": "blue-net", "plugins": [ { "type": "jcnr", "args": { "instanceName": "bluenet", "instanceType": "virtual-router" }, "kubeConfig":"/root/.kube/config" } ] }'
请注意,设置为 instanceType
virtual-router
。有关 NAD 的更多信息,请参阅 JCNR 用例和配置概述 。
以下是带有接口(连接到blue
网络(192.168.11.10/24)
为简洁起见,对输出进行了微调)的 Pod 配置podblue
示例:
apiVersion: v1 kind: Pod metadata: name: podblue annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "blue", "interface":"net1", "cni-args": { "interfaceType":"veth", "dataplane":"dpdk", "mac":"aa:bb:cc:dd:ee:10", "ipConfig":{ "ipv4":{ "address":"192.168.11.10/24", "gateway":"192.168.11.1", "routes":["192.168.11.0/24"] }, "ipv6":{ "address":"abcd::192.168.11.10/112", "gateway":"abcd::192.168.11.1", "routes":["abcd::192.168.11.0/112"] } } } } ] spec: ...
使用命令应用 kubectl apply -f manifest
NAD 和容器清单时, bluenet
将在 JCNR 控制器中创建路由实例和 bluenet.inet.0
路由表。您可以将 JCNR 配置为启用从远程网络上的 Pod 到 podblue
的通信。可以通过 访问 cRPD 外壳来执行其他 cRPD 配置。下面是一个 cRPD 配置示例:
配置本地结构接口和 BGP 协议:
set interfaces ens2f0 unit 0 family inet address 10.10.10.11/24 set protocols bgp group overlay type internal set protocols bgp group overlay local-address 10.10.10.11 set protocols bgp group overlay local-as 64520 set protocols bgp group overlay neighbor 10.10.10.12 peer-as 64520
其中
10.10.10.12/24
,是 BGP 对等路由器或邻居路由器的 IP 地址。inet
使用 BGP 协议导出路由:set policy-options policy-statement send_direct term 1 from protocol direct set policy-options policy-statement send_direct term 1 then accept set policy-options policy-statement send_direct term reject then reject set protocols bgp group overlay export send_direct
将路由从路由实例泄漏
bluenet
到default
路由实例:set groups cni routing-instances bluenet routing-options interface-routes rib-group inet blue_to_inet set routing-options rib-groups blue_to_inet import-rib bluenet.inet.0 set routing-options rib-groups blue_to_inet import-rib inet.0
仅将匹配前缀
192.168.12.0
的inet.0
BGP 路由泄漏到bluenet
路由实例,其中192.168.12.0/24
是远程 Pod 网络:set policy-options policy-statement inet_to_blue term from_bgp from instance master set policy-options policy-statement inet_to_blue term from_bgp from protocol bgp set policy-options policy-statement inet_to_blue term from_bgp from route-filter 192.168.12.0/24 orlonger set policy-options policy-statement inet_to_blue term from_bgp then accept set policy-options policy-statement inet_to_blue term reject then reject set routing-options rib-groups inet_to_blue import-rib inet.0 set routing-options rib-groups inet_to_blue import-rib bluenet.inet.0 set routing-options rib-groups inet_to_blue import-policy inet_to_blue set groups cni routing-instances bluenet routing-options instance-import inet_to_blue
JCNR 支持虚拟路由器路由实例之间的路由泄漏,用于具有接口、接收、解析和表下一跃点的路由。