Fine-tuning routing pikeun MetalLB dina modeu L2

Fine-tuning routing pikeun MetalLB dina modeu L2
Teu lila pisan kuring Nyanghareupan tugas pisan mahiwal nyetel routing pikeun MetalLB. Sagalana bakal alus, sabab ... Biasana MetalLB henteu meryogikeun tindakan tambahan, tapi dina kasus urang kami ngagaduhan klaster anu cukup ageung kalayan konfigurasi jaringan anu saderhana pisan.

Dina artikel ieu kuring bakal ngabejaan ka maneh kumaha ngonpigurasikeun routing dumasar-sumber jeung kawijakan basis pikeun jaringan éksternal klaster Anjeun.

Kuring moal balik kana detil ngeunaan masang jeung ngonpigurasikeun MetalLB, saprak kuring nganggap anjeun geus boga sababaraha pangalaman. Abdi nyarankeun bade langsung ka titik, nyaéta nyetél routing. Janten urang gaduh opat kasus:

Kasus 1: Lamun euweuh konfigurasi diperlukeun

Hayu urang nempo kasus basajan.

Fine-tuning routing pikeun MetalLB dina modeu L2

Konfigurasi routing tambahan henteu diperyogikeun nalika alamat anu dikaluarkeun ku MetalLB aya dina subnet anu sami sareng alamat titik anjeun.

Salaku conto, anjeun gaduh subnet 192.168.1.0/24, éta boga router a 192.168.1.1, sareng titik anjeun nampi alamat: 192.168.1.10-30, teras pikeun MetalLB anjeun tiasa nyaluyukeun rentang 192.168.1.100-120 tur pastikeun yén maranéhna bakal dianggo tanpa konfigurasi tambahan.

Kunaon éta? Kusabab titik anjeun parantos gaduh rute anu dikonpigurasi:

# 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

Sareng alamat tina rentang anu sami bakal dianggo deui tanpa tindakan tambahan.

Kasus 2: Nalika kustomisasi tambahan diperyogikeun

Fine-tuning routing pikeun MetalLB dina modeu L2

Anjeun kedah ngonpigurasikeun rute tambahan iraha waé titik anjeun henteu gaduh alamat IP anu dikonpigurasi atanapi rute ka subnet dimana MetalLB ngaluarkeun alamat.

Abdi bakal ngajelaskeun sakedik langkung rinci. Iraha waé MetalLB ngaluarkeun alamat, éta tiasa dibandingkeun sareng tugas saderhana sapertos:

ip addr add 10.9.8.7/32 dev lo

Nengetan:

  • a) Alamatna ditugaskeun ku awalan /32 nyaeta, jalur moal otomatis ditambahkeun kana subnet pikeun eta (éta ngan hiji alamat)
  • b) Alamatna digantelkeun kana antarmuka titik mana waé (contona loopback). Perlu disebatkeun di dieu fitur-fitur tumpukan jaringan Linux. Henteu masalah anu panganteur anjeun tambahkeun alamatna, kernel bakal salawasna ngolah requests arp sarta ngirimkeun réspon arp ka salah sahiji aranjeunna, kabiasaan ieu dianggap bener tur, komo deui, cukup loba dipaké dina lingkungan dinamis sapertos Kubernetes.

Paripolah ieu tiasa disaluyukeun, contona ku cara ngaktipkeun arp anu ketat:

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

Dina hal ieu, réspon arp ngan bakal dikirim upami antarmuka sacara eksplisit ngandung alamat IP khusus. Setelan ieu diperlukeun lamun rencana ngagunakeun MetalLB tur kube-proxy anjeun ngajalankeun dina modeu IPVS.

Sanajan kitu, MetalLB teu make kernel pikeun ngolah requests arp, tapi ngalakukeun eta sorangan dina pamaké-spasi, jadi pilihan ieu moal mangaruhan operasi MetalLB.

Hayu urang balik ka tugas urang. Upami jalur pikeun alamat anu dikaluarkeun teu aya dina titik anjeun, tambahkeun sateuacanna ka sadaya titik:

ip route add 10.9.8.0/24 dev eth1

Kasus 3: Nalika anjeun peryogi routing dumasar-sumber

Anjeun bakal kedah ngonpigurasikeun routing basis sumber mun anjeun nampi pakét ngaliwatan gateway misah, teu hiji ngonpigurasi sacara standar, kituna pakét respon ogé kudu ngaliwatan gateway sarua.

Salaku conto, anjeun gaduh subnet anu sami 192.168.1.0/24 dedicated ka titik Anjeun, tapi rék ngaluarkeun alamat éksternal maké MetalLB. Anggap anjeun gaduh sababaraha alamat tina subnet 1.2.3.0/24 lokasina di VLAN 100 tur Anjeun hoyong pake pikeun ngakses jasa Kubernetes externally.

Fine-tuning routing pikeun MetalLB dina modeu L2

Nalika ngahubungan 1.2.3.4 Anjeun bakal nyieun requests ti subnet béda ti 1.2.3.0/24 jeung ngadagoan jawaban. Titik anu ayeuna master pikeun alamat MetalLB-dikaluarkeun 1.2.3.4, bakal nampa pakét ti router dina 1.2.3.1, Tapi jawaban pikeun manéhna merta kudu indit jalur sarua, ngaliwatan 1.2.3.1.

Kusabab titik kami parantos gaduh gateway standar anu dikonpigurasi 192.168.1.1, teras sacara standar réspon bakal angkat ka anjeunna, sareng henteu 1.2.3.1, ngaliwatan nu urang narima pakét.

Kumaha carana Cope jeung kaayaan ieu?

Dina hal ieu, anjeun kedah nyiapkeun sadaya titik anjeun dina cara anu aranjeunna siap ngalayanan alamat éksternal tanpa konfigurasi tambahan. Nyaéta, pikeun conto di luhur, anjeun kedah nyiptakeun antarmuka VLAN dina titik sateuacanna:

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

Teras tambahkeun rute:

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

Perhatikeun yén kami nambahkeun ruteu ka tabel routing misah 100 eta bakal ngandung ukur dua ruteu diperlukeun pikeun ngirim pakét respon ngaliwatan gateway nu 1.2.3.1, ayana di tukangeun panganteur eth0.100.

Ayeuna urang kudu nambahan aturan basajan:

ip rule add from 1.2.3.0/24 lookup 100

anu sacara eksplisit nyarios: upami alamat sumber pakét aya 1.2.3.0/24, mangka anjeun kudu make tabel routing 100. Di jerona kami parantos ngajelaskeun rute anu bakal ngaliwat anjeunna 1.2.3.1

Kasus 4: Lamun anjeun peryogi routing dumasar-kabijakan

Topologi jaringan sami sareng conto sateuacana, tapi hayu urang nyarios anjeun ogé hoyong tiasa ngaksés alamat kolam renang éksternal 1.2.3.0/24 tina pods anjeun:

Fine-tuning routing pikeun MetalLB dina modeu L2

The peculiarity nyaeta nalika ngakses alamat wae di 1.2.3.0/24, pakét respon pencét titik sarta ngabogaan alamat sumber dina rentang 1.2.3.0/24 bakal matuh dikirim ka eth0.100, tapi urang hoyong Kubernetes alihan ka pod munggaran urang, nu dihasilkeun pamundut aslina.

Ngarengsekeun masalah ieu tétéla sesah, tapi janten mungkin berkat routing dumasar-kabijakan:

Pikeun pamahaman anu langkung saé ngeunaan prosésna, ieu mangrupikeun diagram blok netfilter:
Fine-tuning routing pikeun MetalLB dina modeu L2

Kahiji, sakumaha dina conto saméméhna, hayu urang nyieun tabel routing tambahan:

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

Ayeuna hayu urang tambahkeun sababaraha aturan kana 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

Aturan ieu bakal nandaan sambungan asup ka panganteur eth0.100, nyirian sadaya pakét sareng tag 0x100, réspon dina sambungan anu sami ogé bakal ditandaan ku tag anu sami.

Ayeuna urang tiasa nambihan aturan routing:

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

Nyaéta, sadaya pakét sareng alamat sumber 1.2.3.0/24 jeung tag 0x100 kudu routed maké méja 100.

Ku kituna, pakét séjén anu ditampi dina panganteur anu sanés henteu tunduk kana aturan ieu, anu bakal ngamungkinkeun aranjeunna dialihkeun nganggo alat Kubernetes standar.

Aya hiji deui, dina Linux Ubuntu aya anu disebut filter jalur sabalikna, nu spoils sakabeh hal; eta ngalakukeun hiji dipariksa basajan: pikeun sakabéh pakét asup, éta ngarobah alamat sumber pakét jeung alamat pangirim jeung pariksa naha pakét bisa ninggalkeun ngaliwatan interface sarua nu eta narima, lamun henteu, eta bakal nyaring kaluar.

Masalahna nyaéta dina kasus urang éta moal jalanna leres, tapi urang tiasa nganonaktipkeun:

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

Punten dicatet yén paréntah kahiji ngadalikeun paripolah global rp_filter; upami henteu ditumpurkeun, paréntah kadua moal aya pangaruhna. Sanajan kitu, interfaces sésana bakal tetep jeung rp_filter diaktipkeun.

Dina raraga teu sagemblengna ngawatesan operasi filter nu, urang tiasa nganggo palaksanaan rp_filter pikeun netfilter. Ngagunakeun rpfilter salaku modul iptables, anjeun tiasa ngonpigurasikeun aturan anu cukup fleksibel, contona:

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

ngaktipkeun rp_filter dina panganteur eth0.100 pikeun sakabéh alamat iwal 1.2.3.0/24.

sumber: www.habr.com

Tambahkeun komentar