Fampitaovana tsara ho an'ny MetalLB amin'ny fomba L2

Fampitaovana tsara ho an'ny MetalLB amin'ny fomba L2
Vao tsy ela akory izay aho dia niatrika asa tsy mahazatra amin'ny fametrahana lalana ho an'ny MetalLB. Hilamina ny zava-drehetra, satria... Matetika ny MetalLB dia tsy mitaky hetsika fanampiny, fa amin'ny toe-javatra misy antsika dia manana cluster lehibe izahay miaraka amin'ny fikirakirana tambajotra tena tsotra.

Ato amin'ity lahatsoratra ity dia holazaiko aminao ny fomba hanefa ny lalana mifototra amin'ny loharano sy ny politika ho an'ny tambajotra ivelany amin'ny cluster anao.

Tsy hiditra amin'ny antsipiriany momba ny fametrahana sy ny fanamboarana ny MetalLB aho, satria heveriko fa efa manana traikefa ianao. Manoro hevitra aho ny handeha mivantana amin'ny teboka, dia ny fametrahana zotra. Noho izany dia manana tranga efatra izahay:

Tranga 1: Rehefa tsy misy configuration ilaina

Andeha isika hijery tranga tsotra.

Fampitaovana tsara ho an'ny MetalLB amin'ny fomba L2

Tsy ilaina ny fanamafisam-peo fanampiny rehefa ao amin'ny subnet mitovy amin'ny adiresin'ny nodes ny adiresy navoakan'ny MetalLB.

Ohatra, manana subnet ianao 192.168.1.0/24, manana ny router 192.168.1.1, ary ny nodeso dia mahazo adiresy: 192.168.1.10-30, dia ho an'ny MetalLB dia azonao atao ny manitsy ny elanelana 192.168.1.100-120 ary aoka ho azo antoka fa hiasa izy ireo raha tsy misy fanampim-panazavana fanampiny.

Fa nahoana izany? Satria efa manana lalana voafefy ny node-nao:

# 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

Ary ny adiresy avy amin'ny faritra mitovy dia hampiasa azy ireo tsy misy hetsika fanampiny.

Tranga 2: Rehefa ilaina ny fanamboarana fanampiny

Fampitaovana tsara ho an'ny MetalLB amin'ny fomba L2

Tokony hamboarina lalana fanampiny ianao isaky ny tsy manana adiresy IP voarindra na lalana mankany amin'ny subnet izay avoakan'ny MetalLB ny adiresy.

Hazavaiko amin'ny antsipiriany bebe kokoa. Isaky ny mamoaka adiresy i MetalLB dia azo ampitahaina amin'ny andraikitra tsotra toy ny:

ip addr add 10.9.8.7/32 dev lo

Tandremo ny:

  • a) Ny adiresy dia omena miaraka amin'ny prefix /32 izany hoe tsy ampidirina ho azy amin'ny subnet ny lalana iray (adiresy fotsiny io)
  • b) Ny adiresy dia mifamatotra amin'ny interface node rehetra (ohatra loopback). Tsara ny manamarika eto ny endri-javatra amin'ny tamba-jotra Linux. Na inona na inona interface ampianao ny adiresy, ny kernel dia hikarakara ny fangatahana arp foana ary handefa valiny arp amin'ny iray amin'izy ireo, io fihetsika io dia heverina ho marina ary, ankoatra izany, dia ampiasaina betsaka amin'ny tontolo mavitrika toy ny Kubernetes.

Ity fihetsika ity dia azo amboarina, ohatra amin'ny alΓ lan'ny fampandehanana arp henjana:

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

Amin'ity tranga ity, ny valin'ny arp dia alefa raha tsy misy adiresy IP manokana ny interface. Ilaina ity toe-javatra ity raha mikasa ny hampiasa MetalLB ianao ary ny kube-proxy dia mandeha amin'ny fomba IPVS.

Na izany aza, ny MetalLB dia tsy mampiasa ny kernel handaminana ny fangatahana arp, fa manao izany amin'ny toerana misy ny mpampiasa, ka tsy hisy fiantraikany amin'ny fiasan'ny MetalLB io safidy io.

Andao hiverina amin'ny asantsika. Raha tsy ao amin'ny node-nao ny lalana ho an'ireo adiresy navoaka dia ampio mialoha amin'ny nodes rehetra:

ip route add 10.9.8.0/24 dev eth1

Tranga 3: Rehefa mila lalana mifototra amin'ny loharano ianao

Mila manitsy ny lalana mifototra amin'ny loharano ianao rehefa mahazo fonosana amin'ny vavahady mitokana, fa tsy ilay namboarina tamin'ny alΓ lan'ny default, noho izany dia tokony handeha amin'ny vavahady iray ihany koa ny fonosana valiny.

Ohatra, manana subnet mitovy ianao 192.168.1.0/24 natokana ho an'ny nodeso, fa te-hamoaka adiresy ivelany ianao amin'ny fampiasana MetalLB. Aoka hatao hoe manana adiresy maromaro avy amin'ny subnet ianao 1.2.3.0/24 hita ao amin'ny VLAN 100 ary te hampiasa azy ireo ianao mba hidirana amin'ny serivisy Kubernetes ivelany.

Fampitaovana tsara ho an'ny MetalLB amin'ny fomba L2

Rehefa mifandray 1.2.3.4 ianao dia hanao fangatahana avy amin'ny subnet hafa noho ny 1.2.3.0/24 ary miandry valiny. Ny node izay tompon'andraikitra amin'ny adiresy navoakan'ny MetalLB amin'izao fotoana izao 1.2.3.4, dia handray ny fonosana avy amin'ny router 1.2.3.1, fa ny valiny ho azy dia tsy maintsy mandeha amin'ny lalana mitovy, mandalo 1.2.3.1.

Satria ny nodentsika dia efa manana vavahady default voarindra 192.168.1.1, dia amin'ny alΓ lan'ny default ny valiny dia mankany aminy, fa tsy mankany 1.2.3.1, izay nahazoanay ny fonosana.

Ahoana no hiatrehana izany toe-javatra izany?

Amin'ity tranga ity, mila manomana ny nodes rehetra ianao amin'ny fomba izay ahafahan'izy ireo manompo ny adiresy ivelany tsy misy fanamafisana fanampiny. Izany hoe, ho an'ny ohatra etsy ambony, mila mamorona interface VLAN amin'ny node mialoha ianao:

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

Ary ampio lalana:

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

Azafady, azafady fa manampy zotra mankany amin'ny tabilao fandalovana mitokana izahay 100 lalana roa ilaina handefasana fonosana valiny amin'ny vavahady ihany no ahitana azy 1.2.3.1, hita ao ambadiky ny interface eth0.100.

Ankehitriny dia mila manampy fitsipika tsotra isika:

ip rule add from 1.2.3.0/24 lookup 100

izay milaza mazava hoe: raha ao ny adiresy loharanon'ny fonosana 1.2.3.0/24, dia mila mampiasa ny routing table ianao 100. Ao anatin’izany dia efa nofaritanay ny lalana handefasana azy 1.2.3.1

Tranga 4: Rehefa mila lalana mifototra amin'ny politika ianao

Ny topolojian'ny tambajotra dia mitovy amin'ny ohatra teo aloha, fa aleo atao hoe te-hiditra amin'ny adiresy dobo ivelany ihany koa ianao 1.2.3.0/24 avy amin'ny sarinao:

Fampitaovana tsara ho an'ny MetalLB amin'ny fomba L2

Ny mampiavaka azy dia rehefa miditra amin'ny adiresy ao 1.2.3.0/24, ny fonosan'ny valinteny dia mamely ny node ary manana adiresy loharano ao amin'ny faritra 1.2.3.0/24 dia halefa amim-pankatoavana any eth0.100, fa tianay ny Kubernetes hamindra azy amin'ny pod voalohany, izay niteraka ny fangatahana tany am-boalohany.

Ny famahana ity olana ity dia nanjary sarotra, saingy nanjary azo natao izany noho ny lalana mifototra amin'ny politika:

Raha mila fahatakarana tsara kokoa momba ny fizotran'izany dia indro misy kisary sakana netfilter:
Fampitaovana tsara ho an'ny MetalLB amin'ny fomba L2

Voalohany, toy ny tamin'ny ohatra teo aloha, andao hamorona latabatra zotra fanampiny:

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

Andeha isika hanampy fitsipika vitsivitsy amin'ny 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

Ireo fitsipika ireo dia hanamarika ny fifandraisana miditra amin'ny interface eth0.100, manamarika ny fonosana rehetra miaraka amin'ny marika 0x100, ny valiny ao anatin'ny fifandraisana mitovy dia ho voamarika amin'ny marika mitovy ihany koa.

Afaka manampy fitsipika zotra isika izao:

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

Izany hoe ny fonosana rehetra misy adiresy loharano 1.2.3.0/24 ary tag 0x100 tsy maintsy alefa amin'ny fampiasana tabilao 100.

Noho izany, ny fonosana hafa voaray amin'ny interface hafa dia tsy iharan'ity fitsipika ity, izay ahafahan'izy ireo alefa amin'ny alΓ lan'ny fitaovana Kubernetes mahazatra.

Misy zavatra iray hafa, ao amin'ny Linux dia misy sivana antsoina hoe reverse path, izay manimba ny zava-drehetra; manao fisavana tsotra izy: ho an'ny fonosana rehetra miditra dia manova ny adiresin'ny fonosana miaraka amin'ny adiresy mpandefa ary manamarina raha Ny fonosana dia afaka miala amin'ny alΓ lan'ny interface izay nahazoany azy, raha tsy izany dia hanivana azy io.

Ny olana dia amin'ny tranga misy antsika dia tsy mandeha tsara izy io, saingy azontsika atao ny manafoana azy:

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

Mariho fa ny baiko voalohany dia mifehy ny fitondran-tena manerantany amin'ny rp_filter; raha tsy kilemaina dia tsy hisy vokany ny baiko faharoa. Na izany aza, ny interfaces sisa dia hijanona miaraka amin'ny rp_filter enable.

Mba tsy hamerana tanteraka ny fiasan'ny sivana, dia azontsika ampiasaina ny fampiharana rp_filter ho an'ny netfilter. Amin'ny fampiasana rpfilter ho maody iptables, azonao atao ny manamboatra fitsipika mora vidy, ohatra:

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

avelao ny rp_filter amin'ny interface eth0.100 ho an'ny adiresy rehetra afa-tsy 1.2.3.0/24.

Source: www.habr.com

Add a comment