
不久之前,我还面临一个非常不标准的任务,即为MetalLB配置路由。一无所有,因为 MetalLB通常不需要任何其他操作,但是在我们的情况下,有一个相当大的群集,其网络配置非常简单。
在本文中,我将告诉您如何为群集的外部网络配置基于源和基于策略的路由。
我不会详细介绍安装和配置MetalLB,因为我假设您已经有一些经验。我建议直截了当,即配置路由。因此,我们有四种情况:
情况1:不需要配置时
让我们分析一个简单的案例。

当MetalLB发布的地址与节点的地址在同一子网中时,不需要其他路由配置。
例如,您有一个子网192.168.1.0/24
,它有一个路由器192.168.1.1
,并且您的节点获取地址:192.168.1.10-30
然后对于MetalLB,您可以配置范围,192.168.1.100-120
并确保它们无需任何其他配置即可工作。
这是为什么?因为您的节点已经配置了路由,所以:
default via 192.168.1.1 dev eth0 onlink
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
并且来自同一山脊的地址将在没有任何其他手势的情况下重复使用它们。
2:

, IP- MetalLB .
. MetalLB , :
ip addr add 10.9.8.7/32 dev lo
, :
- a)
/32
( ) - b) ( loopback). , Linux. , arp- arp- , , , Kubernetes.
, strict arp:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp- , IP-. MetalLB kube-proxy IPVS.
MetalLB arp-, user-space, MetalLB.
. , :
ip route add 10.9.8.0/24 dev eth1
3: source-based routing
Source-based routing , gateway, , gateway.
, 192.168.1.0/24
, MetalLB. , 1.2.3.0/24
VLAN 100, Kubernetes- .

1.2.3.4
1.2.3.0/24
. , MetalLB 1.2.3.4
, 1.2.3.1
, , 1.2.3.1
.
default gateway 192.168.1.1
, , 1.2.3.1
, .
?
, . VLAN- :
ip link add link eth0 name eth0.100 type vlan id 100
ip link set eth0.100 up
:
ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100
100
1.2.3.1
, eth0.100
.
:
ip rule add from 1.2.3.0/24 lookup 100
: 1.2.3.0/24
, 100
. 1.2.3.1
4: policy-based routing
, 1.2.3.0/24
:

1.2.3.0/24
, 1.2.3.0/24
eth0.100
, - Kubernetes , .
, policy-based routing.
, , :
ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100
, - :
ip rule add from 1.2.3.0/24 lookup 100
ip rule add from 1.2.3.0/24 to 10.112.0.0/12 lookup main
:
1.2.3.0/24
—10.112.0.0/12
— podNetwork
, .
netfilter:

iptables:
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j RETURN
iptables -t mangle -A PREROUTING -i bond0.100 -j MARK --set-mark 0x100
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark
eth0.100
, 0x100
, .
:
ip rule add from 1.2.3.0/24 fwmark 0x100 lookup 100
1.2.3.0/24
0x100
100
.
, , , Kubernetes.
, Linux reverse path filter, : - - , , .
, :
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0.100/rp_filter
, rp_filter, , . rp_filter.
rp_filter netfilter. rpfilter iptables , :
iptables -t raw -A PREROUTING -i eth0.100 -d 1.2.3.0/24 -j RETURN
iptables -t raw -A PREROUTING -i eth0.100 -m rpfilter --invert -j DROP
rp_filter eth0.100
1.2.3.0/24
.