虚拟路由实例 (VRF-Lite)
阅读本主题可了解虚拟路由实例在 JCNR 中的实现。
通过虚拟路由实例,管理员可以将云原生路由器划分为多个独立的虚拟路由器,每个路由器都有自己的路由表。将一台设备拆分为多个虚拟路由实例可以隔离通过网络传输的流量,而无需多个设备对网络进行分段。您可以使用虚拟路由实例隔离网络上的客户流量,并将特定于客户的实例绑定到客户拥有的接口。虚拟路由和转发 (VRF) 通常与第 3 层子接口组合使用,可以对单个物理接口上的流量进行区分,还可与多个虚拟路由器进行关联。每个逻辑第 3 层子接口只能属于一个路由实例。有关更多信息,请查看 虚拟路由器实例 主题。
配置
您可以通过网络附件定义 (NAD) 清单在云原生路由器中创建虚拟路由实例。以下是创建 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的更多信息,请参阅 云原生路由器用例和配置概述 。
以下是带有接口(192.168.11.10/24)连接到blue网络的 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 和 Pod 清单时, bluenet 路由实例和 bluenet.inet.0 路由表将在云原生路由器控制器中创建。您可以配置云原生路由器以启用从 podblue 远程网络上的 Pod 之间的通信。可以通过 访问 cRPD shell 来执行其他 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 地址。使用 BGP 协议导出
inet路由: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匹配的 BGP 路由泄漏到inet.0bluenet路由实例,远程 Pod 网络在哪里192.168.12.0/24: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
云原生路由器支持具有接口、接收、解析和表下一跃点的路由在虚拟路由器路由实例之间发生路由泄漏。