Π€ΠΈΠ½Π° настройка Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π·Π° 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-прокси Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ 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 Π΄Π° Π³ΠΎ прСнасочи към ΠΏΡŠΡ€Π²ΠΈΡ Π½ΠΈ pod, ΠΊΠΎΠΉΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° заявка.

Π Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ сС ΠΎΠΊΠ°Π·Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, Π½ΠΎ стана възмоТно Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅:

Π—Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° процСса, Π΅Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° Π½Π° 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.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€