Irfinar tar-rotot għal MetalLB fil-modalità L2

Irfinar tar-rotot għal MetalLB fil-modalità L2
Ftit ilu kont iffaċċjat b'kompitu mhux tas-soltu ħafna li nwaqqaf routing għal MetalLB. Kollox ikun tajjeb, għax... Normalment MetalLB ma jeħtieġ ebda azzjonijiet addizzjonali, iżda fil-każ tagħna għandna cluster pjuttost kbir b'konfigurazzjoni tan-netwerk sempliċi ħafna.

F'dan l-artikolu ser ngħidlek kif tikkonfigura r-rotot ibbażat fuq is-sors u bbażat fuq il-politika għan-netwerk estern tal-cluster tiegħek.

Mhux se nidħol fid-dettall dwar l-installazzjoni u l-konfigurazzjoni ta' MetalLB, peress li nassumi li diġà għandek xi esperjenza. Nissuġġerixxi li tmur dritt għall-punt, jiġifieri t-twaqqif tar-rotot. Allura għandna erba' każijiet:

Każ 1: Meta l-ebda konfigurazzjoni ma tkun meħtieġa

Ejja nħarsu lejn każ sempliċi.

Irfinar tar-rotot għal MetalLB fil-modalità L2

Konfigurazzjoni addizzjonali tar-rotot mhix meħtieġa meta l-indirizzi maħruġa minn MetalLB ikunu fl-istess subnet bħall-indirizzi tan-nodi tiegħek.

Per eżempju, għandek subnet 192.168.1.0/24, għandu router 192.168.1.1, u n-nodi tiegħek jirċievu indirizzi: 192.168.1.10-30, imbagħad għal MetalLB tista 'taġġusta l-firxa 192.168.1.100-120 u kun żgur li se jaħdmu mingħajr ebda konfigurazzjoni addizzjonali.

Għalfejn? Minħabba li n-nodi tiegħek diġà għandhom rotot konfigurati:

# 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

U indirizzi mill-istess firxa se jerġgħu jużawhom mingħajr ebda azzjonijiet addizzjonali.

Każ 2: Meta tkun meħtieġa customization addizzjonali

Irfinar tar-rotot għal MetalLB fil-modalità L2

Għandek tikkonfigura rotot addizzjonali kull meta n-nodi tiegħek ma jkollhomx indirizz IP konfigurat jew rotta għas-subnet li għaliha jindirizza l-ħruġ ta' MetalLB.

Nispjega fi ftit aktar dettall. Kull meta MetalLB joħroġ indirizz, jista 'jitqabbel ma' assenjazzjoni sempliċi bħal:

ip addr add 10.9.8.7/32 dev lo

Oqgħod attent għal:

  • a) L-indirizz huwa assenjat bi prefiss /32 jiġifieri, rotta mhux se tiżdied awtomatikament mas-subnet għaliha (huwa biss indirizz)
  • b) L-indirizz huwa mehmuż ma 'kwalunkwe interface ta' node (per eżempju loopback). Ta 'min isemmi hawn il-karatteristiċi tal-munzell tan-netwerk Linux. Ma jimpurtax f'liema interface żżid l-indirizz, il-kernel dejjem se jipproċessa talbiet arp u jibgħat tweġibiet arp lil kwalunkwe wieħed minnhom, din l-imġieba hija kkunsidrata korretta u, barra minn hekk, tintuża ħafna f'ambjent dinamiku bħal Kubernetes.

Din l-imġieba tista' tiġi personalizzata, pereżempju billi tippermetti arp strett:

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

F'dan il-każ, it-tweġibiet arp jintbagħtu biss jekk l-interface espliċitament fih indirizz IP speċifiku. Dan is-setting huwa meħtieġ jekk qed tippjana li tuża MetalLB u l-kube-proxy tiegħek qed jaħdem fil-mod IPVS.

Madankollu, MetalLB ma jużax il-qalba biex jipproċessa talbiet arp, iżda jagħmel dan innifsu fl-ispazju ta 'l-utent, għalhekk din l-għażla mhux se taffettwa l-operat ta' MetalLB.

Ejja nerġgħu lura għall-kompitu tagħna. Jekk ir-rotta għall-indirizzi maħruġa ma teżistix fuq in-nodi tiegħek, żidha bil-quddiem man-nodi kollha:

ip route add 10.9.8.0/24 dev eth1

Każ 3: Meta jkollok bżonn routing ibbażat fuq is-sors

Ikollok bżonn tikkonfigura r-rotot ibbażat fuq is-sors meta tirċievi pakketti permezz ta' portal separat, mhux dak ikkonfigurat b'mod awtomatiku, għalhekk il-pakketti ta' rispons għandhom jgħaddu wkoll mill-istess portal.

Per eżempju, għandek l-istess subnet 192.168.1.0/24 iddedikat għan-nodi tiegħek, iżda trid toħroġ indirizzi esterni billi tuża MetalLB. Ejja nassumu li għandek indirizzi multipli minn subnet 1.2.3.0/24 li tinsab f'VLAN 100 u trid tużahom biex taċċessa s-servizzi ta' Kubernetes esternament.

Irfinar tar-rotot għal MetalLB fil-modalità L2

Meta tikkuntattja 1.2.3.4 inti tkun qed tagħmel talbiet minn subnet differenti minn 1.2.3.0/24 u stenna għal tweġiba. In-node li bħalissa huwa l-kaptan għall-indirizz maħruġ minn MetalLB 1.2.3.4, se tirċievi l-pakkett mir-router 1.2.3.1, iżda t-tweġiba għalih trid neċessarjament tmur l-istess rotta, permezz 1.2.3.1.

Peress li n-node tagħna diġà għandu gateway default konfigurat 192.168.1.1, imbagħad awtomatikament ir-rispons se jmur lilu, u mhux lil 1.2.3.1, li permezz tiegħu rċevejna l-pakkett.

Kif tlaħħaq ma 'din is-sitwazzjoni?

F'dan il-każ, għandek bżonn tipprepara n-nodi kollha tiegħek b'tali mod li jkunu lesti biex iservu indirizzi esterni mingħajr konfigurazzjoni addizzjonali. Jiġifieri, għall-eżempju ta 'hawn fuq, għandek bżonn toħloq interface VLAN fuq in-node minn qabel:

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

U mbagħad żid ir-rotot:

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

Jekk jogħġbok innota li aħna nżidu r-rotot ma 'tabella tar-rotot separata 100 se jkun fih biss żewġ rotot meħtieġa biex jibgħat pakkett ta 'rispons permezz tal-gateway 1.2.3.1, li jinsab wara l-interface eth0.100.

Issa rridu nżidu regola sempliċi:

ip rule add from 1.2.3.0/24 lookup 100

li espliċitament jgħid: jekk l-indirizz tas-sors tal-pakkett ikun fi 1.2.3.0/24, imbagħad għandek bżonn tuża t-tabella tar-rotta 100. Fiha diġà ddeskrivejna r-rotta li se tibgħatlu 1.2.3.1

Każ 4: Meta jkollok bżonn routing ibbażat fuq il-politika

It-topoloġija tan-netwerk hija l-istess bħal fl-eżempju preċedenti, iżda ejja ngħidu li trid ukoll tkun tista’ taċċessa indirizzi ta’ pool esterni 1.2.3.0/24 mill-imżiewed tiegħek:

Irfinar tar-rotot għal MetalLB fil-modalità L2

Il-partikolarità hija li meta taċċessa kwalunkwe indirizz fi 1.2.3.0/24, il-pakkett tar-rispons jolqot in-nodu u għandu indirizz tas-sors fil-medda 1.2.3.0/24 se jintbagħtu b’ubbidjenza lil eth0.100, iżda rridu li Kubernetes jidderieġih mill-ġdid lejn l-ewwel pod tagħna, li ġġenera t-talba oriġinali.

Is-soluzzjoni ta 'din il-problema rriżulta li kienet diffiċli, iżda sar possibbli grazzi għal routing ibbażat fuq il-politika:

Għal fehim aħjar tal-proċess, hawn dijagramma blokka netfilter:
Irfinar tar-rotot għal MetalLB fil-modalità L2

L-ewwel, bħal fl-eżempju preċedenti, ejja noħolqu tabella ta 'routing addizzjonali:

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

Issa ejja nżidu ftit regoli ma' 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

Dawn ir-regoli se jimmarkaw konnessjonijiet deħlin għall-interface eth0.100, timmarka l-pakketti kollha bit-tikketta 0x100, it-tweġibiet fl-istess konnessjoni se jkunu wkoll immarkati bl-istess tikketta.

Issa nistgħu nżidu regola tar-rotta:

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

Jiġifieri, il-pakketti kollha b'indirizz tas-sors 1.2.3.0/24 u tag 0x100 għandhom jiġu mgħoddija bl-użu ta 'mejda 100.

Għalhekk, pakketti oħra riċevuti fuq interface ieħor mhumiex suġġetti għal din ir-regola, li tippermettilhom li jiġu mgħoddija bl-użu ta 'għodod standard Kubernetes.

Hemm ħaġa oħra, fil-Linux hemm l-hekk imsejjaħ filtru tar-rotta inversa, li jħassru l-lampun kollu; iwettaq kontroll sempliċi: għall-pakketti kollha deħlin, jibdel l-indirizz tas-sors tal-pakkett bl-indirizz tal-mittent u jiċċekkja jekk il-pakkett jista 'jħalli mill-istess interface li fuqu ġie riċevut, jekk le, se jiffiltrah.

Il-problema hija li fil-każ tagħna mhux se taħdem b'mod korrett, iżda nistgħu tiddiżattivaha:

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

Jekk jogħġbok innota li l-ewwel kmand jikkontrolla l-imġieba globali ta 'rp_filter; jekk ma jkunx diżattivat, it-tieni kmand ma jkollu l-ebda effett. Madankollu, l-interfaces li jifdal se jibqgħu b'rp_filter attivat.

Sabiex ma nillimitawx kompletament l-operat tal-filtru, nistgħu nużaw l-implimentazzjoni rp_filter għal netfilter. Bl-użu ta 'rpfilter bħala modulu iptables, tista' tikkonfigura regoli pjuttost flessibbli, pereżempju:

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

abilita rp_filter fuq l-interface eth0.100 għall-indirizzi kollha ħlief 1.2.3.0/24.

Sors: www.habr.com

Żid kumment