Slighe grinn airson MetalLB ann am modh L2

Slighe grinn airson MetalLB ann am modh L2
O chionn ghoirid bha obair gu math annasach mu choinneamh stèidheachadh slighe airson MetalLB. Bhiodh a h-uile dad gu math, oir ... Mar as trice chan fheum MetalLB gnìomhan a bharrachd, ach anns a’ chùis againn tha cruinneachadh meadhanach mòr againn le rèiteachadh lìonra gu math sìmplidh.

San artaigil seo innsidh mi dhut mar a rèiticheas tu slighe stèidhichte air stòr agus stèidhichte air poileasaidh airson lìonra taobh a-muigh do bhuidheann.

Cha tèid mi a-steach gu mion-fhiosrachadh mu bhith a’ stàladh agus a’ rèiteachadh MetalLB, oir tha mi a’ gabhail ris gu bheil beagan eòlais agad mu thràth. Tha mi a’ moladh a dhol dìreach chun a’ phuing, is e sin stèidheachadh slighe. Mar sin tha ceithir cùisean againn:

Cùis 1: Nuair nach eil feum air rèiteachadh

Bheir sinn sùil air cùis shìmplidh.

Slighe grinn airson MetalLB ann am modh L2

Chan eil feum air rèiteachadh slighe a bharrachd nuair a tha na seòlaidhean a chuir MetalLB a-mach san aon fho-lìon ri seòlaidhean nan nodan agad.

Mar eisimpleir, tha subnet agad 192.168.1.0/24, tha router aige 192.168.1.1, agus gheibh na nodan agad seòlaidhean: 192.168.1.10-30, an uairsin airson MetalLB faodaidh tu an raon atharrachadh 192.168.1.100-120 agus bi cinnteach gun obraich iad gun rèiteachadh a bharrachd.

Carson a tha sin? Leis gu bheil slighean air an rèiteachadh aig na nodan agad mu thràth:

# 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

Agus cleachdaidh seòlaidhean bhon aon raon iad às aonais gnìomhan a bharrachd.

Cùis 2: Nuair a tha feum air gnàthachadh a bharrachd

Slighe grinn airson MetalLB ann am modh L2

Bu chòir dhut slighean a bharrachd a rèiteachadh nuair nach eil seòladh IP rèiteachaidh aig na nodan agad no slighe chun subnet air a bheil cùisean MetalLB a’ dèiligeadh.

Mìnichidh mi beagan nas mionaidiche. Nuair a chuireas MetalLB a-mach seòladh, faodar a choimeas ri sònrachadh sìmplidh mar:

ip addr add 10.9.8.7/32 dev lo

Thoir an aire:

  • a) Tha an seòladh air a shònrachadh le ro-leasachan /32 is e sin, cha tèid slighe a chuir gu fèin-ghluasadach ris an subnet air a shon (chan eil ann ach seòladh)
  • b) Tha an seòladh ceangailte ri eadar-aghaidh nód sam bith (mar eisimpleir loopback). Is fhiach iomradh a thoirt an seo air feartan stac lìonra Linux. Ge bith dè an eadar-aghaidh a chuireas tu an seòladh ris, bidh an kernel an-còmhnaidh a’ giullachd iarrtasan arp agus a’ cur freagairtean arp gu gin dhiubh, thathas den bheachd gu bheil an giùlan seo ceart agus, a bharrachd air sin, air a chleachdadh gu math farsaing ann an àrainneachd cho beothail ri Kubernetes.

Faodar an giùlan seo a ghnàthachadh, mar eisimpleir le bhith a’ comasachadh arp teann:

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

Anns a 'chùis seo, cha tèid freagairtean arp a chuir a-steach ach ma tha seòladh IP sònraichte anns an eadar-aghaidh. Tha feum air an t-suidheachadh seo ma tha thu an dùil MetalLB a chleachdadh agus gu bheil an kube-proxy agad a’ ruith ann am modh IPVS.

Ach, cha bhith MetalLB a’ cleachdadh an kernel gus iarrtasan arp a phròiseasadh, ach bidh e ga dhèanamh fhèin ann an àite luchd-cleachdaidh, agus mar sin cha toir an roghainn seo buaidh air gnìomhachd MetalLB.

Tillidh sinn chun obair againn. Mura h-eil an t-slighe airson na seòlaidhean a chaidh a chuir a-mach ann air na nodan agad, cuir ris a h-uile nod ro-làimh e:

ip route add 10.9.8.0/24 dev eth1

Cùis 3: Nuair a bhios feum agad air slighe stèidhichte air stòr

Feumaidh tu slighe stèidhichte air stòr a rèiteachadh nuair a gheibh thu pacaidean tro gheata air leth, chan e am fear a chaidh a rèiteachadh gu bunaiteach, mar sin bu chòir pacaidean freagairt a dhol tron ​​​​aon gheata cuideachd.

Mar eisimpleir, tha an aon subnet agad 192.168.1.0/24 coisrigte dha na nodan agad, ach tha thu airson seòlaidhean taobh a-muigh a chuir a-mach a’ cleachdadh MetalLB. Feuch gun smaoinich sinn gu bheil iomadh seòladh agad bho subnet 1.2.3.0/24 suidhichte ann an VLAN 100 agus tha thu airson an cleachdadh gus faighinn gu seirbheisean Kubernetes air an taobh a-muigh.

Slighe grinn airson MetalLB ann am modh L2

Nuair a chuireas tu fios 1.2.3.4 bidh thu a’ dèanamh iarrtasan bho subnet eile seach 1.2.3.0/24 agus feitheamh ri freagairt. An nód a tha an-dràsta na mhaighstir airson an t-seòladh a chuir MetalLB a-mach 1.2.3.4, a gheibh am pasgan bhon router 1.2.3.1, ach feumaidh am freagradh air a shon a dhol air an aon slighe troimhe 1.2.3.1.

Leis gu bheil geata bunaiteach aig an nód againn mu thràth 192.168.1.1, an uairsin mar as trice thèid am freagairt thuige, agus chan ann gu 1.2.3.1, tron ​​d'fhuair sinn am pasgan.

Ciamar a dhèiligeas tu ris an t-suidheachadh seo?

Anns a 'chùis seo, feumaidh tu na nodan agad uile ullachadh gus am bi iad deiseil airson seòlaidhean taobh a-muigh a fhrithealadh gun rèiteachadh a bharrachd. Is e sin, airson an eisimpleir gu h-àrd, feumaidh tu eadar-aghaidh VLAN a chruthachadh air an nód ro làimh:

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

Agus an uairsin cuir ris na slighean:

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

Thoir an aire gun cuir sinn slighean ri clàr slighe air leth 100 cha bhi ann ach dà shlighe a tha riatanach gus pasgan freagairt a chuir tron ​​gheata 1.2.3.1, suidhichte air cùl an eadar-aghaidh eth0.100.

A-nis feumaidh sinn riaghailt shìmplidh a chur ris:

ip rule add from 1.2.3.0/24 lookup 100

a tha ag ràdh gu soilleir: ma tha seòladh stòr a’ phacaid a-staigh 1.2.3.0/24, feumaidh tu an clàr slighe a chleachdadh 100. Tha sinn mu thràth air cunntas a thoirt air an t-slighe a chuireas e troimhe 1.2.3.1

Cùis 4: Nuair a bhios feum agad air slighe stèidhichte air poileasaidh

Tha topology an lìonraidh an aon rud ris an eisimpleir roimhe, ach canaidh sinn gu bheil thu cuideachd airson faighinn gu seòlaidhean amar a-muigh 1.2.3.0/24 bho do làmhan:

Slighe grinn airson MetalLB ann am modh L2

Is e an rud sònraichte nuair a gheibh thu cothrom air seòladh sam bith a-steach 1.2.3.0/24, bidh am pasgan freagairt a’ bualadh air an nód agus tha seòladh stòr san raon 1.2.3.0/24 cuirear gu h-umhail eth0.100, ach tha sinn airson gun cuir Kubernetes ath-stiùireadh chun chiad pod againn, a chruthaich an t-iarrtas tùsail.

Bha e duilich an duilgheadas seo fhuasgladh, ach dh’ fhàs e comasach mar thoradh air slighe stèidhichte air poileasaidh:

Airson tuigse nas fheàrr air a’ phròiseas, seo diagram bloc netfilter:
Slighe grinn airson MetalLB ann am modh L2

An toiseach, mar anns an eisimpleir roimhe, cruthaichidh sinn clàr slighe a bharrachd:

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

A-nis leig dhuinn beagan riaghailtean a chur ri 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

Comharraichidh na riaghailtean seo ceanglaichean a tha a’ tighinn a-steach don eadar-aghaidh eth0.100, a 'comharrachadh a h-uile pasgan leis a' chlib 0x100, bidh freagairtean taobh a-staigh an aon cheangal cuideachd air an comharrachadh leis an aon tag.

A-nis is urrainn dhuinn riaghailt slighe a chuir ris:

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

Is e sin, a h-uile pasgan le seòladh stòr 1.2.3.0/24 agus tag 0x100 feumaidh iad a bhith air an stiùireadh le bòrd 100.

Mar sin, chan eil pacaidean eile a gheibhear air eadar-aghaidh eile fo ùmhlachd na riaghailt seo, a leigeas leotha a bhith air an stiùireadh le bhith a’ cleachdadh innealan àbhaisteach Kubernetes.

Tha aon rud eile ann, ann an Linux tha criathrag frith-rathad ris an canar, a tha a’ milleadh an rud gu lèir; bidh e a’ dèanamh sgrùdadh sìmplidh: airson a h-uile pacaid a thig a-steach, bidh e ag atharrachadh seòladh stòr a’ phacaid leis an t-seòladh neach-cuiridh agus a’ sgrùdadh a bheil faodaidh am pacaid falbh tron ​​​​aon eadar-aghaidh air an d’ fhuaireadh e, mura h-eil, sìolaidh e a-mach e.

Is e an duilgheadas a th 'ann nach obraich e gu ceart nar cùis, ach is urrainn dhuinn a dhì-cheadachadh:

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

Thoir an aire gu bheil a’ chiad àithne a’ cumail smachd air giùlan cruinneil rp_filter; mura h-eil e ciorramach, cha bhi buaidh sam bith aig an dàrna àithne. Ach, fuirichidh an eadar-aghaidh a tha air fhàgail le rp_filter air a chomasachadh.

Gus nach cuir sinn crìoch air obrachadh a’ chriathrag gu tur, is urrainn dhuinn buileachadh rp_filter a chleachdadh airson netfilter. A’ cleachdadh rpfilter mar mhodal iptables, faodaidh tu riaghailtean gu math sùbailte a rèiteachadh, mar eisimpleir:

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

comas a thoirt do rp_filter air an eadar-aghaidh eth0.100 airson a h-uile seòladh ach a-mhàin 1.2.3.0/24.

Source: www.habr.com

Cuir beachd ann