Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Virtual IPs and Service Proxies
๊ฐ์ IP ๋ฐ ์๋น์ค ํ๋ก์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋๋
kube-proxy
๋ฅผ
์คํํ๋ค(kube-proxy
๋ฅผ ๋์ฒดํ๋ ๊ตฌ์ฑ์์๋ฅผ ์ง์ ๋ฐฐํฌํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด).
kube-proxy
๋
ExternalName
์ธ์ type
์
์๋น์ค๋ฅผ ์ํ
๊ฐ์ IP ๋ฉ์ปค๋์ฆ์ ๊ตฌํ์ ๋ด๋นํ๋ค.
ํญ์ ๋ฐ์ํ๋ ์ง๋ฌธ์, ์ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ธ๋ฐ์ด๋ ํธ๋ํฝ์ ๋ฐฑ์๋๋ก ์ ๋ฌํ๊ธฐ ์ํด ํ๋ก์์ ์์กดํ๋๊ฐ ํ๋ ์ ์ด๋ค. ๋ค๋ฅธ ์ ๊ทผ๋ฒ์ด ์๋๊ฐ? ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ A ๊ฐ (๋๋ IPv6์ ๊ฒฝ์ฐ AAAA)์ ๊ฐ์ง DNS ๋ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ณ , ๋ผ์ด๋-๋ก๋น ์ด๋ฆ ํ์ธ ๋ฐฉ์์ ์ทจํ ์ ์๋๊ฐ?
There are a few reasons for using proxying for Services:
- ๋ ์ฝ๋ TTL์ ๊ณ ๋ คํ์ง ์๊ณ , ๋ง๋ฃ๋ ์ด๋ฆ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๋ DNS ๊ตฌํ์ ๋ํ ์ค๋๋ ์ญ์ฌ๊ฐ ์๋ค.
- ์ผ๋ถ ์ฑ์ DNS ๊ฒ์์ ํ ๋ฒ๋ง ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฌด๊ธฐํ์ผ๋ก ์บ์ํ๋ค.
- ์ฑ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ ํ ์ฌ-ํ์ธ์ ํ๋ค๊ณ ํ๋๋ผ๋, DNS ๋ ์ฝ๋์ TTL์ด ๋ฎ๊ฑฐ๋ 0์ด๋ฉด DNS์ ๋ถํ๊ฐ ๋์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง ์ ์๋ค.
๋ณธ ํ์ด์ง์ ๋ท ๋ถ๋ถ์์ ๋ค์ํ kube-proxy ๊ตฌํ์ด ๋์ํ๋ ๋ฐฉ์์ ๋ํด ์ฝ์ ์ ์๋ค.
์ฐ์ ์์๋์ด์ผ ํ ๊ฒ์, kube-proxy
๋ฅผ ๊ตฌ๋ํ ๋,
์ปค๋ ์์ค์ ๊ท์น์ด ์์ (์๋ฅผ ๋ค์ด, iptables ๊ท์น์ด ์์ฑ๋ ์ ์์)๋ ์ ์๊ณ ,
์ด๋ ๋๋ก๋ ๋ฆฌ๋ถํธ ์ ๊น์ง ์ ๋ฆฌ๋์ง ์์ ์๋ ์๋ค.
๊ทธ๋์, kube-proxy๋ ์ปดํจํฐ์์ ์ ์์ค์, ํน๊ถ์ ๊ฐ์ง(privileged) ๋คํธ์ํน ํ๋ก์ ์๋น์ค๊ฐ ๊ตฌ๋๋จ์ผ๋ก์จ ๋ฐ์ํ๋
๊ฒฐ๊ณผ๋ฅผ ์ดํดํ๊ณ ์๋ ๊ด๋ฆฌ์์ ์ํด์๋ง ๊ตฌ๋๋์ด์ผ ํ๋ค.
๋น๋ก kube-proxy
์คํ ํ์ผ์ด cleanup
๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ๋ ํ์ง๋ง,
์ด ๊ธฐ๋ฅ์ ๊ณต์์ ์ธ ๊ธฐ๋ฅ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ตฌํ๋ ๊ทธ๋๋ก๋ง ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, 3๊ฐ์ ๋ ํ๋ฆฌ์นด๋ก ์คํ๋๋ ์คํ ์ดํธ๋ฆฌ์ค ์ด๋ฏธ์ง-์ฒ๋ฆฌ ๋ฐฑ์๋๋ฅผ ์๊ฐํด๋ณด์. ์ด๋ฌํ ๋ ํ๋ฆฌ์นด๋ ๋์ฒด ๊ฐ๋ฅํ๋ค. ์ฆ, ํ๋ก ํธ์๋๋ ๊ทธ๊ฒ๋ค์ด ์ฌ์ฉํ๋ ๋ฐฑ์๋๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๋๋ค. ๋ฐฑ์๋ ์ธํธ๋ฅผ ๊ตฌ์ฑํ๋ ์ค์ ํ๋๋ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง, ํ๋ก ํธ์๋ ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ ์ธ์ํ ํ์๊ฐ ์์ผ๋ฉฐ, ๋ฐฑ์๋ ์ธํธ ์์ฒด๋ฅผ ์ถ์ ํด์ผ ํ ํ์๋ ์๋ค.
ํ๋ก์ ๋ชจ๋๋ค
kube-proxy๋ ์ฌ๋ฌ ๋ชจ๋ ์ค ํ๋๋ก ๊ธฐ๋๋ ์ ์์ผ๋ฉฐ, ์ด๋ ํ๊ฒฝ ์ค์ ์ ๋ฐ๋ผ ๊ฒฐ์ ๋จ์ ์ ์ํ๋ค.
- kube-proxy์ ๊ตฌ์ฑ์ ์ปจํผ๊ทธ๋งต(ConfigMap)์ ํตํด ์ด๋ฃจ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น kube-proxy๋ฅผ ์ํ ์ปจํผ๊ทธ๋งต์ ์คํจ์ฑ์๊ฒ ๊ฑฐ์ ๋๋ถ๋ถ์ kube-proxy์ ํ๋๊ทธ์ ํ์๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ค.
- kube-proxy๋ฅผ ์ํ ํด๋น ์ปจํผ๊ทธ๋งต์ ๊ธฐ๋ ์ค ๊ตฌ์ฑ์ ์ฌ์ ์ฉ(live reloading)์ ์ง์ํ์ง ์๋๋ค.
- kube-proxy๋ฅผ ์ํ ์ปจํผ๊ทธ๋งต ํ๋ผ๋ฏธํฐ๋ ๊ธฐ๋ ์์ ๊ฒ์ฆ์ด๋ ํ์ธ์ ํ์ง ์๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ์ฒด๊ณ๊ฐ iptables ๋ช ๋ น์ ํ์ฉํ์ง ์์ ๊ฒฝ์ฐ, ํ์ค ์ปค๋ kube-proxy ๊ตฌํ์ฒด๋ ์๋ํ์ง ์์ ๊ฒ์ด๋ค.
iptables
ํ๋ก์ ๋ชจ๋
์ด ๋ชจ๋์์๋, kube-proxy๋ ์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์
์๋น์ค, ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ์ค๋ธ์ ํธ์ ์ถ๊ฐ์ ์ ๊ฑฐ๋ฅผ ๊ฐ์ํ๋ค.
๊ฐ ์๋น์ค์ ๋ํด, ์๋น์ค์ clusterIP
๋ฐ port
์ ๋ํ ํธ๋ํฝ์ ์บก์ฒํ๊ณ
ํด๋น ํธ๋ํฝ์ ์๋น์ค์ ๋ฐฑ์๋ ์ธํธ ์ค ํ๋๋ก ๋ฆฌ๋ค์ด๋ ํธ(redirect)ํ๋
iptables ๊ท์น์ ์ค์นํ๋ค.
๊ฐ ์๋ํฌ์ธํธ ์ค๋ธ์ ํธ์ ๋ํด, ๋ฐฑ์๋ ํ๋๋ฅผ ์ ํํ๋ iptables ๊ท์น์ ์ค์นํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, iptables ๋ชจ๋์ kube-proxy๋ ๋ฐฑ์๋๋ฅผ ์์๋ก ์ ํํ๋ค.
ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด iptables๋ฅผ ์ฌ์ฉํ๋ฉด ์์คํ ์ค๋ฒํค๋๊ฐ ์ค์ด๋๋๋ฐ, ์ ์ ์คํ์ด์ค์ ์ปค๋ ์คํ์ด์ค ์ฌ์ด๋ฅผ ์ ํํ ํ์์์ด ๋ฆฌ๋ ์ค ๋ทํํฐ(netfilter)๊ฐ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ์ ๋ขฐํ ์ ์๊ธฐ๋ ํ๋ค.
kube-proxy๊ฐ iptables ๋ชจ๋์์ ์คํ ์ค์ด๊ณ ์ ํ๋ ์ฒซ ๋ฒ์งธ ํ๋๊ฐ ์๋ตํ์ง ์์ผ๋ฉด, ์ฐ๊ฒฐ์ด ์คํจํ๋ค.
์ด๋ ์ด์ ์ userspace
๋ชจ๋์ ๋ค๋ฅด๋ค.
์ด์ ์ userspace
์๋๋ฆฌ์ค์์๋,
kube-proxy๋ ์ฒซ ๋ฒ์งธ ํ๋์ ๋ํ ์ฐ๊ฒฐ์ด ์คํจํ์์ ๊ฐ์งํ๊ณ ๋ค๋ฅธ ๋ฐฑ์๋ ํ๋๋ก ์๋์ผ๋ก ์ฌ์๋ํ๋ค.
ํ๋ ์ค๋น์ฑ ํ๋ก๋ธ(readiness probe)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ์๋ ํ๋๊ฐ ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ผ๋ฏ๋ก, iptables ๋ชจ๋์ kube-proxy๋ ์ ์์ผ๋ก ํ ์คํธ๋ ๋ฐฑ์๋๋ง ๋ณผ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํธ๋ํฝ์ด kube-proxy๋ฅผ ํตํด ์คํจํ ๊ฒ์ผ๋ก ์๋ ค์ง ํ๋๋ก ์ ์ก๋๋ ๊ฒ์ ๋ง์ ์ ์๋ค.
iptables ํ๋ก์์ ๋ํ ์๋น์ค ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ
์์
๋ค์ ํ๋ฒ, ์์์ ์ค๋ช ํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ๋ คํ๋ค. ๋ฐฑ์๋ ์๋น์ค๊ฐ ์์ฑ๋๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์ ๊ฐ์ IP ์ฃผ์(์ : 10.0.0.1)๋ฅผ ํ ๋นํ๋ค. ์๋น์ค ํฌํธ๋ฅผ 1234๋ผ๊ณ ๊ฐ์ ํ์. ํด๋ฌ์คํฐ์ ๋ชจ๋ kube-proxy ์ธ์คํด์ค๋ ์ ์๋น์ค์ ์์ฑ์ ๊ด์ฐฐํ ์ ์๋ค.
ํ๋ก์๊ฐ ์๋ก์ด ์๋น์ค๋ฅผ ๋ฐ๊ฒฌํ๋ฉด, ๊ฐ์ IP ์ฃผ์์์ ์๋น์ค-๋ณ ๊ท์น์ผ๋ก ๋ฆฌ๋ค์ด๋ ์ ๋๋ ์ผ๋ จ์ iptables ๊ท์น์ ์ค์นํ๋ค. ์๋น์ค-๋ณ ๊ท์น์ ํธ๋ํฝ์ (๋ชฉ์ ์ง NAT๋ฅผ ์ฌ์ฉํ์ฌ) ๋ฐฑ์๋๋ก ๋ฆฌ๋ค์ด๋ ์ ํ๋ ์๋ํฌ์ธํธ-๋ณ ๊ท์น์ ์ฐ๊ฒฐํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค์ ๊ฐ์ IP ์ฃผ์์ ์ฐ๊ฒฐํ๋ฉด iptables ๊ท์น์ด ์์ํ๋ค. (์ธ์ ์ดํผ๋ํฐ(Affinity)์ ๋ฐ๋ผ ๋๋ ๋ฌด์์๋ก) ๋ฐฑ์๋๊ฐ ์ ํ๋๊ณ , ํจํท์ ํด๋ผ์ด์ธํธ IP ์ฃผ์๋ฅผ ๋ฎ์ด์ฐ์ง ์๊ณ ๋ฐฑ์๋๋ก ๋ฆฌ๋ค์ด๋ ์ ๋๋ค.
ํธ๋ํฝ์ด ๋ ธ๋-ํฌํธ ๋๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ๋ค์ด์ค๋ ๊ฒฝ์ฐ์๋, ์ด์ ๋์ผํ ๊ธฐ๋ณธ ํ๋ฆ์ด ์คํ๋์ง๋ง, ํด๋ผ์ด์ธํธ IP๋ ๋ณ๊ฒฝ๋๋ค.
IPVS ํ๋ก์ ๋ชจ๋
ipvs
๋ชจ๋์์, kube-proxy๋ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค์ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค๋ฅผ ๊ฐ์ํ๊ณ ,
netlink
์ธํฐํ์ด์ค๋ฅผ ํธ์ถํ์ฌ ๊ทธ์ ๋ฐ๋ผ IPVS ๊ท์น์ ์์ฑํ๊ณ
IPVS ๊ท์น์ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ๋ฐ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๊ธฐํํ๋ค.
์ด ์ ์ด ๋ฃจํ๋ IPVS ์ํ๊ฐ ์ํ๋ ์ํ์ ์ผ์นํ๋๋ก
๋ณด์ฅํ๋ค.
์๋น์ค์ ์ ๊ทผํ๋ฉด, IPVS๋ ํธ๋ํฝ์ ๋ฐฑ์๋ ํ๋ ์ค ํ๋๋ก ๋ณด๋ธ๋ค.
IPVS ํ๋ก์ ๋ชจ๋๋ iptables ๋ชจ๋์ ์ ์ฌํ ๋ทํํฐ ํํฌ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง, ํด์ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฌ์ฉํ๊ณ ์ปค๋ ์คํ์ด์ค์์ ๋์ํ๋ค. ์ด๋ IPVS ๋ชจ๋์ kube-proxy๋ iptables ๋ชจ๋์ kube-proxy๋ณด๋ค ์ง์ฐ ์๊ฐ์ด ์งง์ ํธ๋ํฝ์ ๋ฆฌ๋ค์ด๋ ์ ํ๊ณ , ํ๋ก์ ๊ท์น์ ๋๊ธฐํํ ๋ ์ฑ๋ฅ์ด ํจ์ฌ ํฅ์๋จ์ ์๋ฏธํ๋ค. ๋ค๋ฅธ ํ๋ก์ ๋ชจ๋์ ๋น๊ตํ์ ๋, IPVS ๋ชจ๋๋ ๋์ ๋คํธ์ํฌ ํธ๋ํฝ ์ฒ๋ฆฌ๋๋ ์ง์ํ๋ค.
IPVS๋ ํธ๋ํฝ์ ๋ฐฑ์๋ ํ๋๋ก ๋ฐธ๋ฐ์ฑํ๊ธฐ ์ํ ์ถ๊ฐ ์ต์ ์ ์ ๊ณตํ๋ฉฐ, ๊ทธ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ๋ค.
rr
: ๋ผ์ด๋-๋ก๋นlc
: ์ต์ ์ฐ๊ฒฐ (๊ฐ์ฅ ์ ์ ์์ ์ด๋ ค์๋ ์ฐ๊ฒฐ)dh
: ๋ชฉ์ ์ง ํด์ฑsh
: ์์ค ํด์ฑsed
: ์ต๋จ ์์ ์ง์ฐ (shortest expected delay)nq
: ํ ๋ฏธ์ฌ์ฉ (never queue)
์ฐธ๊ณ :
IPVS ๋ชจ๋์์ kube-proxy๋ฅผ ์คํํ๋ ค๋ฉด, kube-proxy๋ฅผ ์์ํ๊ธฐ ์ ์ ๋ ธ๋์์ IPVS๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํด์ผ ํ๋ค.
kube-proxy๊ฐ IPVS ํ๋ก์ ๋ชจ๋๋ก ์์๋ ๋, IPVS ์ปค๋ ๋ชจ๋์ด ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํ๋ค. IPVS ์ปค๋ ๋ชจ๋์ด ๊ฐ์ง๋์ง ์์ผ๋ฉด, kube-proxy๋ iptables ํ๋ก์ ๋ชจ๋๋ก ๋ค์ ์คํ๋๋ค.
IPVS ํ๋ก์์ ๋ํ ์๋น์ค ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ
์ธ์ ์ดํผ๋ํฐ
์ด๋ฌํ ํ๋ก์ ๋ชจ๋ธ์์, ํด๋ผ์ด์ธํธ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค/์๋น์ค/ํ๋์ ๋ํด ์ ํ ๋ชจ๋ฅด๋๋ผ๋ ์๋น์ค์ IP:ํฌํธ๋ก ํฅํ๋ ํธ๋ํฝ์ ์ ์ ํ ๋ฐฑ์๋๋ก ํ๋ก์๋๋ค.
ํน์ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ๋งค๋ฒ ๋์ผํ ํ๋๋ก
์ ๋ฌ๋๋๋ก ํ๋ ค๋ฉด, ์๋น์ค์ .spec.sessionAffinity
๋ฅผ ClientIP
๋ก ์ค์ ํ์ฌ
ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์
์ดํผ๋ํฐ๋ฅผ ์ ํํ ์ ์๋ค.
(๊ธฐ๋ณธ๊ฐ์ None
)
์ธ์ ๊ณ ์ (Session stickiness) ํ์์์
์๋น์ค์ .spec.sessionAffinityConfig.clientIP.timeoutSeconds
๋ฅผ ์ ์ ํ ์ค์ ํ์ฌ
์ต๋ ์ธ์
๊ณ ์ ์๊ฐ์ ์ค์ ํ ์๋ ์๋ค.
(๊ธฐ๋ณธ๊ฐ์ 10800์ผ๋ก, ์ด๋ 3์๊ฐ์ ํด๋น๋จ)
์ฐธ๊ณ :
์๋์ฐ์์๋, ์๋น์ค์ ์ต๋ ์ธ์ ๊ณ ์ ์๊ฐ(maximum session sticky time)์ ์ค์ ํ๋ ๊ฒ์ด ์ง์๋์ง ์๋๋ค.์๋น์ค์ IP ์ฃผ์ ํ ๋น
๊ณ ์ ๋ ๋ชฉ์ ์ง๋ก ์ค์ ๋ก ๋ผ์ฐํ ๋๋ ํ๋ IP ์ฃผ์์ ๋ฌ๋ฆฌ, ์๋น์ค IP๋ ์ค์ ๋ก๋ ๋จ์ผ ํธ์คํธ์์ ์๋ตํ์ง ์๋๋ค. ๋์ ์, kube-proxy๋ ํจํท ์ฒ๋ฆฌ ๋ก์ง(์: ๋ฆฌ๋ ์ค์ iptables)์ ์ฌ์ฉํ์ฌ, ํ์์ ๋ฐ๋ผ ํฌ๋ช ํ๊ฒ ๋ฆฌ๋ค์ด๋ ์ ๋๋ ๊ฐ์ IP ์ฃผ์๋ฅผ ์ ์ํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ VIP์ ์ฐ๊ฒฐํ๋ฉด, ํธ๋ํฝ์ด ์๋์ผ๋ก ์ ์ ํ ์๋ํฌ์ธํธ๋ก ์ ์ก๋๋ค. ํ๊ฒฝ ๋ณ์์ ์๋น์ค ์ฉ DNS๋ ์ค์ ๋ก๋ ์๋น์ค์ ๊ฐ์ IP ์ฃผ์ (๋ฐ ํฌํธ)๋ก ์ฑ์์ง๋ค.
์ถฉ๋ ๋ฐฉ์งํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค์ ์ฃผ์ ์ฒ ํ ์ค ํ๋๋, ์ฌ์ฉ์๊ฐ ์๋ชปํ ๊ฒ์ด ์๋ ๊ฒฝ์ฐ์๋ ์คํจํ ์ ์๋ ์ํฉ์ ๋ ธ์ถ๋์ด์๋ ์๋๋ค๋ ๊ฒ์ด๋ค. ์๋น์ค ๋ฆฌ์์ค ์ค๊ณ ์, ๋ค๋ฅธ ์ฌ๋์ ํฌํธ ์ ํ๊ณผ ์ถฉ๋ํ ๊ฒฝ์ฐ์ ๋๋นํด ์์ ์ ํฌํธ ๋ฒํธ๋ฅผ ์ ํํ์ง ์์๋ ๋๋ค. ๋ง์ฝ ๊ทธ๋ฌํ ์ผ์ด ๋ฐ์ํ๋ค๋ฉด ๊ทธ๊ฒ์ ๊ฒฉ๋ฆฌ ์คํจ์ด๋ค.
์๋น์ค์ ๋ํ ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉ์๊ฐ ์ ํํ ์ ์๋๋ก ํ๋ ค๋ฉด,
๋ ๊ฐ์ ์๋น์ค๊ฐ ์ถฉ๋ํ์ง ์๋๋ก ํด์ผ ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ API ์๋ฒ์ ์ค์ ๋์ด ์๋ service-cluster-ip-range
CIDR ๋ฒ์์์
๊ฐ ์๋น์ค์ ๊ณ ์ ํ IP ์ฃผ์๋ฅผ ํ ๋นํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ๋ค.
๊ฐ ์๋น์ค๊ฐ ๊ณ ์ ํ IP๋ฅผ ๋ฐ๋๋ก ํ๊ธฐ ์ํด, ๊ฐ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ๋ด๋ถ ํ ๋น๊ธฐ๊ฐ etcd์์ ๊ธ๋ก๋ฒ ํ ๋น ๋งต์ ์์์ ์ผ๋ก(atomically) ์ ๋ฐ์ดํธํ๋ค. ์๋น์ค๊ฐ IP ์ฃผ์ ํ ๋น์ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ ์ง์คํธ๋ฆฌ์ ๋งต ์ค๋ธ์ ํธ๊ฐ ์์ด์ผ ํ๋๋ฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด IP ์ฃผ์๋ฅผ ํ ๋นํ ์ ์๋ค๋ ๋ฉ์์ง์ ํจ๊ป ์์ฑ์ ์คํจํ๋ค.
์ปจํธ๋กค ํ๋ ์ธ์์, ๋ฐฑ๊ทธ๋ผ์ด๋ ์ปจํธ๋กค๋ฌ๋ ํด๋น ๋งต์ ์์ฑํด์ผ ํ๋ค(์ธ-๋ฉ๋ชจ๋ฆฌ ์ ๊ธ์ ์ฌ์ฉํ๋ ์ด์ ๋ฒ์ ์ ์ฟ ๋ฒ๋คํฐ์ค์์์ ๋ง์ด๊ทธ๋ ์ด์ ์ง์์ ์ํด ํ์ํจ). ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํจํ์ง ์์ ํ ๋น(์: ๊ด๋ฆฌ์ ๊ฐ์ ์ ์ํ)์ ์ฒดํฌํ๊ณ ๋ ์ด์ ์ด๋ ํ ์๋น์ค๋ ์ฌ์ฉํ์ง ์๋ ํ ๋น๋ IP ์ฃผ์๋ฅผ ์ ๋ฆฌํ๋ค.
์๋น์ค ๊ฐ์ IP ์ฃผ์์ IP ์ฃผ์ ๋ฒ์
Kubernetes v1.25 [beta]
์ฟ ๋ฒ๋คํฐ์ค๋ min(max(16, cidrSize / 16), 256)
๊ณต์์ ์ฌ์ฉํ์ฌ ์ป์ด์ง
service-cluster-ip-range
์ ํฌ๊ธฐ์ ๊ธฐ๋ฐํ์ฌ ClusterIP
๋ฒ์๋ฅผ ๋ ๋์ญ์ผ๋ก ๋๋๋ฉฐ,
์ฌ๊ธฐ์ ์ด ๊ณต์์ 16 ์ด์ 256 ์ดํ์ด๋ฉฐ,
๊ทธ ์ฌ์ด์ ๊ณ๋จ ํจ์๊ฐ ์์ ์ผ๋ก ์ค๋ช
ํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์๋น์ค์ ๋ํ ๋์ IP ํ ๋น ์ ์์ ๋์ญ์์ ์ฐ์ ์ ์ผ๋ก ์ ํํ๋ฉฐ,
์ด๋ ๊ณง ๋ง์ฝ ์ฌ์ฉ์๊ฐ type: ClusterIP
์๋น์ค์ ํน์ IP ์ฃผ์๋ฅผ ํ ๋นํ๊ณ ์ถ๋ค๋ฉด
ํ์ ๋์ญ์์ ๊ณจ๋ผ์ผ ํจ์ ์๋ฏธํ๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ํ ๋น ์ ์ถฉ๋์ ์ํ์ ์ค์ผ ์ ์๋ค.
๋ง์ฝ ServiceIPStaticSubrange
๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ๋นํ์ฑํํ๋ฉด
์ฟ ๋ฒ๋คํฐ์ค๋ type: ClusterIP
์๋น์ค์ ๋ํด
์๋ ๋ฐ ๋์ ํ ๋น IP ์ฃผ์๋ฅผ ์ํ ํ๋์ ๊ณต์ ๋๋ ํ์ ์ฌ์ฉํ๋ค.
ํธ๋ํฝ ํด๋ฆฌ์
.spec.internalTrafficPolicy
๋ฐ .spec.externalTrafficPolicy
ํ๋๋ฅผ ์ค์ ํ์ฌ
์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํธ๋ํฝ์ ์ด๋ป๊ฒ ์ ์(healthy, โreadyโ) ๋ฐฑ์๋๋ก ๋ผ์ฐํ
ํ ์ง๋ฅผ ์ ์ดํ ์ ์๋ค.
๋ด๋ถ ํธ๋ํฝ ํด๋ฆฌ์
Kubernetes v1.22 [beta]
spec.internalTrafficPolicy
ํ๋๋ฅผ ์ค์ ํ์ฌ ๋ด๋ถ ์์ค์์ ์ค๋ ํธ๋ํฝ์ด ์ด๋ป๊ฒ ๋ผ์ฐํธ๋ ์ง๋ฅผ ์ ์ดํ ์ ์๋ค.
์ด ํ๋๋ Cluster
๋๋ Local
๋ก ์ค์ ํ ์ ์๋ค.
ํ๋๋ฅผ Cluster
๋ก ์ค์ ํ๋ฉด ๋ด๋ถ ํธ๋ํฝ์ ์ค๋น ์ํ์ ๋ชจ๋ ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํธํ๋ฉฐ,
Local
๋ก ์ค์ ํ๋ฉด ์ค๋น ์ํ์ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๋ก๋ง ๋ผ์ฐํธํ๋ค.
๋ง์ฝ ํธ๋ํฝ ์ ์ฑ
์ด Local
๋ก ์ค์ ๋์ด ์๋๋ฐ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ํ๋๋ ์๋ ๊ฒฝ์ฐ, kube-proxy๋ ํธ๋ํฝ์ ๋๋กญ์ํจ๋ค.
์ธ๋ถ ํธ๋ํฝ ํด๋ฆฌ์
spec.externalTrafficPolicy
ํ๋๋ฅผ ์ค์ ํ์ฌ ์ธ๋ถ ์์ค์์ ์ค๋ ํธ๋ํฝ์ด ์ด๋ป๊ฒ ๋ผ์ฐํธ๋ ์ง๋ฅผ ์ ์ดํ ์ ์๋ค.
์ด ํ๋๋ Cluster
๋๋ Local
๋ก ์ค์ ํ ์ ์๋ค.
ํ๋๋ฅผ Cluster
๋ก ์ค์ ํ๋ฉด ์ธ๋ถ ํธ๋ํฝ์ ์ค๋น ์ํ์ ๋ชจ๋ ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํธํ๋ฉฐ,
Local
๋ก ์ค์ ํ๋ฉด ์ค๋น ์ํ์ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๋ก๋ง ๋ผ์ฐํธํ๋ค.
๋ง์ฝ ํธ๋ํฝ ์ ์ฑ
์ด Local
๋ก ์ค์ ๋์ด ์๋๋ฐ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ํ๋๋ ์๋ ๊ฒฝ์ฐ,
kube-proxy๋ ์ฐ๊ด๋ ์๋น์ค๋ก์ ํธ๋ํฝ์ ํฌ์๋ํ์ง ์๋๋ค.
์ข ๋ฃ ์ค์ธ ์๋ํฌ์ธํธ๋ก ๊ฐ๋ ํธ๋ํฝ
Kubernetes v1.26 [beta]
kube-proxy์ ๋ํด ProxyTerminatingEndpoints
๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ํ์ฑํ๋์ด ์๊ณ
ํธ๋ํฝ ํด๋ฆฌ์๊ฐ Local
์ด๋ฉด,
ํด๋น ๋
ธ๋์ kube-proxy๋ ์๋น์ค์ ๋ํ ์๋ํฌ์ธํธ๋ฅผ ์ ํํ ๋ ์ข ๋ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ์ด ํ์ฑํ๋์ด ์์ผ๋ฉด, kube-proxy๋ ๋
ธ๋๊ฐ ๋ก์ปฌ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ๊ณ ์๋์ง,
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ '์ข
๋ฃ ์ค'์ผ๋ก ํ์๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
๋ง์ฝ ๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ์กด์ฌํ๊ณ ๋ชจ๋ ๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ์ข
๋ฃ ์ค์ด๋ฉด,
kube-proxy๋ ์ข
๋ฃ ์ค์ธ ํด๋น ์๋ํฌ์ธํธ๋ก ํธ๋ํฝ์ ์ ๋ฌํ๋ค.
์ด์ธ์ ๊ฒฝ์ฐ, kube-proxy๋ ์ข
๋ฃ ์ค์ด ์๋ ์๋ํฌ์ธํธ๋ก ํธ๋ํฝ์ ์ ๋ฌํ๋ ํธ์ ์ ํธํ๋ค.
์ข
๋ฃ ์ค์ธ ์๋ํฌ์ธํธ์ ๋ํ ์ด๋ฌํ ํฌ์๋ฉ ์ ์ฑ
๋๋ถ์, externalTrafficPolicy: Local
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์
NodePort
๋ฐ LoadBalancer
์๋น์ค๊ฐ ์ฐ๊ฒฐ๋ค์ ์๋น๋กญ๊ฒ(gracefully) ์ข
๋ฃ์ํฌ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ๊ฐ ๋กค๋ง ์ ๋ฐ์ดํธ๋ ๋, ๋ก๋๋ฐธ๋ฐ์ ๋ค์ ์๋ ๋ ธ๋๊ฐ ํด๋น ๋ํ๋ก์ด๋จผํธ์ ๋ ํ๋ฆฌ์นด๋ฅผ N๊ฐ์์ 0๊ฐ ๊ฐ๋๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค. ์ผ๋ถ ๊ฒฝ์ฐ์, ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ํฌ์ค ์ฒดํฌ ํ๋ก๋ธ ์ฌ์ด์ ๊ธฐ๊ฐ์ ๋ ํ๋ฆฌ์นด 0๊ฐ๋ฅผ ๊ฐ๋ ๋ ธ๋๋ก ํธ๋ํฝ์ ์ ์กํ ์ ์๋ค. ์ข ๋ฃ ์ค์ธ ์๋ํฌ์ธํธ๋ก์ ํธ๋ํฝ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ํตํด ํ๋๋ฅผ ์ค์ผ์ผ ๋ค์ด ์ค์ธ ๋ ธ๋๊ฐ ํด๋น ์ข ๋ฃ ์ค์ธ ํ๋๋ก์ ํธ๋ํฝ์ ์๋น๋กญ๊ฒ ์์ ๋ฐ ๋๋ ์ธํ ์ ์๋ค. ํ๋ ์ข ๋ฃ๊ฐ ์๋ฃ๋๋ฉด, ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ ์ด๋ฏธ ๋ ธ๋์ ํฌ์ค ์ฒดํฌ๊ฐ ์คํจํ์์ ํ์ธํ๊ณ ํด๋น ๋ ธ๋๋ฅผ ๋ฐฑ์๋ ํ์์ ์์ ํ ์ ๊ฑฐํ์ ๊ฒ์ด๋ค.
๋ค์ ๋ด์ฉ
์๋น์ค์ ๋ํด ๋ ์์๋ณด๋ ค๋ฉด, ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๊ฒฐ์ ์ฝ์ด ๋ณธ๋ค.
๋ํ,
- ์๋น์ค์ ๋ํด ์ฝ์ด ๋ณธ๋ค.
- ์๋น์ค API์ ๋ํ API ๋ ํผ๋ฐ์ค๋ฅผ ์ฝ์ด ๋ณธ๋ค.