Hoʻoponopono maikaʻi ʻia no MetalLB ma ke ʻano L2

Hoʻoponopono maikaʻi ʻia no MetalLB ma ke ʻano L2
ʻAʻole i liʻuliʻu i hala aku nei ua alo au i kahi hana maʻamau o ka hoʻonohonoho ʻana i ke ala ala no MetalLB. E maikaʻi nā mea a pau, no ka mea ... ʻO ka maʻamau ʻaʻole koi ʻo MetalLB i nā hana hou aʻe, akā i kā mākou hihia, loaʻa iā mākou kahi puʻupuʻu nui me kahi hoʻonohonoho pūnaewele maʻalahi.

Ma kēia ʻatikala e haʻi aku wau iā ʻoe pehea e hoʻonohonoho ai i ke ala kumu kumu a me nā kulekele no ka pūnaewele waho o kāu puʻupuʻu.

ʻAʻole wau e hele i nā kikoʻī e pili ana i ka hoʻonohonoho ʻana a me ka hoʻonohonoho ʻana i ka MetalLB, no ka mea, manaʻo wau ua loaʻa iā ʻoe kekahi ʻike. Manaʻo wau e hele pololei i ke kiko, ʻo ia hoʻi ka hoʻonohonoho ʻana i ke ala ala. No laila, ʻehā kā mākou hihia:

Hana 1: Ke koi ʻole ʻia kahi hoʻonohonoho

E nānā kākou i kahi hihia maʻalahi.

Hoʻoponopono maikaʻi ʻia no MetalLB ma ke ʻano L2

ʻAʻole koi ʻia ka hoʻonohonoho hoʻonohonoho ala ʻē aʻe inā loaʻa nā helu i hoʻopuka ʻia e MetalLB i ka subnet like me nā helu o kāu mau nodes.

No ka laʻana, loaʻa iā ʻoe kahi subnet 192.168.1.0/24, loaʻa iā ia kahi alalai 192.168.1.1, a loaʻa i kāu mau node nā helu wahi: 192.168.1.10-30, a laila no MetalLB hiki iā ʻoe ke hoʻololi i ka laulā 192.168.1.100-120 a e hōʻoia e hana lākou me ka ʻole o ka hoʻonohonoho hou.

No ke aha ia? No ka mea, ua hoʻonohonoho ʻia kāu mau nodes:

# 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

A e hoʻohana hou nā ʻōlelo mai ka laulā like me ka ʻole o nā hana hou.

Hana 2: Ke koi ʻia ka hoʻoponopono hou

Hoʻoponopono maikaʻi ʻia no MetalLB ma ke ʻano L2

Pono ʻoe e hoʻonohonoho i nā ala ʻē aʻe ke loaʻa ʻole i kāu mau node kahi IP address i hoʻonohonoho ʻia a i ʻole ala i ka subnet kahi i hoʻopuka ai ʻo MetalLB i nā ʻōlelo.

E wehewehe iki au. Ke hoʻopuka ʻo MetalLB i kahi helu wahi, hiki ke hoʻohālikelike ʻia me kahi hana maʻalahi e like me:

ip addr add 10.9.8.7/32 dev lo

E nānā i:

  • a) Hāʻawi ʻia ka helu wahi me kahi prefix /32 ʻo ia hoʻi, ʻaʻole e hoʻohui ʻia kahi ala i ka subnet no ia (he helu wahi wale nō ia)
  • b) Hoʻopili ʻia ka helu wahi i kekahi interface node (no ka laʻana loopback). Pono e haʻi ʻia ma aneʻi i nā hiʻohiʻona o ka waihona pūnaewele Linux. ʻAʻole pili i ka interface āu e hoʻohui ai i ka helu wahi, e hana mau ka kernel i nā noi arp a hoʻouna i nā pane arp i kekahi o lākou, ua manaʻo ʻia kēia ʻano pololei a, ʻoi aku, ua hoʻohana nui ʻia i loko o kahi ʻano ikaika e like me Kubernetes.

Hiki ke hoʻopilikino ʻia kēia ʻano, no ka laʻana ma ka ʻae ʻana i ka arp koʻikoʻi:

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

I kēia hihia, e hoʻouna wale ʻia nā pane arp inā loaʻa i ka interface kahi helu IP kikoʻī. Pono kēia hoʻonohonoho inā hoʻolālā ʻoe e hoʻohana i ka MetalLB a ke holo nei kāu kube-proxy ma ke ʻano IPVS.

Akā naʻe, ʻaʻole hoʻohana ʻo MetalLB i ka kernel no ka hoʻoponopono ʻana i nā noi arp, akā hana ʻo ia iā ia iho i ka mea hoʻohana-space, no laila ʻaʻole pili kēia koho i ka hana o MetalLB.

E hoʻi kāua i kā mākou hana. Inā ʻaʻole i loaʻa ke ala no nā helu i hoʻopuka ʻia ma kāu mau nodes, e hoʻohui mua ia i nā nodes a pau:

ip route add 10.9.8.0/24 dev eth1

Hana 3: Ke makemake ʻoe i ke ala ala kumu

Pono ʻoe e hoʻonohonoho i ke ala ala kumu i ka wā e loaʻa ai iā ʻoe nā ʻeke ma kahi ʻīpuka kaʻawale, ʻaʻole ka mea i hoʻonohonoho ʻia e ka paʻamau, no laila e hele pū nā ʻeke pane ma ka ʻīpuka like.

No ka laʻana, loaʻa iā ʻoe ka subnet like 192.168.1.0/24 i hoʻolaʻa ʻia i kāu mau nodes, akā makemake ʻoe e hoʻopuka i nā helu waho me ka hoʻohana ʻana i MetalLB. E manaʻo mākou he nui kāu mau helu wahi mai kahi subnet 1.2.3.0/24 aia ma VLAN 100 a makemake ʻoe e hoʻohana iā lākou e komo i nā lawelawe Kubernetes ma waho.

Hoʻoponopono maikaʻi ʻia no MetalLB ma ke ʻano L2

I ka launa ana 1.2.3.4 e noi ana ʻoe mai kahi subnet ʻē aʻe 1.2.3.0/24 a kali i ka pane. ʻO ka node i kēia manawa ka haku no ka helu wahi i hoʻopuka ʻia e MetalLB 1.2.3.4, e loaʻa i ka ʻeke mai ka mea alaala 1.2.3.1, aka, o ka pane nona e pono e hele ma ke ala hookahi, ma 1.2.3.1.

No ka mea ua loaʻa i kā mākou node kahi puka paʻamau i hoʻonohonoho ʻia 192.168.1.1, a laila ma ka paʻamau e hele aku ka pane iā ia, ʻaʻole ia 1.2.3.1, ma laila mākou i loaʻa ai ka pūʻolo.

Pehea e hoʻokō ai i kēia kūlana?

I kēia hihia, pono ʻoe e hoʻomākaukau i kāu mau node a pau i mākaukau lākou e lawelawe i nā ʻōlelo waho waho me ka ʻole o ka hoʻonohonoho hou. ʻO ia, no ka laʻana i luna, pono ʻoe e hana i kahi interface VLAN ma ka node ma mua:

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

A laila hoʻohui i nā ala:

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

E ʻoluʻolu e hoʻohui mākou i nā ala i kahi papa hoʻokele kaʻawale 100 ʻelua wale nō ala e pono ai e hoʻouna i kahi ʻeke pane ma ka ʻīpuka 1.2.3.1, aia ma hope o ke kikowaena eth0.100.

I kēia manawa pono mākou e hoʻohui i kahi lula maʻalahi:

ip rule add from 1.2.3.0/24 lookup 100

e ʻōlelo pololei ana: inā aia ka helu kumu o ka ʻeke 1.2.3.0/24, a laila pono ʻoe e hoʻohana i ka papa kuhikuhi 100. I loko o ia mea ua wehewehe mākou i ke ala e hoʻouna ai iā ia 1.2.3.1

Hana 4: Ke makemake ʻoe i ka hoʻokele kulekele

ʻO ka topology pūnaewele e like me ka laʻana ma mua, akā e ʻōlelo mākou makemake ʻoe e hiki ke komo i nā helu wai waho. 1.2.3.0/24 mai kāu mau pahu:

Hoʻoponopono maikaʻi ʻia no MetalLB ma ke ʻano L2

ʻO ka hiʻohiʻona ke komo ʻana i kekahi helu wahi i loko 1.2.3.0/24, paʻi ka ʻeke pane i ka node a loaʻa iā ia kahi helu kumu ma ka laulā 1.2.3.0/24 e hoʻouna ʻia me ka hoʻolohe eth0.100, akā makemake mākou iā Kubernetes e hoʻihoʻi iā ia i kā mākou pod mua, nāna i hoʻopuka i ka noi kumu.

Ua paʻakikī ka hoʻoponopono ʻana i kēia pilikia, akā hiki ke hiki ke hoʻomaikaʻi ʻia i ka hoʻokele ʻana i nā kulekele:

No ka hoʻomaopopo maikaʻi ʻana i ke kaʻina hana, eia kahi kiʻi poloka netfilter:
Hoʻoponopono maikaʻi ʻia no MetalLB ma ke ʻano L2

ʻO ka mea mua, e like me ka laʻana ma mua, e hana mākou i kahi papa kuhikuhi ʻē aʻe:

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

I kēia manawa e hoʻohui i kekahi mau lula i nā 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

Na kēia mau lula e hōʻailona i nā pilina e hiki mai ana i ka interface eth0.100, e kaha ana i nā ʻeke a pau me ka hōʻailona 0x100, e hōʻailona ʻia nā pane i loko o ka pilina like me ka hōʻailona like.

I kēia manawa hiki iā mākou ke hoʻohui i kahi lula routing:

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

ʻO ia hoʻi, nā ʻeke a pau me kahi helu kumu 1.2.3.0/24 a me ka lepili 0x100 pono e hoʻohana ʻia me ka papa ʻaina 100.

No laila, ʻaʻole pili i kēia lula nā ʻeke ʻē aʻe i loaʻa ma kahi interface ʻē aʻe, e hiki ai iā lākou ke hoʻokele me ka hoʻohana ʻana i nā mea hana Kubernetes maʻamau.

Aia kekahi mea ʻē aʻe, ma Linux aia kahi kānana ala i kapa ʻia, e hoʻopau i ka mea holoʻokoʻa; hana ia i kahi māka maʻalahi: no nā ʻeke komo mai, hoʻololi ia i ka helu kumu o ka ʻeke me ka helu mea hoʻouna a nānā inā paha. hiki i ka ʻeke ke haʻalele ma ke kikowaena like i loaʻa ai, inā ʻaʻole, e kānana ia.

ʻO ka pilikia i kā mākou hihia ʻaʻole ia e hana pololei, akā hiki iā mākou ke hoʻopau iā ia:

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

E ʻoluʻolu e hoʻomaopopo ʻo ke kauoha mua e hoʻomalu i ka ʻano honua o rp_filter; inā ʻaʻole i pio, ʻaʻohe hopena o ke kauoha ʻelua. Eia naʻe, e hoʻomau ʻia nā mea i koe me rp_filter.

I ʻole e kaupalena loa i ka hana o ka kānana, hiki iā mākou ke hoʻohana i ka hoʻokō rp_filter no netfilter. Ke hoʻohana nei i ka rpfilter ma ke ʻano he module iptables, hiki iā ʻoe ke hoʻonohonoho i nā lula maʻalahi, no ka laʻana:

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

hiki iā rp_filter ma ke kikowaena eth0.100 no nā helu wahi a pau koe 1.2.3.0/24.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka