์ผ๋ง ์ ๋๋ MetalLB์ ๋ํ ๋ผ์ฐํ
์ ์ค์ ํ๋ ๋งค์ฐ ํน์ดํ ์์
์ ์ง๋ฉดํ์ต๋๋ค. ๋ค ๊ด์ฐฎ์ ํ
๋ฐ ์๋๋ฉด... ์ผ๋ฐ์ ์ผ๋ก MetalLB์๋ ์ถ๊ฐ ์์
์ด ํ์ํ์ง ์์ง๋ง ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋งค์ฐ ๊ฐ๋จํ ๋คํธ์ํฌ ๊ตฌ์ฑ์ ๊ฐ์ถ ์๋นํ ํฐ ํด๋ฌ์คํฐ๊ฐ ์์ต๋๋ค.
์ด ๋ฌธ์์์๋ ํด๋ฌ์คํฐ์ ์ธ๋ถ ๋คํธ์ํฌ์ ๋ํด ์์ค ๊ธฐ๋ฐ ๋ฐ ์ ์ฑ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์ฌ๋ฌ๋ถ์ด ์ด๋ฏธ ๊ฒฝํ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฏ๋ก MetalLB ์ค์น ๋ฐ ๊ตฌ์ฑ์ ๋ํด ์์ธํ ์ค๋ช ํ์ง ์๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ , ์ฆ ๋ผ์ฐํ ์ค์ ์ผ๋ก ๋์ด๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ๋ผ์ ๋ค ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ฌ๋ก 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์ ๊ฐ์ ๋์ ํ๊ฒฝ์์ ์๋นํ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์๊ฒฉํ 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 ์๋น์ค์ ์ก์ธ์คํ๋ ค๊ณ ํฉ๋๋ค.
์ฐ๋ฝํ ๋ 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
ํฌ๋์์:
ํน์ดํ ์ ์ ๋ค์ ์ฃผ์์ ์ก์ธ์คํ ๋ 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 ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ฐํ ํ ์ ์์ต๋๋ค.
ํ ๊ฐ์ง ๋ ์๋๋ฐ, 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