Fine-tuning routing para sa MetalLB sa L2 mode

Fine-tuning routing para sa MetalLB sa L2 mode
Dili pa lang dugay nag-atubang ako sa usa ka talagsaon nga buluhaton sa pag-set up sa routing alang sa MetalLB. Maayo unta ang tanan, tungod kay... Kasagaran ang MetalLB wala magkinahanglan bisan unsang dugang nga mga aksyon, apan sa among kaso kami adunay usa ka medyo dako nga kumpol nga adunay usa ka yano nga pagsumpo sa network.

Sa kini nga artikulo isulti ko kanimo kung giunsa ang pag-configure nga nakabase sa gigikanan ug nakabase sa palisiya nga ruta alang sa gawas nga network sa imong cluster.

Dili nako isulti ang detalye bahin sa pag-install ug pag-configure sa MetalLB, tungod kay nagtuo ko nga naa ka nay kasinatian. Gisugyot ko nga diretso sa punto, nga mao ang pag-set up sa ruta. Busa kami adunay upat ka mga kaso:

Kaso 1: Kung wala’y kinahanglan nga pag-configure

Atong tan-awon ang usa ka yano nga kaso.

Fine-tuning routing para sa MetalLB sa L2 mode

Ang dugang nga pag-configure sa ruta wala kinahanglana kung ang mga adres nga gi-isyu sa MetalLB naa sa parehas nga subnet sa mga adres sa imong mga node.

Pananglitan, ikaw adunay subnet 192.168.1.0/24, kini adunay usa ka router 192.168.1.1, ug ang imong mga node makadawat ug mga adres: 192.168.1.10-30, unya alang sa MetalLB mahimo nimong i-adjust ang range 192.168.1.100-120 ug siguruha nga kini molihok nga wala’y dugang nga pag-configure.

Ngano man? Tungod kay ang imong mga node adunay mga ruta nga gi-configure:

# ip route
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

Ug ang mga adres gikan sa parehas nga range magamit kini pag-usab nga wala’y dugang nga mga aksyon.

Kaso 2: Kung gikinahanglan ang dugang nga pag-customize

Fine-tuning routing para sa MetalLB sa L2 mode

Kinahanglan nimong i-configure ang dugang nga mga ruta kung ang imong mga node wala’y na-configure nga IP address o ruta sa subnet diin ang MetalLB nag-isyu sa mga adres.

Akong ipasabut sa gamay nga detalye. Sa matag higayon nga ang MetalLB magpagawas ug adres, mahimo kining itandi sa usa ka yanong buluhaton sama sa:

ip addr add 10.9.8.7/32 dev lo

Paminaw sa:

  • a) Ang adres gi-assign nga adunay prefix /32 kana mao, ang usa ka ruta dili awtomatikong idugang sa subnet alang niini (kini usa ra ka adres)
  • b) Ang adres gilakip sa bisan unsang node interface (pananglitan loopback). Angayan nga hisgutan dinhi ang mga bahin sa Linux network stack. Bisan unsa nga interface ang imong idugang ang adres, ang kernel kanunay nga magproseso sa mga hangyo sa arp ug magpadala mga tubag sa arp sa bisan kinsa niini, kini nga pamatasan giisip nga husto ug, dugang pa, kaylap nga gigamit sa usa ka dinamikong palibot sama sa Kubernetes.

Kini nga kinaiya mahimong ipasibo, pananglitan pinaagi sa pagpagana sa estrikto nga arp:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

Sa kini nga kaso, ang mga tubag sa arp ipadala lamang kung ang interface klaro nga adunay usa ka piho nga IP address. Kini nga setting gikinahanglan kung nagplano ka nga mogamit sa MetalLB ug ang imong kube-proxy nagdagan sa IPVS mode.

Bisan pa, ang MetalLB wala mogamit sa kernel sa pagproseso sa mga hangyo sa arp, apan kini mismo sa user-space, busa kini nga kapilian dili makaapekto sa operasyon sa MetalLB.

Balik ta sa atong buluhaton. Kung ang ruta alang sa gi-isyu nga mga adres wala sa imong mga node, idugang kini daan sa tanan nga mga node:

ip route add 10.9.8.0/24 dev eth1

Kaso 3: Kung kinahanglan nimo ang gigikanan nga nakabase sa ruta

Kinahanglan nimong i-configure ang source-based routing kung makadawat ka og mga packet pinaagi sa lain nga gateway, dili ang gi-configure nga default, busa ang mga response packet kinahanglan usab nga moagi sa samang gateway.

Pananglitan, ikaw adunay parehas nga subnet 192.168.1.0/24 gipahinungod sa imong mga node, apan gusto nimo nga mag-isyu sa mga eksternal nga adres gamit ang MetalLB. Ibutang ta nga aduna kay daghang adres gikan sa usa ka subnet 1.2.3.0/24 nahimutang sa VLAN 100 ug gusto nimo nga gamiton kini aron ma-access ang mga serbisyo sa Kubernetes sa gawas.

Fine-tuning routing para sa MetalLB sa L2 mode

Sa pagkontak 1.2.3.4 maghimo ka mga hangyo gikan sa lahi nga subnet kaysa 1.2.3.0/24 ug maghulat sa tubag. Ang node nga sa pagkakaron mao ang agalon alang sa address nga gi-isyu sa MetalLB 1.2.3.4, makadawat sa packet gikan sa router 1.2.3.1, apan ang tubag alang kaniya kinahanglan nga moadto sa parehas nga ruta, agi 1.2.3.1.

Tungod kay ang among node aduna nay gi-configure nga default gateway 192.168.1.1, unya pinaagi sa default ang tubag moadto kaniya, ug dili sa 1.2.3.1, diin among nadawat ang package.

Unsaon pagsagubang niini nga sitwasyon?

Sa kini nga kaso, kinahanglan nimo nga andamon ang tanan nimong mga node sa paagi nga sila andam sa pag-alagad sa mga eksternal nga adres nga wala’y dugang nga pag-configure. Kana mao, alang sa panig-ingnan sa ibabaw, kinahanglan nimo nga maghimo usa ka interface sa VLAN sa node nga abante:

ip link add link eth0 name eth0.100 type vlan id 100
ip link set eth0.100 up

Ug dayon idugang ang mga ruta:

ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100

Palihug timan-i nga among gidugang ang mga ruta sa usa ka separado nga routing table 100 kini maglangkob lamang sa duha ka mga ruta nga gikinahanglan sa pagpadala sa usa ka tubag nga pakete pinaagi sa ganghaan 1.2.3.1, nahimutang sa luyo sa interface eth0.100.

Karon kinahanglan namong idugang ang usa ka yano nga lagda:

ip rule add from 1.2.3.0/24 lookup 100

nga tin-aw nga nag-ingon: kung ang gigikanan nga adres sa pakete naa 1.2.3.0/24, unya kinahanglan nimo gamiton ang routing table 100. Niini gihulagway na namo ang rota nga moagi niya 1.2.3.1

Kaso 4: Kung kinahanglan nimo ang pagruta nga gibase sa palisiya

Ang topology sa network parehas sa miaging pananglitan, apan ingnon ta nga gusto nimo usab nga maka-access sa mga adres sa gawas nga pool. 1.2.3.0/24 gikan sa imong mga pod:

Fine-tuning routing para sa MetalLB sa L2 mode

Ang peculiarity mao nga sa diha nga ang pag-access sa bisan unsa nga adres sa 1.2.3.0/24, ang response packet moigo sa node ug adunay source address sa range 1.2.3.0/24 masinugtanon ipadala sa eth0.100, apan gusto namo nga i-redirect kini sa Kubernetes sa among unang pod, nga nakamugna sa orihinal nga hangyo.

Ang pagsulbad niini nga problema nahimong lisud, apan kini nahimong posible tungod sa polisiya-based routing:

Para sa mas maayong pagsabot sa proseso, ania ang netfilter block diagram:
Fine-tuning routing para sa MetalLB sa L2 mode

Una, sama sa miaging pananglitan, maghimo kita og dugang nga routing table:

ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100

Karon atong idugang ang pipila ka mga lagda sa iptables:

iptables -t mangle -A PREROUTING -i eth0.100 -j CONNMARK --set-mark 0x100
iptables -t mangle -A PREROUTING  -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j RETURN
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark

Kini nga mga lagda magtimaan sa umaabot nga mga koneksyon sa interface eth0.100, pagmarka sa tanang pakete nga adunay tag 0x100, ang mga tubag sulod sa parehas nga koneksyon markahan usab sa parehas nga tag.

Karon makadugang kami usa ka lagda sa pag-ruta:

ip rule add from 1.2.3.0/24 fwmark 0x100 lookup 100

Kana mao, ang tanan nga mga pakete nga adunay gigikanan nga adres 1.2.3.0/24 ug tag 0x100 kinahanglan nga madala gamit ang usa ka lamesa 100.

Busa, ang ubang mga packet nga nadawat sa laing interface dili sakop niini nga lagda, nga magtugot kanila nga madala gamit ang standard Kubernetes tools.

Adunay usa pa ka butang, sa Linux adunay usa ka gitawag nga reverse path filter, nga nagdaot sa tibuuk nga raspberry; naghimo kini usa ka yano nga pagsusi: alang sa tanan nga umaabot nga mga pakete, gibag-o niini ang gigikanan nga adres sa pakete nga adunay adres sa nagpadala ug gisusi kung ang packet mahimong mobiya pinaagi sa parehas nga interface diin kini nadawat, kung dili, kini magsala niini.

Ang problema mao nga sa among kaso dili kini molihok sa husto, apan mahimo namon kini pag-disable:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0.100/rp_filter

Palihug timan-i nga ang unang sugo nagkontrol sa pangkalibutanon nga kinaiya sa rp_filter; kon kini dili disabled, ang ikaduhang sugo walay epekto. Bisan pa, ang nahabilin nga mga interface magpabilin nga gipaandar ang rp_filter.

Aron dili hingpit nga limitahan ang operasyon sa filter, mahimo natong gamiton ang pagpatuman sa rp_filter para sa netfilter. Gamit ang rpfilter ingon usa ka module sa iptables, mahimo nimong i-configure ang labi ka dali nga mga lagda, pananglitan:

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

i-enable ang rp_filter sa interface eth0.100 para sa tanang adres gawas sa 1.2.3.0/24.

Source: www.habr.com

Idugang sa usa ka comment