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.
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
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.
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:
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:
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