L2 ๋ชจ๋“œ์—์„œ MetalLB์˜ ๋ผ์šฐํŒ… ๋ฏธ์„ธ ์กฐ์ •

L2 ๋ชจ๋“œ์—์„œ MetalLB์˜ ๋ผ์šฐํŒ… ๋ฏธ์„ธ ์กฐ์ •
์–ผ๋งˆ ์ „ ๋‚˜๋Š” MetalLB์— ๋Œ€ํ•œ ๋ผ์šฐํŒ…์„ ์„ค์ •ํ•˜๋Š” ๋งค์šฐ ํŠน์ดํ•œ ์ž‘์—…์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค ๊ดœ์ฐฎ์„ ํ…๋ฐ ์™œ๋ƒ๋ฉด... ์ผ๋ฐ˜์ ์œผ๋กœ MetalLB์—๋Š” ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ๊ฐ–์ถ˜ ์ƒ๋‹นํžˆ ํฐ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ์†Œ์Šค ๊ธฐ๋ฐ˜ ๋ฐ ์ •์ฑ… ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ์ด๋ฏธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ MetalLB ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์š”์ , ์ฆ‰ ๋ผ์šฐํŒ… ์„ค์ •์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„ค ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋ก€ 1: ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

๊ฐ„๋‹จํ•œ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

L2 ๋ชจ๋“œ์—์„œ MetalLB์˜ ๋ผ์šฐํŒ… ๋ฏธ์„ธ ์กฐ์ •

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: ์ถ”๊ฐ€ ๋งž์ถคํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

L2 ๋ชจ๋“œ์—์„œ MetalLB์˜ ๋ผ์šฐํŒ… ๋ฏธ์„ธ ์กฐ์ •

๋…ธ๋“œ์— ๊ตฌ์„ฑ๋œ 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

์ด ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค์— ํŠน์ • IP ์ฃผ์†Œ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ arp ์‘๋‹ต์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. 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 ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

L2 ๋ชจ๋“œ์—์„œ MetalLB์˜ ๋ผ์šฐํŒ… ๋ฏธ์„ธ ์กฐ์ •

์—ฐ๋ฝํ•  ๋•Œ 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 ํฌ๋“œ์—์„œ:

L2 ๋ชจ๋“œ์—์„œ MetalLB์˜ ๋ผ์šฐํŒ… ๋ฏธ์„ธ ์กฐ์ •

ํŠน์ดํ•œ ์ ์€ ๋‹ค์Œ ์ฃผ์†Œ์— ์•ก์„ธ์Šคํ•  ๋•Œ 1.2.3.0/24, ์‘๋‹ต ํŒจํ‚ท์ด ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ณ  ํ•ด๋‹น ๋ฒ”์œ„์˜ ์†Œ์Šค ์ฃผ์†Œ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. 1.2.3.0/24 ์ˆœ์ข…์ ์œผ๋กœ ๋ณด๋‚ด์งˆ ๊ฒƒ์ด๋‹ค eth0.100, ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” Kubernetes๊ฐ€ ์ด๋ฅผ ์›๋ž˜ ์š”์ฒญ์„ ์ƒ์„ฑํ•œ ์ฒซ ๋ฒˆ์งธ ํฌ๋“œ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์› ์ง€๋งŒ ์ •์ฑ… ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๋•๋ถ„์— ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์€ netfilter ๋ธ”๋ก ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
L2 ๋ชจ๋“œ์—์„œ MetalLB์˜ ๋ผ์šฐํŒ… ๋ฏธ์„ธ ์กฐ์ •

๋จผ์ € ์ด์ „ ์˜ˆ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ถ”๊ฐ€ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

ํ•„ํ„ฐ์˜ ๋™์ž‘์„ ์™„์ „ํžˆ ์ œํ•œํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€