Hagaajinta hagaajinta MetalLB ee qaabka L2

Hagaajinta hagaajinta MetalLB ee qaabka L2
Muddo aan fogayn ka hor waxa i soo food saartay hawl aan caadi ahayn oo ah samaynta dariiqa MetalLB. Wax walba way fiicnaan lahaayeen, sababtoo ah... Caadiyan MetalLB uma baahna wax ficil ah oo dheeri ah, laakiin xaaladdeena waxaan leenahay koox aad u weyn oo leh qaabeyn shabakad aad u fudud.

Maqaalkan waxaan ku sheegi doonaa sida loo habeeyo jiheynta isha ku saleysan iyo siyaasada ku saleysan shabakada dibadda ee kutladaada.

Ma aadi doono faahfaahin ku saabsan rakibidda iyo habaynta MetalLB, maadaama aan u malaynayo inaad horeba khibrad u leedahay. Waxaan soo jeedinayaa in si toos ah loo socdo barta, oo ah dejinta dariiqa. Markaa waxaanu haynaa afar xaaladood:

Kiiska 1: Marka aan qaabayn loo baahnayn

Aan eegno kiis fudud.

Hagaajinta hagaajinta MetalLB ee qaabka L2

Habayn dheeri ah oo dariiqin ah looma baahna marka ciwaanada ay bixiso MetalLB ay ku jiraan shabakad hoose oo la mid ah ciwaanada noodhkaaga.

Tusaale ahaan, waxaad leedahay subnet 192.168.1.0/24, waxay leedahay router 192.168.1.1, oo qanjidhadaadu waxay helayaan ciwaanada: 192.168.1.10-30, ka dib MetalLB waxaad hagaajin kartaa kala duwanaanta 192.168.1.100-120 oo hubi in ay ku shaqayn doonaan iyada oo aan wax qaabayn dheeraad ah.

Waa maxay sababtu? Sababtoo ah qanjidhadaadu waxay horey u lahaayeen wadooyin la habeeyey:

# 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

Cinwaannada isla kala duwan ayaa dib u isticmaali doona iyaga oo aan wax ficil ah oo dheeraad ah la helin.

Kiiska 2: Marka loo baahan yahay habayn dheeraad ah

Hagaajinta hagaajinta MetalLB ee qaabka L2

Waa in aad habayso wadooyin dheeraad ah mar kasta oo qanjidhadaadu aanay lahayn ciwaanka IP habaysan ama dariiqa loo maro subnet-ka kaas oo MetalLB ay wax ka qabato.

Waxaan u sharxi doonaa in yar oo faahfaahsan. Mar kasta oo MetalLB ay soo saarto cinwaan, waxaa la barbar dhigi karaa hawl fudud sida:

ip addr add 10.9.8.7/32 dev lo

U fiirso:

  • a) Ciwaanka waxa lagu qoray horgale /32 taasi waa, waddo si toos ah loogu dari maayo subnet-ka (waa ciwaanka kaliya)
  • b) Cinwaanka waxa uu ku dheggan yahay is dhexgalka noode kasta (tusaale loopback). Waxaa mudan in halkan lagu xuso astaamaha xirmada shabakadda Linux. Si kastaba ha noqotee, interface-ka aad ku darto ciwaanka, kernel-ku wuxuu had iyo jeer ka baaraandegi doonaa codsiyada arp wuxuuna u diri doonaa jawaabaha arp mid kasta oo iyaga ka mid ah, habdhaqankan waxaa loo arkaa mid sax ah, sidoo kale, si weyn ayaa loogu isticmaalaa jawi firfircoon sida Kubernetes.

Dhaqankan waa la habayn karaa, tusaale ahaan iyadoo la awoodsiiyo arp adag:

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

Xaaladdan oo kale, jawaabaha arp ayaa la soo diri doonaa oo keliya haddii is-dhexgalka uu si cad ugu jiro ciwaanka IP-ga gaarka ah. Goobtan ayaa loo baahan yahay haddii aad qorshaynayso inaad isticmaasho MetalLB oo wakiilkaaga kube-ku uu ku socdo qaabka IPVS.

Si kastaba ha ahaatee, MetalLB uma isticmaasho kernel-ka si ay uga baaraandegto codsiyada arp, laakiin waxay ku samaysaa meel isticmaale, markaa doorashadani ma saamayn doonto hawlgalka MetalLB.

Aan u soo noqono hawsheenii. Haddii dariiqa ciwaannada la soo saaray aysan ku jirin noodhkaaga, horay ugu sii dar dhammaan noodyada:

ip route add 10.9.8.0/24 dev eth1

Kiiska 3: Marka aad u baahan tahay marin ku salaysan isha

Waxaad u baahan doontaa inaad habayso marin-ku-saleysan isha marka aad ka hesho baakado laga soo galo albaab gooni ah, ma aha mid lagu habeeyey, sidaas darteed xirmooyinka jawaabta waa inay sidoo kale soo maraan albaab isku mid ah.

Tusaale ahaan, waxaad leedahay subnet isku mid ah 192.168.1.0/24 u go'ay qanjidhadaada, laakiin waxaad rabtaa inaad soo saarto cinwaano dibadda ah adoo isticmaalaya MetalLB. Aynu ka soo qaadno inaad cinwaano badan ka haysato shabakad hoose 1.2.3.0/24 ku yaal VLAN 100 oo aad rabto inaad u isticmaasho si aad u hesho adeegyada Kubernetes dibadda.

Hagaajinta hagaajinta MetalLB ee qaabka L2

Markaad la xiriirto 1.2.3.4 Waxaad codsiyo ka samayn doontaa subnet ka duwan kan 1.2.3.0/24 jawaabna sug. Noodka hadda maamulaha u ah ciwaanka MetalLB ay bixisay 1.2.3.4, waxay ka heli doontaa xirmada router-ka 1.2.3.1, laakiin jawaabta isaga waa in ay daruuri tahay in la maro wadadii la mid ah, iyada oo loo marayo 1.2.3.1.

Maaddaama noodkeennu hore u lahaan jiray albaabka hore ee la habeeyey 192.168.1.1, ka dib marka la eego jawaabtu isagay aadi doontaa, ee ma noqon doonto 1.2.3.1, kaas oo aan ka helnay xirmada.

Sidee loola qabsan karaa xaaladdan?

Xaaladdan oo kale, waxaad u baahan tahay inaad u diyaariso dhammaan qanjidhadaada si ay diyaar ugu noqdaan inay u adeegaan ciwaannada dibadda iyada oo aan lahayn qaabayn dheeraad ah. Taasi waa, tusaale ahaan kor ku xusan, waxaad u baahan tahay inaad horay u abuurto interface VLAN ee noodhka:

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

Ka dibna ku dar dariiqyada:

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

Fadlan ogow in aan ku darno waddooyin miis gaar ah 100 waxay ka koobnaan doontaa laba waddo oo keliya oo lagama maarmaanka u ah in baakidh jawaab celin ah loogu diro albaabka 1.2.3.1, oo ku yaala gadaashiisa interface eth0.100.

Hadda waxaan u baahanahay inaan ku darno xeer fudud:

ip rule add from 1.2.3.0/24 lookup 100

kaas oo si cad u leh: haddii ciwaanka isha baakidhku ku jiro 1.2.3.0/24, ka dibna waxaad u baahan tahay inaad isticmaasho miiska dajinta 100. Halkaa waxaynu hore ugu soo sheegnay dariiqa u diri doona 1.2.3.1

Kiiska 4: Marka aad u baahan tahay habayn siyaasad ku salaysan

Shabakadda topology-ga waxay la mid tahay tusaalihii hore, laakiin aan sheegno inaad sidoo kale rabto inaad awood u yeelato inaad gasho cinwaannada barkada dibadda 1.2.3.0/24 laga bilaabo galalkaaga:

Hagaajinta hagaajinta MetalLB ee qaabka L2

Waxa u gaar ah ayaa ah marka la gelayo ciwaan kasta 1.2.3.0/24, xidhmada jawaabta waxay ku dhufatay noodhka waxayna leedahay ciwaanka isha ee xadka 1.2.3.0/24 waxaa loo diri doonaa si adeecaan eth0.100, laakiin waxaan rabnaa in Kubernetes ay dib ugu hagaajiso boodhkayaga ugu horreeya, kaas oo abuuray codsigii asalka ahaa.

Xallinta dhibaatadan waxay noqotay mid adag, laakiin waxay noqotay mid suurtogal ah iyada oo loo mahad-celinayo hab-raaca siyaasadda ku salaysan:

Si loo fahmo habsocodka, halkan waa jaantuska xannibaadda netfilter:
Hagaajinta hagaajinta MetalLB ee qaabka L2

Marka hore, sida tusaalihii hore, aynu abuurno miis dheeri ah oo dariiqa ah:

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

Hadda aan ku darno dhowr xeer 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

Xeerarkani waxay calaamadin doonaan xidhiidhada soo galaya interface-ka eth0.100, ku calaamadeynaya dhammaan baakadaha sumadda 0x100, jawaabaha isku xidhidh la mid ah waxa sidoo kale lagu calaamadin doonaa sumad isku mid ah.

Hadda waxaan ku dari karnaa xeerka dariiqa:

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

Taasi waa, dhammaan baakooyinka leh ciwaanka isha 1.2.3.0/24 iyo tag 0x100 waa in miis la mariyaa 100.

Sidaa darteed, baakadaha kale ee lagu helo is-dhexgalka kale kuma xirna qaanuunkan, kaas oo u oggolaanaya in lagu wareejiyo iyada oo la adeegsanayo qalabka Kubernetes caadiga ah.

Waxaa jira hal shay oo kale, gudaha Linux waxaa ku jira wax loogu yeero shaandhada dib-u-celinta, kaas oo wax walba kharriba; waxay fulisaa jeeg fudud: dhammaan baakadaha soo galaya, waxay beddeshaa ciwaanka isha ee baakidhka ciwaanka soo diraha oo hubiya in baakidhku waxa uu ka bixi karaa isla interface-kii lagu helay, haddii kale, way sifeyn doontaa.

Dhibaatadu waxay tahay in kiiskeena si sax ah uma shaqeyn doono, laakiin waan joojin karnaa:

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

Fadlan ogow in amarka koowaad uu xakameynayo habdhaqanka caalamiga ah ee rp_filter; haddii uusan naafo ahayn, taliska labaad wax saameyn ah kuma yeelan doono. Si kastaba ha ahaatee, is-dhex-galka haray ayaa sii ahaan doona iyadoo rp_filter karti u leh.

Si aan si buuxda loo xaddidin hawlgalka shaandhada, waxaan u isticmaali karnaa hirgelinta rp_filter ee netfilter. Isticmaalka rpfilter sida module iptables, waxaad dejin kartaa xeerar dabacsan, tusaale ahaan:

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

awood rp_filter interface-ka eth0.100 dhamaan ciwaanada marka laga reebo 1.2.3.0/24.

Source: www.habr.com

Add a comment