FRRouting (FRR) 是一个免费的开源互联网路由协议套件,适用于 Linux 和 UNIX 平台。FRR-K8s
是一个基于 Kubernetes 的 DaemonSet,它以 Kubernetes 兼容的方式公开 FRR
API 的一个子集。作为集群管理员,您可以使用 FRRConfiguration
自定义资源 (CR) 来访问 MetalLB 未提供的某些 FRR 服务,例如接收路由。MetalLB
会生成与应用的 MetalLB 配置相对应的 FRR-K8s
配置。
您可以创建多个 FRRConfiguration
CR 来在 MetalLB
中使用 FRR
服务。MetalLB
会生成一个 FRRConfiguration
对象,FRR-K8s
会将其与所有用户创建的其他配置合并。
例如,您可以配置 FRR-K8s
以接收给定邻居通告的所有前缀。以下示例配置 FRR-K8s
以接收主机为 172.18.0.5
的 BGPPeer
通告的所有前缀
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: metallb-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.18.0.5
asn: 64512
toReceive:
allowed:
mode: all
您还可以配置 FRR-K8s 始终阻止一组前缀,而不管应用的配置如何。这对于避免指向 Pod 或可能导致集群故障的 ClusterIPs
CIDR 的路由很有用。以下示例阻止前缀集 192.168.1.0/24
apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
name: metallb
namespace: metallb-system
spec:
bgpBackend: frr-k8s
frrk8sConfig:
alwaysBlock:
- 192.168.1.0/24
您可以设置 FRR-K8s
来阻止 集群网络
CIDR 和 服务网络
CIDR。您可以通过运行以下命令查看这些 CIDR 地址规范的值
$ oc describe network.config/cluster
以下部分提供使用 FRRConfiguration
自定义资源 (CR) 的参考示例。
您可以使用 routers
字段配置多个路由器,每个虚拟路由和转发 (VRF) 资源一个。对于每个路由器,您必须定义自治系统编号 (ASN)。
您还可以定义要连接到的边界网关协议 (BGP) 邻居列表,如下例所示
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.30.0.3
asn: 4200000000
ebgpMultiHop: true
port: 180
- address: 172.18.0.6
asn: 4200000000
port: 179
默认情况下,FRR-K8s
不会通告配置为路由器配置一部分的前缀。为了通告它们,您可以使用 toAdvertise
字段。
您可以通告一部分前缀,如下例所示
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.30.0.3
asn: 4200000000
ebgpMultiHop: true
port: 180
toAdvertise:
allowed:
prefixes: (1)
- 192.168.2.0/24
prefixes:
- 192.168.2.0/24
- 192.169.2.0/24
1 | 通告一部分前缀。 |
以下示例显示如何通告所有前缀
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.30.0.3
asn: 4200000000
ebgpMultiHop: true
port: 180
toAdvertise:
allowed:
mode: all (1)
prefixes:
- 192.168.2.0/24
- 192.169.2.0/24
1 | 通告所有前缀。 |
默认情况下,FRR-K8s
不会处理邻居通告的任何前缀。您可以使用 toReceive
字段来处理此类地址。
您可以为一部分前缀进行配置,例如本示例
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.18.0.5
asn: 64512
port: 179
toReceive:
allowed:
prefixes:
- prefix: 192.168.1.0/24
- prefix: 192.169.2.0/24
ge: 25 (1)
le: 28 (1)
1 | 如果前缀长度小于或等于 le 前缀长度且大于或等于 ge 前缀长度,则应用该前缀。 |
以下示例配置 FRR 以处理所有通告的前缀
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.18.0.5
asn: 64512
port: 179
toReceive:
allowed:
mode: all
您可以使用 bgp
字段定义各种 BFD
配置文件并将它们与邻居关联。在以下示例中,BFD
备份 BGP
会话,FRR
可以检测链路故障
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.30.0.3
asn: 64512
port: 180
bfdProfile: defaultprofile
bfdProfiles:
- name: defaultprofile
默认情况下,FRR-K8s
会将配置应用到运行守护程序的所有节点。您可以使用 nodeSelector
字段指定要应用配置的节点。例如
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
nodeSelector:
labelSelector:
foo: "bar"
FRRConfiguration
自定义资源的字段在下面的表格中描述
字段 | 类型 | 描述 |
---|---|---|
|
|
指定 FRR 要配置的路由器(每个 VRF 一个)。 |
|
|
会话本地端要使用的自治系统编号。 |
|
|
指定 |
|
|
指定用于从此路由器建立会话的主机 vrf。 |
|
|
指定要与之建立 BGP 会话的邻居。 |
|
|
指定会话本地端要使用的自治系统编号。 |
|
|
指定要与之建立会话的 IP 地址。 |
|
|
指定建立会话时要拨号的端口。默认为 179。 |
|
|
指定用于建立 BGP 会话的密码。 |
|
|
指定邻居的身份验证密钥的名称。密钥必须是“kubernetes.io/basic-auth”类型,并且与 FRR-K8s 守护程序位于相同的命名空间中。“password”密钥在密钥中存储密码。 |
|
|
指定根据 RFC4271 请求的 BGP 保持时间。默认为 180 秒。 |
|
|
指定根据 RFC4271 请求的 BGP 保持活动时间。默认为 |
|
|
指定 BGP 在连接到邻居的尝试之间等待多长时间。 |
|
|
指示 BGPPeer 是否距离多跳。 |
|
|
指定用于与 BGP 会话关联的 BFD 会话的 BFD 配置文件名称。如果未设置,则不会设置 BFD 会话。 |
|
|
表示要通告给邻居的前缀列表及其关联属性。 |
|
|
指定要通告给邻居的前缀列表。此列表必须与您在路由器中定义的前缀匹配。 |
|
|
指定处理前缀时使用的模式。您可以设置为 |
|
|
指定与通告的本地首选项关联的前缀。您必须在允许通告的前缀中指定与本地首选项关联的前缀。 |
|
|
指定与本地首选项关联的前缀。 |
|
|
指定与前缀关联的本地首选项。 |
|
|
指定与通告的 BGP 社区关联的前缀。您必须将与本地首选项关联的前缀包含在您要通告的前缀列表中。 |
|
|
指定与社区关联的前缀。 |
|
|
指定与前缀关联的社区。 |
|
|
指定要从邻居接收的前缀。 |
|
|
指定您要从邻居接收的信息。 |
|
|
指定允许来自邻居的前缀。 |
|
|
指定处理前缀时使用的模式。设置为 |
|
|
禁用 MP BGP,以防止它将 IPv4 和 IPv6 路由交换分离到不同的 BGP 会话中。 |
|
|
指定要从此路由器实例通告的所有前缀。 |
|
|
指定在配置邻居时要使用的 bfd 配置文件列表。 |
|
|
要在配置的其他部分中引用的 BFD 配置文件的名称。 |
|
|
指定此系统可以接收控制分组的最小间隔(毫秒)。默认为 |
|
|
指定此系统要用于发送 BFD 控制分组的最小传输间隔(不包括抖动),以毫秒为单位。默认为 |
|
|
配置检测乘数以确定数据包丢失。要确定连接丢失检测计时器,请将远程传输间隔乘以此值。 |
|
|
配置此系统可以处理的最小回显接收传输间隔(毫秒)。默认为 |
|
|
启用或禁用回显传输模式。此模式默认情况下处于禁用状态,并且在多跳设置中不受支持。 |
|
|
将会话标记为被动。被动会话不会尝试启动连接,并在收到对等方的控制分组之前等待回复。 |
|
|
仅适用于多跳会话。配置传入 BFD 控制分组的最小预期 TTL。 |
|
|
限制尝试应用此配置的节点。如果指定,则只有其标签与指定选择器匹配的节点才会尝试应用该配置。如果未指定,则所有节点都会尝试应用此配置。 |
|
|
定义 FRRConfiguration 的观察状态。 |