Масири дақиқ барои MetalLB дар ҳолати L2

Масири дақиқ барои MetalLB дар ҳолати L2
Чанде пеш ман бо як вазифаи ғайриоддӣ оид ба танзими масир барои MetalLB дучор шудам. Ҳамааш хуб мешуд, зеро... Одатан MetalLB ягон амали иловагӣ талаб намекунад, аммо дар ҳолати мо мо кластери хеле калон бо конфигуратсияи хеле оддии шабака дорем.

Дар ин мақола ман ба шумо мегӯям, ки чӣ гуна масир дар асоси сарчашма ва сиёсатро барои шабакаи берунии кластери худ танзим кунед.

Ман дар бораи насб ва конфигуратсияи MetalLB муфассал маълумот намедиҳам, зеро гумон мекунам, ки шумо аллакай таҷриба доред. Ман тавсия медиҳам, ки рост ба нукта, яъне танзими масир равам. Ҳамин тавр, мо чор ҳолат дорем:

Ҳолати 1: Вақте ки ягон конфигуратсия талаб карда намешавад

Биёед як мисоли оддиро дида бароем.

Масири дақиқ барои MetalLB дар ҳолати L2

Вақте ки суроғаҳои аз ҷониби MetalLB додашуда дар як зершабака бо суроғаҳои гиреҳҳои шумо ҳастанд, конфигуратсияи иловагии масир талаб карда намешавад.

Масалан, шумо зершабака доред 192.168.1.0/24, он дорои роутер 192.168.1.1, ва гиреҳҳои шумо суроғаҳоро мегиранд: 192.168.1.10-30, пас барои MetalLB шумо метавонед диапазонро танзим кунед 192.168.1.100-120 ва боварӣ ҳосил кунед, ки онҳо бе ягон конфигуратсияи иловагӣ кор хоҳанд кард.

Барои чӣ ин? Азбаски гиреҳҳои шумо аллакай масирҳоро танзим кардаанд:

# 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

Ва суроғаҳои ҳамон диапазон онҳоро бе ягон амали иловагӣ дубора истифода хоҳанд кард.

Ҳолати 2: Вақте ки мутобиқсозии иловагӣ талаб карда мешавад

Масири дақиқ барои MetalLB дар ҳолати L2

Шумо бояд хатсайрҳои иловагиро танзим кунед, вақте ки гиреҳҳои шумо суроғаи танзимшудаи IP ё масир ба зершабаке надоранд, ки барои онҳо MetalLB масъала мегузорад.

Ман каме муфассалтар шарҳ медиҳам. Ҳар вақте ки MetalLB суроғаро мебарорад, онро метавон бо супориши оддӣ муқоиса кард, ба монанди:

ip addr add 10.9.8.7/32 dev lo

Диққат диҳед:

  • a) Суроға бо префикс таъин карда мешавад /32 яъне масир ба таври худкор ба зершабакаи он илова карда намешавад (ин танҳо суроға аст)
  • b) Суроға ба ҳама гуна интерфейси гиреҳ замима карда мешавад (масалан, бозгашт). Қобили зикр аст, ки дар ин ҷо хусусиятҳои стек шабакаи Linux. Новобаста аз он ки шумо суроғаро ба кадом интерфейс илова мекунед, ядро ​​​​ҳамеша дархостҳои arp-ро коркард мекунад ва ба ҳар кадоми онҳо посухҳои arp мефиристад, ин рафтор дуруст ҳисобида мешавад ва илова бар ин, дар чунин муҳити динамикӣ ба монанди Kubernetes хеле васеъ истифода мешавад.

Ин рафторро метавон танзим кард, масалан, тавассути фаъол кардани arp қатъӣ:

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

Дар ин ҳолат, ҷавобҳои arp танҳо дар сурате фиристода мешаванд, ки интерфейс ба таври возеҳ суроғаи IP-и мушаххасро дар бар гирад. Ин танзимот талаб карда мешавад, агар шумо нақшаи истифодаи MetalLB-ро дошта бошед ва kube-proxy-и шумо дар реҷаи IPVS кор кунад.

Аммо, MetalLB ядроро барои коркарди дархостҳои arp истифода намебарад, балки онро худаш дар фазои корбар иҷро мекунад, аз ин рӯ ин хосият ба кори MetalLB таъсир намерасонад.

Биёед ба вазифаи худ баргардем. Агар масири суроғаҳои додашуда дар гиреҳҳои шумо мавҷуд набошад, онро пешакӣ ба ҳамаи гиреҳҳо илова кунед:

ip route add 10.9.8.0/24 dev eth1

Ҳолати 3: Вақте ки ба шумо масир дар асоси манбаъ лозим аст

Ҳангоми қабули пакетҳо тавассути шлюзи алоҳида, ба шумо лозим меояд, ки масири ба манбаъ асосёфтаро танзим кунед, на он ки бо нобаёнӣ танзим карда мешавад, бинобар ин бастаҳои ҷавобӣ низ бояд аз ҳамон дарвоза гузаранд.

Масалан, шумо зершабакаи якхела доред 192.168.1.0/24 ба гиреҳҳои шумо бахшида шудааст, аммо шумо мехоҳед, ки бо истифода аз MetalLB суроғаҳои беруна диҳед. Фарз мекунем, ки шумо аз зершабака суроғаҳои сершумор доред 1.2.3.0/24 дар VLAN 100 ҷойгир аст ва шумо мехоҳед онҳоро барои дастрасӣ ба хидматҳои Kubernetes берунӣ истифода баред.

Масири дақиқ барои MetalLB дар ҳолати L2

Ҳангоми тамос 1.2.3.4 шумо аз зершабакаи дигар аз зершабакаи дигар дархост хоҳед кард 1.2.3.0/24 ва интизори ҷавоб. Гиреде, ки ҳоло устои суроғаи MetalLB мебошад 1.2.3.4, бастаро аз роутер қабул мекунад 1.2.3.1, аммо ҷавоб барои ӯ ҳатман бояд ҳамон масир, тавассути 1.2.3.1.

Азбаски гиреҳи мо аллакай як шлюзи танзимшудаи пешфарз дорад 192.168.1.1, он гоҳ бо нобаёнӣ ҷавоб ба ӯ меравад, на ба 1.2.3.1, ки ба воситаи он мо бастаро гирифтем.

Бо ин вазъият чӣ гуна бояд мубориза бурд?

Дар ин ҳолат, шумо бояд ҳамаи гиреҳҳои худро тавре омода кунед, ки онҳо барои хидматрасонии суроғаҳои беруна бидуни конфигуратсияи иловагӣ омода бошанд. Яъне, барои мисоли боло, шумо бояд интерфейси VLAN-ро дар гиреҳ пешакӣ эҷод кунед:

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

Ва он гоҳ роҳҳоро илова кунед:

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

Лутфан таваҷҷӯҳ намоед, ки мо ба ҷадвали масири алоҳида масир илова мекунем 100 он танҳо ду масирро дар бар мегирад, ки барои фиристодани бастаи ҷавоб тавассути дарвоза заруранд 1.2.3.1, дар паси интерфейс ҷойгир аст eth0.100.

Ҳоло мо бояд як қоидаи оддӣ илова кунем:

ip rule add from 1.2.3.0/24 lookup 100

ки ба таври возеҳ гуфта шудааст: агар суроғаи манбаи пакет дар 1.2.3.0/24, пас шумо бояд ҷадвали масирро истифода баред 100. Дар он мо аллакай масиреро тавсиф кардем, ки ӯро тавассути он мефиристад 1.2.3.1

Ҳолати 4: Вақте ки ба шумо масир дар асоси сиёсат лозим аст

Топологияи шабака ҳамон тавре ки дар мисоли қаблӣ аст, аммо бигӯед, ки шумо инчунин мехоҳед, ки ба суроғаҳои ҳавзи беруна дастрасӣ пайдо кунед 1.2.3.0/24 аз қуттиҳои шумо:

Масири дақиқ барои MetalLB дар ҳолати L2

Хусусияти он аст, ки ҳангоми дастрасӣ ба ягон суроға дар 1.2.3.0/24, бастаи посух ба гиреҳ мерасад ва дар диапазон суроғаи манбаъ дорад 1.2.3.0/24 ба итоаткорона фиристода мешавад eth0.100, аммо мо мехоҳем, ки Kubernetes онро ба подтаи аввалини мо, ки дархости аслиро тавлид кардааст, равона кунад.

Ҳалли ин мушкилот душвор буд, аммо он ба шарофати масир дар асоси сиёсат имконпазир гардид:

Барои беҳтар фаҳмидани раванд, дар ин ҷо диаграммаи блоки netfilter оварда шудааст:
Масири дақиқ барои MetalLB дар ҳолати L2

Аввалан, мисли мисоли қаблӣ, биёед ҷадвали масиркунии иловагӣ эҷод кунем:

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

Акнун биёед ба 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

Ин қоидаҳо пайвастҳои воридотӣ ба интерфейсро қайд мекунанд eth0.100, қайд кардани ҳамаи бастаҳо бо барчасп 0x100, ҷавобҳо дар як пайвастшавӣ низ бо ҳамон тег қайд карда мешаванд.

Акнун мо метавонем як қоидаи масирро илова кунем:

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

Яъне, ҳама пакетҳо бо суроғаи манбаъ 1.2.3.0/24 ва тег 0x100 бояд бо истифода аз ҷадвал равона карда шавад 100.

Ҳамин тариқ, бастаҳои дигаре, ки дар интерфейси дигар гирифта шудаанд, ба ин қоида тобеъ нестанд, ки ба онҳо имкон медиҳад, ки бо истифода аз асбобҳои стандартии Kubernetes интиқол дода шаванд.

Боз як чизи дигар вуҷуд дорад, ки дар Linux як филтри роҳи баръакс мавҷуд аст, ки ҳама чизро вайрон мекунад; он як санҷиши оддиро анҷом медиҳад: барои ҳама бастаҳои воридотӣ суроғаи манбаи бастаро бо суроғаи ирсолкунанда иваз мекунад ва тафтиш мекунад, ки оё баста метавонад тавассути ҳамон интерфейсе, ки дар он гирифта шуда буд, тарк кунад, агар не, онро филтр мекунад.

Мушкилот дар он аст, ки дар ҳолати мо он дуруст кор намекунад, аммо мо метавонем онро хомӯш кунем:

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

Лутфан таваҷҷӯҳ намоед, ки фармони аввал рафтори глобалии rp_filter -ро назорат мекунад; агар он ғайрифаъол набошад, фармони дуюм таъсире нахоҳад дошт. Аммо, интерфейсҳои боқимонда бо rp_filter фаъол боқӣ хоҳанд монд.

Барои пурра маҳдуд накардани кори филтр, мо метавонем татбиқи rp_filterро барои netfilter истифода барем. Истифодаи rpfilter ҳамчун модули iptables, шумо метавонед қоидаҳои хеле чандирро танзим кунед, масалан:

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

rp_filter-ро дар интерфейс фаъол созед eth0.100 барои ҳама суроғаҳо ба истиснои 1.2.3.0/24.

Манбаъ: will.com

Илова Эзоҳ