å°ãåãŸã§ãç§ã¯ MetalLB ã®ã«ãŒãã£ã³ã°ãèšå®ãããšããéåžžã«çããã¿ã¹ã¯ã«çŽé¢ããŠããŸããã ãã¹ãŠããŸãããã§ãããããªããªã... éåžžãMetalLB ã«ã¯è¿œå ã®ã¢ã¯ã·ã§ã³ã¯å¿
èŠãããŸãããããã®å Žåãéåžžã«åçŽãªãããã¯ãŒã¯æ§æãæã€ããªã倧èŠæš¡ãªã¯ã©ã¹ã¿ãŒããããŸãã
ãã®èšäºã§ã¯ãã¯ã©ã¹ã¿ãŒã®å€éšãããã¯ãŒã¯ã«å¯ŸããŠãœãŒã¹ããŒã¹ããã³ããªã·ãŒããŒã¹ã®ã«ãŒãã£ã³ã°ãæ§æããæ¹æ³ã説æããŸãã
ãã§ã«ããçšåºŠã®çµéšããããšæãã®ã§ãMetalLB ã®ã€ã³ã¹ããŒã«ãšæ§æã«ã€ããŠã¯è©³ãã説æããŸããã ãããªãæ¬é¡ãã€ãŸãã«ãŒãã£ã³ã°ã®èšå®ã«é²ãããšããå§ãããŸãã ãããã£ãŠã次㮠XNUMX ã€ã®ã±ãŒã¹ããããŸãã
ã±ãŒã¹ 1: èšå®ãäžèŠãªå Žå
ç°¡åãªã±ãŒã¹ãèŠãŠã¿ãŸãããã
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: è¿œå ã®ã«ã¹ã¿ãã€ãºãå¿ èŠãªå Žå
ããŒãã« IP ã¢ãã¬ã¹ãèšå®ãããŠããªãå ŽåããŸã㯠MetalLB ãã¢ãã¬ã¹ãçºè¡ãããµãããããžã®ã«ãŒãããªãå Žåã¯ãå¿ ãè¿œå ã®ã«ãŒããèšå®ããå¿ èŠããããŸãã
ããå°ã詳ãã説æããŸãã MetalLB ãã¢ãã¬ã¹ãåºåãããšãã¯åžžã«ã次ã®ãããªåçŽãªå²ãåœãŠãšæ¯èŒã§ããŸãã
ip addr add 10.9.8.7/32 dev lo
泚æãæãïŒ
- a) ã¢ãã¬ã¹ã«ã¯ãã¬ãã£ãã¯ã¹ãå²ãåœãŠãããŸã
/32
ã€ãŸããã«ãŒãã¯ãã®ãµããããã«èªåçã«è¿œå ãããŸãã (ããã¯åãªãã¢ãã¬ã¹ã§ã)ã - b) ã¢ãã¬ã¹ã¯ä»»æã®ããŒã ã€ã³ã¿ãŒãã§ã€ã¹ (ã«ãŒãããã¯ãªã©) ã«ä»å ãããŸãã ããã§ãLinux ãããã¯ãŒã¯ ã¹ã¿ãã¯ã®æ©èœã«ã€ããŠèšåãã䟡å€ããããŸãã ã©ã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ãã¬ã¹ãè¿œå ããŠããã«ãŒãã«ã¯åžžã« arp ãªã¯ãšã¹ããåŠçãããããã®ããããã« arp ã¬ã¹ãã³ã¹ãéä¿¡ããŸãããã®åäœã¯æ£ãããšèããããŠãããããã«ãKubernetes ãªã©ã®åçç°å¢ã§éåžžã«åºã䜿çšãããŠããŸãã
ãã®åäœã¯ãããšãã° strict 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 ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããšèããŠããŸãã
ãåãåããã®é 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
ã²ãŒããŠã§ã€çµç±ã§å¿çãã±ãããéä¿¡ããããã«å¿
èŠãªã«ãŒã㯠XNUMX ã€ã ãå«ãŸããŸãã 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
ããããã:
ç¹åŸŽçãªã®ã¯ã次ã®ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ãããšã 1.2.3.0/24
ãå¿çãã±ããã¯ããŒãã«å°éããéä¿¡å
ã¢ãã¬ã¹ãç¯å²å
ã«ãããŸãã 1.2.3.0/24
çŽ çŽã«éãããŠããã eth0.100
ãã ããKubernetes ãå
ã®ãªã¯ãšã¹ããçæããæåã®ãããã«ãªãã€ã¬ã¯ãããããã«ããããšèããŠããŸãã
ãã®åé¡ã®è§£æ±ºã¯é£ããããšãå€æããŸããããããªã·ãŒããŒã¹ã®ã«ãŒãã£ã³ã°ã®ãããã§å¯èœã«ãªããŸããã
ããã»ã¹ãããããç解ããããã«ãnetfilter ã®ãããã¯å³ã次ã«ç€ºããŸãã
ãŸããåã®äŸãšåæ§ã«ãè¿œå ã®ã«ãŒãã£ã³ã° ããŒãã«ãäœæããŸãããã
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 ããŒã«ã䜿çšããŠã«ãŒãã£ã³ã°ã§ããŸãã
ãã XNUMX ã€ãLinux ã«ã¯ãããããªããŒã¹ ãã¹ ãã£ã«ã¿ããããããããã¹ãŠãå°ç¡ãã«ããŠããŸããŸããããã¯ç°¡åãªãã§ãã¯ãå®è¡ããŸãããã¹ãŠã®åä¿¡ãã±ããã«å¯ŸããŠããã±ããã®ãœãŒã¹ ã¢ãã¬ã¹ãéä¿¡è ã¢ãã¬ã¹ã§å€æŽãã次ã®ããšããã§ãã¯ããŸãããã±ããã¯åä¿¡ããã®ãšåãã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠéä¿¡ã§ããŸãããããã§ãªãå Žåã¯ãã£ã«ã¿ãªã³ã°ãããŸãã
åé¡ã¯ããã®å Žåã¯æ£ããæ©èœããªãããšã§ãããç¡å¹ã«ããããšã¯ã§ããŸãã
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0.100/rp_filter
æåã®ã³ãã³ã㯠rp_filter ã®ã°ããŒãã«åäœãå¶åŸ¡ããããšã«æ³šæããŠãã ããããããç¡å¹ã«ãªã£ãŠããªãå ŽåãXNUMX çªç®ã®ã³ãã³ãã¯å¹æããããŸããã ãã ããæ®ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ rp_filter ãæå¹ã«ãªã£ããŸãŸã«ãªããŸãã
ãã£ã«ã¿ãŒã®æäœãå®å šã«å¶éããªãããã«ããããã«ãnetfilter ã® rp_filter å®è£ ã䜿çšã§ããŸãã 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
.
åºæïŒ habr.com