Kubernetes: ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๋Œ€์‹  โ€‹โ€‹ํ”„๋ก์‹œ์— iptables ์‚ฌ์šฉ

์— ๋งŒ๋“  2015๋…„ 01์›” 23์ผ  ยท  187์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubernetes

์ €๋Š” ์–ด์ œ iptables๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์žˆ์—ˆ๊ณ  ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ๋„์›€ ์—†์ด ๋ณธ์งˆ์ ์œผ๋กœ ๋ชจ๋“  ํ”„๋ก์‹œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” iptables ๊ทœ์น™ ์„ธํŠธ๋ฅผ ํ”„๋กœํ† ํƒ€์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค(Google ์กฐํšŒ์ˆ˜์—์„œ ๋ณต์‚ฌํ•˜์—ฌ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค). ๊ธ‰ํ•œ ๊ฑด ์•„๋‹ˆ์ง€๋งŒ, ๋ฉ”๋ชจ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๊ธฐ ์ „์— ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์š”.

์ด๊ฒƒ์€ ์†Œ์Šค IP๋ฅผ ๋ณด์กดํ•˜๊ณ  ํฐ ์ˆœ ๋‹จ์ˆœํ™”๊ฐ€ ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ์ข‹์€ ๋ถ€์ž‘์šฉ(๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ kube-proxy๋Š” ์„œ๋น„์Šค -> iptables๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ „ iptables ๋ฐ ์ปค๋„๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ „์— ์ด๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์–ผ๋งˆ๋‚˜ ๋˜๋Œ๋ ค์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋” ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ์—์„œ ๊ณ ์ • ์„ธ์…˜์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ฐ ๋ฐฑ์—”๋“œ์— ๋„๋‹ฌํ•  ํ™•๋ฅ ์ด ~๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ์ •๋ก ์  ๋ผ์šด๋“œ ๋กœ๋นˆ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ(--probability ๋Œ€์‹  --nth ์‚ฌ์šฉ) ์›ํ•˜๋ฉด ๋‹ค์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•„๋ž˜์— ๋‚˜์—ด๋œ ๋ฐฑ์—”๋“œ๋กœ ์„œ๋น„์Šค ํฌํ„ธ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

iptables -t nat -N TESTSVC
iptables -t nat -F TESTSVC
iptables -t nat -N TESTSVC_A
iptables -t nat -F TESTSVC_A
iptables -t nat -N TESTSVC_B
iptables -t nat -F TESTSVC_B
iptables -t nat -N TESTSVC_C
iptables -t nat -F TESTSVC_C
iptables -t nat -A TESTSVC -m recent --name hostA --rcheck --seconds 1 --reap -j TESTSVC_A
iptables -t nat -A TESTSVC -m recent --name hostB --rcheck --seconds 1 --reap -j TESTSVC_B
iptables -t nat -A TESTSVC -m recent --name hostC --rcheck --seconds 1 --reap -j TESTSVC_C
iptables -t nat -A TESTSVC -m statistic --mode random --probability 0.333 -j TESTSVC_A
iptables -t nat -A TESTSVC -m statistic --mode random --probability 0.500 -j TESTSVC_B
iptables -t nat -A TESTSVC -m statistic --mode random --probability 1.000 -j TESTSVC_C

iptables -t nat -A TESTSVC_A -m recent --name hostA --set -j DNAT -p tcp --to-destination 10.244.4.6:9376
iptables -t nat -A TESTSVC_B -m recent --name hostB --set -j DNAT -p tcp --to-destination 10.244.1.15:9376
iptables -t nat -A TESTSVC_C -m recent --name hostC --set -j DNAT -p tcp --to-destination 10.244.4.7:9376

iptables -t nat -F KUBE-PORTALS-HOST
iptables -t nat -A KUBE-PORTALS-HOST -d 10.0.0.93/32 -m state --state NEW -p tcp -m tcp --dport 80 -j TESTSVC
iptables -t nat -F KUBE-PORTALS-CONTAINER
iptables -t nat -A KUBE-PORTALS-CONTAINER -d 10.0.0.93/32 -m state --state NEW -p tcp -m tcp --dport 80 -j TESTSVC
prioritawaiting-more-evidence release-note sinetwork siscalability

๋ชจ๋“  187 ๋Œ“๊ธ€

๋ฉ‹์žˆ๋Š”! ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํ™•์‹คํžˆ ๋ณ‘ํ•ฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ฉ”๋ชจ์—์„œ, ํ”„๋ก์‹œ๊ฐ€ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์—์„œ ์ฝ”์–ด์˜ ~30%๋ฅผ ๋จน๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. iptables๊ฐ€ ๊ทธ๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์šฐ์„ ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค - ๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ kube-proxy์˜ ์ „์ฒด ์žฌ์ž‘์„ฑ์ด๋ฉฐ
๊ทธ ๋ชจ๋“  ์‹œํ—˜. ๋˜ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ „ ์ปค๋„ ๋˜๋Š” ์ด์ „ iptables ๋ฐ”์ด๋„ˆ๋ฆฌ).

2015๋…„ 1์›” 26์ผ ์›”์š”์ผ ์˜ค์ „ 11:06, Brendan Burns [email protected]
์ผ๋‹ค:

๋ฉ‹์žˆ๋Š”! ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ํ™•์‹คํžˆ ๋ณ‘ํ•ฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ฉ”๋ชจ์—์„œ,
ํ”„๋ก์‹œ๊ฐ€ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์—์„œ ์ฝ”์–ด์˜ ~30%๋ฅผ ๋จน๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
iptables๊ฐ€ ๊ทธ๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -71517501
.

๋ณ‘๋ ฌ ์˜ต์…˜์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ฒœ์ฒœํžˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ๊นŒ์š”?

2015๋…„ 1์›” 26์ผ ์›”์š”์ผ ์˜คํ›„ 12์‹œ 1๋ถ„, Tim Hockin [email protected]
์ผ๋‹ค:

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์šฐ์„ ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค - ๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ kube-proxy์˜ ์ „์ฒด ์žฌ์ž‘์„ฑ์ด๋ฉฐ
๊ทธ ๋ชจ๋“  ์‹œํ—˜. ๋˜ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ „ ์ปค๋„ ๋˜๋Š” ์ด์ „ iptables ๋ฐ”์ด๋„ˆ๋ฆฌ).

2015๋…„ 1์›” 26์ผ ์›”์š”์ผ ์˜ค์ „ 11:06, Brendan Burns [email protected]
์ผ๋‹ค:

๋ฉ‹์žˆ๋Š”! ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ๋ณ‘ํ•ฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜
๋…ธํŠธ,
ํ”„๋ก์‹œ๊ฐ€ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์—์„œ ์ฝ”์–ด์˜ ~30%๋ฅผ ๋จน๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
iptables๊ฐ€ ๊ทธ๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -71517501

.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -71527216
.

์ด ์ฝ”๋“œ๋ฅผ ์ž˜ ๋ชจ๋ฅด๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ฐฐ์šฐ๋„๋ก ์œ ๋„ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ์ทจํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ •๋ง๋กœ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์ง€๋งŒ,
๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด ๊ณต๊ฐ„์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค(๋‹น์‹ ์ด ์•„๋‹™๋‹ˆ๋‹ค! :)

์ฆ‰, ๋‹น์‹ ์€ ๋˜ํ•œ ๋ฐฉ๋Œ€ํ•œ P1 ๋ชฉ๋ก์— ๋Œ€ํ•œ (์ข‹์€) ์ด๋ฉ”์ผ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ์•„์ง ๊ทธ ๋ชฉ๋ก์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

2015๋…„ 1์›” 26์ผ ์›”์š”์ผ ์˜คํ›„ 1:06, Brendan Burns [email protected]
์ผ๋‹ค:

๋ณ‘๋ ฌ ์˜ต์…˜์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ฒœ์ฒœํžˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด
๊ฐ๊ฐ?

2015๋…„ 1์›” 26์ผ ์›”์š”์ผ ์˜คํ›„ 12์‹œ 1๋ถ„, Tim Hockin [email protected]
์ผ๋‹ค:

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์šฐ์„ ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค - ๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ kube-proxy์˜ ์ „์ฒด ์žฌ์ž‘์„ฑ์ž…๋‹ˆ๋‹ค
๊ทธ๋ฆฌ๊ณ 
๊ทธ ๋ชจ๋“  ์‹œํ—˜. ๋˜ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์ž‘๋™ํ•˜์ง€ ์•Š์Œ
~์—
์ด์ „ ์ปค๋„ ๋˜๋Š” ์ด์ „ iptables ๋ฐ”์ด๋„ˆ๋ฆฌ).

2015๋…„ 1์›” 26์ผ ์›”์š”์ผ ์˜ค์ „ 11:06, Brendan Burns <
์•Œ๋ฆผ@github.com>
์ผ๋‹ค:

๋ฉ‹์žˆ๋Š”! ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ๋ณ‘ํ•ฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜
๋…ธํŠธ,
ํ”„๋ก์‹œ๊ฐ€ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์—์„œ ์ฝ”์–ด์˜ ~30%๋ฅผ ๋จน๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
iptables๊ฐ€ ๊ทธ๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<

https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -71517501

.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment-71527216>

.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -71538256
.

์ด๊ฒŒ P2์•ผ? ์ง€๊ธˆ์€ P3๋กœ ๋งŒ๋“ค ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ž‘๋™ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์•„์ง ๊ฐ•๋“ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2015๋…„ 2์›” 11์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 2:49 Satnam Singh [email protected]
์ผ๋‹ค:

์ด๊ฒŒ P2์•ผ? ์ง€๊ธˆ์€ P3๋กœ ๋งŒ๋“ค ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -73982161
.

"ํฌ๋ง"์€ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ์–ป์„ ์ˆ˜ ์žˆ๋Š” P3์™€ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@thockin ๊ณผ์˜ ํ† ๋ก ์—์„œ : ์ด๊ฒƒ์€ 1.0์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์„œ๋น„์Šค ํฌํŠธ ๋ฒ”์œ„๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด์ง€๋งŒ ๊ถ๊ทน์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@thockin "์ด๊ฒƒ์€ ์ด์ „ iptables ๋ฐ ์ปค๋„๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค." ์ปค๋„์€ ์–ผ๋งˆ๋‚˜ '์ƒˆ๋กญ๋‹ค'๊ณ  ํ•ด์•ผ ํ• ๊นŒ์š”?

๋„ˆ๋ฌด ์ƒˆ๋กœ์šด ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ 2012๋…„๋ถ€ํ„ฐ iptables๋ฅผ ์ •๋ง๋กœ ์›ํ•˜๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผํ•˜๋‹ค.

2015๋…„ 2์›” 23์ผ ์›”์š”์ผ ์˜คํ›„ 2์‹œ 44๋ถ„, Sidharta Seethana < [email protected]

์ผ๋‹ค:

@thockin https://github.com/thockin "์ด๊ฒƒ์€
์ด์ „ iptables ๋ฐ ์ปค๋„๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค." ์ปค๋„์ด ์–ผ๋งˆ๋‚˜ '์ƒˆ๋กœ์šด'
ํ•ด์•ผ?

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -75654187
.

@thockin ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๋Š” RHEL/CentOS 6์„ ์‚ฌ์šฉ/ํ…Œ์ŠคํŠธ ์ค‘์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ๊ทผ 3.x ์ปค๋„์— ๋Œ€ํ•œ ๊ฐ•ํ•œ ์ข…์†์„ฑ์ด ์—†๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pweil- ์šฐ๋ฆฌ๋Š” ์ผ์ „์— ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
2015๋…„ 2์›” 23์ผ ์›”์š”์ผ ์˜คํ›„ 11:40 Sidharta Seethana [email protected]
์ผ๋‹ค:

@thockin https://github.com/thockin ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ/ํ…Œ์ŠคํŠธ ์ค‘์ž…๋‹ˆ๋‹ค
์˜ˆ๋ฅผ ๋“ค์–ด RHEL/CentOS 6 - ํ•˜๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ตœ๊ทผ 3.x ์ปค๋„์— ๋Œ€ํ•œ ์ข…์†์„ฑ.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -75698480
.

๊ธ€์Ž„์š”, Docker๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด Docker๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์–ด๋Š ์‹œ์ ์—์„œ ์ด๋ฅผ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
back-rev iptables ์ง€์›์€ (๊ฒฐ๊ตญ)
์ด ๋ณ€ํ™”๋Š” ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2015๋…„ 2์›” 23์ผ ์›”์š”์ผ ์˜คํ›„ 8์‹œ 40๋ถ„, Sidharta Seethana < [email protected]

์ผ๋‹ค:

@thockin https://github.com/thockin ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ/ํ…Œ์ŠคํŠธ ์ค‘์ž…๋‹ˆ๋‹ค
์˜ˆ๋ฅผ ๋“ค์–ด RHEL/CentOS 6 - ํ•˜๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ตœ๊ทผ 3.x ์ปค๋„์— ๋Œ€ํ•œ ์ข…์†์„ฑ.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -75698480
.

@thockin ์˜ ๋„์›€์œผ๋กœ ์šฐ๋ฆฌ๋Š” udp๋กœ ๊ฐ™์€ ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

3๊ฐœ์˜ sky-dns ๋ณต์ œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์žˆ๋Š” GCE Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
kubernetes-master์—์„œ iptables์— ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
dns ์„œ๋น„์Šค IP๋Š” 10.0.0.10์ด๊ณ  dns๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํฌ๋“œ ์—”๋“œํฌ์ธํŠธ๋Š” 10.244.0.5:53, 10.244.3.6:53, 10.244.0.6:53์ž…๋‹ˆ๋‹ค.

iptables -t nat -N TESTSVC
iptables -t nat -F TESTSVC
iptables -t nat -N TESTSVC_A
iptables -t nat -F TESTSVC_A
iptables -t nat -N TESTSVC_B
iptables -t nat -F TESTSVC_B
iptables -t nat -N TESTSVC_C
iptables -t nat -F TESTSVC_C
iptables -t nat -N KUBE-PORTALS-HOST
iptables -t nat -F KUBE-PORTALS-HOST

iptables -t nat -A TESTSVC -m ์ตœ๊ทผ --name hostA --rcheck --seconds 1 --reap -j TESTSVC_A
iptables -t nat -A TESTSVC -m ์ตœ๊ทผ --name hostB --rcheck --seconds 1 --reap -j TESTSVC_B
iptables -t nat -A TESTSVC -m ์ตœ๊ทผ --name hostC --rcheck --seconds 1 --reap -j TESTSVC_C

iptables -t nat -A TESTSVC -m ํ†ต๊ณ„ --๋ชจ๋“œ ๋žœ๋ค --ํ™•๋ฅ  0.333 -j TESTSVC_A
iptables -t nat -A TESTSVC -m ํ†ต๊ณ„ --๋ชจ๋“œ ๋žœ๋ค --ํ™•๋ฅ  0.5 -j TESTSVC_B
iptables -t nat -A TESTSVC -m ํ†ต๊ณ„ --๋ชจ๋“œ ๋žœ๋ค --ํ™•๋ฅ  1.000 -j TESTSVC_C

iptables -t nat -A TESTSVC_A -m ์ตœ๊ทผ --name hostA --set -j DNAT -p udp --to-destination 10.244.0.5:53
iptables -t nat -A TESTSVC_B -m ์ตœ๊ทผ --name hostB --set -j DNAT -p udp --to-destination 10.244.3.6:53
iptables -t nat -A TESTSVC_C -m ์ตœ๊ทผ --name hostC --set -j DNAT -p udp --to-destination 10.244.0.6:53
iptables -t nat -A KUBE-PORTALS-HOST -d 10.0.0.10/32 -p udp -m udp --dport 53 -j TESTSVC
iptables -t nat -A ์ถœ๋ ฅ -j KUBE-PORTALS-HOST


kubernetes-master>nslookup kubernetes.default.kuberenetes.local 10.0.0.10

์šฐ๋ฆฌ๋Š” ์‘๋‹ต์„ ๋ฐ›์Šต๋‹ˆ๋‹ค!

์ข‹์€ ๋ฌผ๊ฑด! ์ฐธ๊ณ ๋กœ (์šฐ๋ฆฌ์˜ ๋Œ€๋ฉด ๋Œ€ํ™”์—์„œ ํ™•์ธ) ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์‹œ iptables ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‹ค๋ฅธ ์ฒด์ธ์€ ๊ดœ์ฐฎ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค). iptables๋Š” libiptc์˜ ๋ž˜ํผ์ด๋ฉฐ iptc_commit์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. http://www.tldp.org/HOWTO/Querying-libiptc-HOWTO/mfunction.html

์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ 2013๋…„์— ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ --wait(?)๋ฅผ ํ†ต๊ณผํ•œ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. http://git.netfilter.org/iptables/commit/?id=93587a04d0f2511e108bbc4d87a8b9d28a5c5dd8

์ด๊ฒƒ์˜ ๊ทผ๋ณธ ์›์ธ์€ iptables๊ฐ€ iptables-save / iptables-restore(์ ์–ด๋„ ์ฒด์ธ๋‹น)๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๋ฅผ ํ†ตํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  iptables-save ๋ฐ iptables-restore๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋„์›€์ด๋œ๋‹ค๋ฉด ํŒŒํ—ค์น  ์ˆ˜์žˆ๋Š” ์ฝ”๋“œ๊ฐ€์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

CAS ๋˜๋Š” LL/SC ์ข…๋ฅ˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋‚ด ๋งˆ์Œ์„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

--wait์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜์ง€๋งŒ GCE๊ฐ€
debian-backports์—๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ ์šฐ๋ฆฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ์ž์ฒด ์ž ๊ธˆ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ ์ž์‹ ์„ ๋ฐŸ๋Š” ๊ฒƒ์—์„œ.

2015๋…„ 2์›” 26์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 1์‹œ 56๋ถ„, Justin Santa Barbara <
[email protected]>์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ๋ฌผ๊ฑด! ์ฐธ๊ณ ๋กœ (์šฐ๋ฆฌ์˜ ๋Œ€๋ฉด ๋Œ€ํ™”์—์„œ ํ™•์ธ),
์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋™์‹œ iptables ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
(๋‹ค๋ฅธ ์ฒด์ธ์€ ๊ดœ์ฐฎ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.) iptables๋Š” ๋ž˜ํผ์ž…๋‹ˆ๋‹ค.
libiptc ๋ฐ iptc_commit์— ๋Œ€ํ•œ ์ฃผ์„์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
http://www.tldp.org/HOWTO/Querying-libiptc-HOWTO/mfunction.html

์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ 2013๋…„์— ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ --wait(?)๋ฅผ ํ†ต๊ณผํ•œ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
http://git.netfilter.org/iptables/commit/?id=93587a04d0f2511e108bbc4d87a8b9d28a5c5dd8

์ด๊ฒƒ์˜ ๊ทผ๋ณธ ์›์ธ์€ iptables๊ฐ€ iptables-save /
iptables-restore(์ ์–ด๋„ ์ฒด์ธ๋‹น); ๋‚˜๋Š” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋ณด์•˜๋‹ค.
๋”ฐ๋ผ์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  iptables-save ๋ฐ iptables-restore๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๋ฅผ ํ†ตํ•ด ๋‚ด๊ฐ€ ํŒŒํ—ค์น  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋„์›€์ด๋œ๋‹ค๋ฉด ์œ„๋กœ.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -76282629
.

๋งŽ์€ ๊ทœ์น™์„ ์ƒ์„ฑํ•˜๋Š” ๋„์ค‘์— ์‹คํŒจํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

๊ณต์ •ํ•œ ์งˆ๋ฌธ - ์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ •๋ง ์—ด์‹ฌํžˆ ์ƒ๊ฐํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ค‘๊ฐ„์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ

2015๋…„ 2์›” 26์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 8์‹œ 47๋ถ„, Brian Grant ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

๋ฌด๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?
๊ทœ์น™?

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -76331174
.

@thockin ์˜ค๋Š˜ irc์—์„œ:

net.ipv4.conf.all.route_localnet ๋Š” 127.0.0.1์ด DNAT ๊ทœ์น™์˜ ๋Œ€์ƒ์ด ๋˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ :

route_localnet - ๋ถ€์šธ

๋ฃจํ”„๋ฐฑ ์ฃผ์†Œ๋ฅผ ํ™”์„ฑ ๋ฐœ์‹ ์ง€ ๋˜๋Š” ๋ชฉ์ ์ง€๋กœ ๊ฐ„์ฃผํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
๋ผ์šฐํŒ…ํ•˜๋Š” ๋™์•ˆ. ์ด๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ๋ผ์šฐํŒ… ๋ชฉ์ ์œผ๋กœ 127/8์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋ณธ๊ฐ’์€ ๊ฑฐ์ง“

์ด๊ฒƒ์„ kubelet์— ํ†ตํ•ฉํ•  ๊ฒƒ์ธ๊ฐ€, ์•„๋‹ˆ๋ฉด ๋ณ„๋„์˜ ๋ฐ๋ชฌ์— ๋ณด๊ด€ํ•  ๊ฒƒ์ธ๊ฐ€? Kubelet์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ์„œ๋น„์Šค๋ฅผ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ณ„๋„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
k8s ์™ธ๋ถ€์˜ ๋‹ค๋ฅธ ๋จธ์‹ (์˜ˆ: ์• ์™„๋™๋ฌผ VM)์—์„œ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
k8 ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

--๋ธŒ๋ Œ๋‹จ

2015๋…„ 3์›” 13์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 11:37, Brian Grant ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

์ด๊ฒƒ์„ kubelet์— ํ†ตํ•ฉํ•  ๊ฒƒ์ธ๊ฐ€, ์•„๋‹ˆ๋ฉด ๋ณ„๋„์˜ ๋ฐ๋ชฌ์— ๋ณด๊ด€ํ•  ๊ฒƒ์ธ๊ฐ€?
Kubelet์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ์„œ๋น„์Šค๋ฅผ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -79230747
.

๋”ฐ๋ผ์žก๊ธฐ. ์‹คํŒจ์˜ ๊ฒฝ์šฐ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€(๋งŽ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค, ์ €๋ฅผ ๋ฏฟ์œผ์‹ญ์‹œ์˜ค), ์ €๋Š” ๋ฐ˜์—”ํŠธ๋กœํ”ผ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์—ด๋ ฌํ•œ ํŒฌ์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ์›ํ•˜๋Š” ์ƒํƒœ์™€ ์‹ค์ œ ์ƒํƒœ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค(์‹ค์ œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ). ์ด ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์•ˆ (์‚ฌ์‹ค) {
์‹ค์ œ ์ƒํƒœ = iptablesSave()
์‹ค์ œ ์ƒํƒœ != desiredState { iptablesRestore(desiredState))์ธ ๊ฒฝ์šฐ
sleep_a_while()
}

iptables ์ž‘์„ฑ ์‹คํŒจ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋ฐ 100% ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
๊ทœ์น™.

2015๋…„ 3์›” 13์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 1์‹œ 16๋ถ„, Quinton Hoole [email protected]
์ผ๋‹ค:

๋”ฐ๋ผ์žก๊ธฐ. ์‹คํŒจ์˜ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด(๊ทธ ์ค‘
๋งŽ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์ €๋Š” ๋ฐ˜์—”ํŠธ๋กœํ”ผ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์—ด๋ ฌํ•œ ํŒฌ์ž…๋‹ˆ๋‹ค.

  • ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ์›ํ•˜๋Š” ์ƒํƒœ์™€
    ์‹ค์ œ ์ƒํƒœ(์‹ค์ œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ). ์ด ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์•ˆ (์‚ฌ์‹ค) {
์‹ค์ œ ์ƒํƒœ = iptablesSave()
์‹ค์ œ ์ƒํƒœ != desiredState { iptablesRestore(desiredState))์ธ ๊ฒฝ์šฐ
sleep_a_while()
}

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -79336296
.

์ง€๊ธˆ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๊ทธ ์ •๋„์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ฐ ์˜ˆ์ƒ ๊ทœ์น™์— ๋Œ€ํ•ด
์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์—†์œผ๋ฉด ๋งŒ๋“ญ๋‹ˆ๋‹ค.

2015๋…„ 3์›” 13์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 2:02 Brendan Burns [email protected]
์ผ๋‹ค:

iptables ์ž‘์„ฑ ์‹คํŒจ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋ฐ 100% ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
๊ทœ์น™.

2015๋…„ 3์›” 13์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 1์‹œ 16๋ถ„, Quinton Hoole [email protected]
์ผ๋‹ค:

๋”ฐ๋ผ์žก๊ธฐ. ์‹คํŒจ์˜ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด(๊ทธ ์ค‘
๋งŽ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”), ์ €๋Š” ๋ฐ˜์—”ํŠธ๋กœํ”ผ์˜ ์—ด๋ ฌํ•œ ํŒฌ์ž…๋‹ˆ๋‹ค.
์ ‘๊ทผํ•˜๋‹ค

  • ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ์›ํ•˜๋Š” ์ƒํƒœ์™€
    ์‹ค์ œ ์ƒํƒœ(์‹ค์ œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ). ์ด ๊ฒฝ์šฐ ์•„๋งˆ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ
    ๊ฐ™์ด:

๋™์•ˆ (์‚ฌ์‹ค) {
์‹ค์ œ ์ƒํƒœ = iptablesSave()
์‹ค์ œ ์ƒํƒœ != desiredState { iptablesRestore(desiredState))์ธ ๊ฒฝ์šฐ
sleep_a_while()
}

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -79336296

.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -79392626
.

๋‚˜๋Š” ๋ณ„๋„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„
kubelet(cAdvisor์™€ ๋™์ผํ•œ ๋ฐฉ์‹)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰ํ˜•์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๋™์‹œ์—.

2015๋…„ 3์›” 13์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 12:03, Brendan Burns [email protected]
์ผ๋‹ค:

๋ณ„๋„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
k8s ์™ธ๋ถ€์˜ ๋‹ค๋ฅธ ๋จธ์‹ (์˜ˆ: ์• ์™„๋™๋ฌผ VM)์—์„œ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
k8 ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

--๋ธŒ๋ Œ๋‹จ

2015๋…„ 3์›” 13์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 11:37, Brian Grant ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

์ด๊ฒƒ์„ kubelet์— ํ†ตํ•ฉํ•  ๊ฒƒ์ธ๊ฐ€, ์•„๋‹ˆ๋ฉด ๋ณ„๋„์˜ ๋ฐ๋ชฌ์— ๋ณด๊ด€ํ•  ๊ฒƒ์ธ๊ฐ€?
Kubelet์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ์„œ๋น„์Šค๋ฅผ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -79230747

.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -79257059
.

๋…ธ๋“œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋” ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋ชจ๋“ˆํ™”๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด Kubernetes-Mesos ์‚ฌ๋žŒ๋“ค์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. @jdef?

[[ํŽธ์ง‘]] ์˜ˆ๋ฅผ ๋“ค์–ด kubelet ํ”„๋กœ์„ธ์Šค์™€ ๋ณ„๋„๋กœ ํ”„๋ก์‹œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด k8s ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ชจ๋“ˆ์„ฑ์„ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์‹คํŒจํ•˜๋ฉด kubelet์„ ์ค‘๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Mesos ์‹คํ–‰๊ธฐ๋Š” ํ˜„์žฌ ๋งค์šฐ ์šฐ์•„ํ•œ ์žฅ์•  ์กฐ์น˜ ๋ชจ๋ธ์„ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๊ณ  kubernetes-mesos ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์‹คํ–‰๊ธฐ๋Š” kubelet/executor ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์„ ํ†ตํ•ด mesos ๋งˆ์Šคํ„ฐ์—์„œ ํ”„๋ก์‹œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐธ๋Ÿฐ์„œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ œ์ถœํ•œ ์‹œ์ž‘ ์•ˆ๋‚ด์„œ ์ฐธ์กฐ).

๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ์žฅ/๋ฐฐ์†ก ์ธก๋ฉด์—์„œ ํ•˜์ดํผ์ฟ ๋ธŒ์ฒ˜๋Ÿผ ๊ธฐ๋Šฅ์„ ํ•จ๊ป˜ ๋ฌถ๋Š” ๊ฒƒ์ด ๊ฝค ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ kubernetes-mesos ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ตœ์†Œํ•œ์˜ Docker ์ปจํ…Œ์ด๋„ˆ์— ํŒจํ‚ค์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. Iptables์—๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ์ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ƒํ™ฉ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์€ k8sm ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋‹จ์ผ hyperkube ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ Docker๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— kubelet-executor ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ kubelet- ์‹คํ–‰๊ธฐ ๋˜๋Š” ํ”„๋ก์‹œ - ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ iptables-{binaries,libraries}-in-Docker ์ข…์†์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ข… ์‹คํ–‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์‹ ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ +1, ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ +1

@thockin re: ๋ฐ˜์—”ํŠธ๋กœํ”ผ: ์•„, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” proxier.SyncLoop()์ด ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์— ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๊ณ  SyncLoop()์˜ ๋‹ค์Œ ๋ฐ˜๋ณต(ํ˜„์žฌ 1๋ถ„)์—์„œ ๋ณต๊ตฌ๋  ๊ฒƒ์ด๋ผ๋Š” 2์›” 26์ผ @bgrant0607 ์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ด ์•„๋‹™๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@ํ† ํ‚จ

  1. ๋ธ”๋ž™ํ™€๋ง ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์„œ๋น„์Šค/ํฌ๋“œ ์ž‘์„ฑ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋ก์‹œ ์‚ฌ์šฉ
๊ฐ€์ƒ IP 10.0.0.11์— 10.240.1.1, 10.240.1.2, 10.240.1.3๊ณผ ๊ฐ™์€ 3๊ฐœ์˜ ๋์ ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ 10.240.1.1์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•˜๋ฉด ํ”„๋ก์‹œ๋Š” 10.240.1.1๋กœ tcp ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜์ง€ ์•Š์•˜์Œ์„ ๊นจ๋‹ซ๊ณ  ๋‹ค๋ฅธ ๋‘ ์—”๋“œํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

iptables๋กœ
iptables๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ kubernetes๋Š” ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ฐฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†์Šต๋‹ˆ๋‹ค.
์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ๋์ ์„ ์ œ๊ฑฐํ•˜๋Š” ๋์ ์— ๋Œ€ํ•œ ์ผ์ข…์˜ ์ƒํƒœ ํ™•์ธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ๋์ ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜๋Š” ๊ฒƒ์€ kubernetes ์‹œ์Šคํ…œ์˜ ์ฑ…์ž„์ด ์•„๋‹ˆ๋ผ ํฌ๋“œ ์ž‘์„ฑ์ž์˜ ์ฑ…์ž„์ž…๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž๋Š” Kubelet์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ค€๋น„ ์ƒํƒœ ํ”„๋กœ๋ธŒ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋ธŒ ์‹คํŒจ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—”๋“œํฌ์ธํŠธ ๋ชฉ๋ก์—์„œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋น„์Šค ํ”„๋ก์‹œ๋Š” ๋Œ€์ƒ ์ง‘ํ•ฉ์—์„œ ๋์ ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” GSoC์— ๋Œ€ํ•ด ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•ด ์™”์œผ๋ฉฐ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด์ƒ์ ์œผ๋กœ๋Š” iptables๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์ƒˆ๋กญ๊ฑฐ๋‚˜ kube-proxy๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/GoogleCloudPlatform/kubernetes/issues/5419์—์„œ ์ด๊ฒƒ์ด ์ด์ƒ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. kubelet์„ ์‚ฌ์šฉํ•˜์—ฌ ip-tables๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๋˜๋Š” kube-proxy๋ฅผ ์‹œ์ž‘ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ GSoC์— ์•ฝ๊ฐ„ ๋Šฆ์—ˆ๊ณ (๋ด„ ๋ฐฉํ•™์ด์—ˆ์Šต๋‹ˆ๋‹ค....), ๊ทธ๋ž˜์„œ ๋‚ด์ผ/์˜ค๋Š˜ ๋Šฆ๊ฒŒ(๋ฌผ๋ก  27์ผ ๋งˆ๊ฐ์„ ์ œ์™ธํ•˜๊ณ ๋Š”) ์—ฌ์ „ํžˆ GSoC ์ œ์•ˆ์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„์ง ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค)?

@BenTheElder ์˜ˆ, ๊ธˆ์š”์ผ๊นŒ์ง€ ์ œ์•ˆ์„œ๋ฅผ ์ œ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์— ์ž ์žฌ์ ์œผ๋กœ ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ํ•œ ๋ช… ๋” ์žˆ์ง€๋งŒ ์•„์ง ๊ตฌ์ฒด์ ์ธ ์ œ์•ˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

2012๋…„๋ณด๋‹ค ์˜ค๋ž˜๋œ ์ปค๋„์— ๋Œ€ํ•ด์„œ๋Š” iptables๊ฐ€ ์™„์ „ํžˆ ์—†๋Š” OS์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜๋Š” ๊ฒƒ๋งŒํผ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@bgrant0607 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
๊ทธ๋Ÿฌ๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์žฌ๋ฏธ์žˆ์–ด ๋ณด์ธ๋‹ค.

์ค€๋น„ ์ƒํƒœ ํ”„๋กœ๋ธŒ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘์— ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ค€๋น„ ์ƒํƒœ๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜๋ฅผ ์™„ํ™”ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํฌ๋“œ ์‹คํŒจ ์‹œ ์‹ ํ˜ธ๋Š” application -> kubelet -> apiserver -> endpoints_controller -> apiserver -> kube-proxy์—์„œ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํŒจ์™€ kube-proxy ํšŒ์ „์—์„œ ์—”๋“œํฌ์ธํŠธ ์ œ๊ฑฐ ์‚ฌ์ด์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์š”์ฒญ์€ ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ๋์ ์œผ๋กœ ํ”„๋ก์‹œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„๋Š” ์ผ๋ฐ˜์ ์ธ ์ „๋žต์ด๋ฉฐ ๋งŽ์€ ์ธ๊ธฐ ์žˆ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(์˜ˆ: haproxy, AWS ELB)์˜ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ ํ˜„์žฌ kube-proxy ๊ตฌํ˜„์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฑ…์ž„์„ ์™ธ๋ถ€ LB๋กœ ์ด์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ํŠธ๋ž˜ํ”ฝ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์œผ๋กœ๋Š” iptables๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ LB์™€ ๋น„๊ตํ•˜์—ฌ ์žฌ๊ตฌ์„ฑ ์‹œ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋“œ๋ ˆ์ด๋‹๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mike๋Š” ์ข‹์€ ์ ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค.

2015๋…„ 3์›” 23์ผ ์›”์š”์ผ ์˜คํ›„ 11:00 Mike Danese [email protected]
์ผ๋‹ค:

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ, ์šฐ๋ฆฌ๋Š” ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค
์žฌ๊ตฌ์„ฑ ์‹œ ๋“œ๋ ˆ์ธ ๋Œ€ ์‹ค์ œ LB.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -85354865
.

๋‚˜๋Š” kube-proxy ๋ฐ proxy pkg์˜ ์†Œ์Šค๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. iptables๋Š” ํ˜„์žฌ ๊ฐœ์ •ํŒ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ •ํ™•ํžˆ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ˜„์žฌ ๋งˆ์Šคํ„ฐ ์†Œ์Šค์—์„œ iptables๊ฐ€ ์ด๋ฏธ ํ”„๋ก์‹œ์—์„œ ๊ฝค ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@mikedanese @thockin Readiness๋Š” ๊ณ„ํš๋œ ์ค‘๋‹จ์— ๊ฐ€์žฅ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณ„ํš๋˜์ง€ ์•Š์€ ์ค‘๋‹จ์€ ํ•ญ์ƒ ๋ช‡ ๊ฐ€์ง€ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ํด๋ง ๊ฐ„๊ฒฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ๋น„ํ•ด ๊ธธ์–ด์•ผ ํ•˜์ง€๋งŒ apiserver ๋ฐ etcd๋ฅผ ํ†ตํ•œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ๊ฒฝ๋กœ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@BenTheElder ๊ธฐ์กด ๊ทœ์น™์€ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์•„์ด๋””์–ด๋Š” ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ๋ฅผ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@bgrant0607 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์™„์ „ํžˆ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์™€ ๋””์ž์ธ ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ฝ๊ณ  ์ œ์•ˆ์„œ ์ดˆ์•ˆ ์ž‘์„ฑ์„ ๊ฑฐ์˜ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

GSoC ์ œ์•ˆ ์ดˆ์•ˆ: https://gist.github.com/BenTheElder/ac61900595a7ea9ea9b5

ํŠนํžˆ ์ผ์ • ์„น์…˜์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ํ™•์‹ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
์ผ์ฐ ๋๋‚ด์•ผ ํ•˜๋‚˜์š”? ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ GSoC ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
https://github.com/GoogleCloudPlatform/kubernetes/issues/1651.

๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ๊ฐ€์žฅ ์นœ๊ทผํ•œ ๊ทธ๋ฃน์„ ์œ„ํ•ด ์ผ€์ดํฌ๋ฅผ ๊ฐ€์ ธ๊ฐ‘๋‹ˆ๋‹ค.

์ €๋Š” ์ œ ์ œ์•ˆ์ด ๋ฐ›์•„๋“ค์—ฌ์ ธ์„œ ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋ฆ„ ๋™์•ˆ ์ด ์ž‘์—…์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. : ์Šค๋งˆ์ผ :

๋‚˜๋Š” ๋งค์šฐ ํฅ๋ถ„๋œ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ง€๊ธˆ์€ ๊ฒฐ์Šน์ „์„ ์•ž๋‘๊ณ  ์žˆ์ง€๋งŒ ์ด๋ฒˆ ์ฃผ๋ง๋ถ€ํ„ฐ ๋” ๋งŽ์€ ์ผ์„ ํ•ด์•ผ ํ•˜๊ณ  ๋” ๋งŽ์€ ์ž‘์—…์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ https://github.com/GoogleCloudPlatform/kubernetes/pull/7032 ๋ฅผ ์–ป๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™„์„ฑ ๋œ.

@thockin @brendanburns ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋ก์‹œ์™€ ๋ณ‘๋ ฌ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์€์ง€ ๋˜๋Š” ์žฌ๊ตฌํ˜„์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ˆ„๊ฐ€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ iptables >= 1.4.11(2011๋…„ 5์›” 26์ผ ์ถœ์‹œ)์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// Executes the rule check without using the "-C" flag, instead parsing iptables-save.
// Present for compatibility with <1.4.11 versions of iptables.  This is full
// of hack and half-measures.  We should nix this ASAP.
func (runner *runner) checkRuleWithoutCheck(table Table, chain Chain, args ...string) (bool, error) {

์ถœ์ฒ˜: https://github.com/GoogleCloudPlatform/kubernetes/blob/aec41967416cf3463b188d72c97e71465e00719d/pkg/util/iptables/iptables.go#L206

์‹ค์ œ๋กœ ๊ทธ๋ณด๋‹ค ์˜ค๋ž˜๋œ ํ˜ธ์ŠคํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•œ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์‹คํ–‰ ์‹œ๊ฐ„์— ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ iptables์˜ ๋ฒ„์ „์„ ๊ฐ์ง€ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฒ„์ „์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” "์ตœ์„ ์˜ ์ผ"์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

if (์ด์ „ ๋ฒ„์ „) {
์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋ก์‹œ ๋ชจ๋“ˆ ๋กœ๋“œ
}
๋˜ ๋‹ค๋ฅธ {
iptables ํ”„๋ก์‹œ ๋ชจ๋“ˆ ๋กœ๋“œ
}

์œ„์˜ if ๋ฌธ(์ด์ƒ์ ์œผ๋กœ๋Š” 2๊ฐœ)์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ถ„๊ธฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜๊ณ  ์ฝ”๋“œ์˜ ๋‘˜ ์ด์ƒ์˜ ์œ„์น˜์— ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ if ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์–ผ๋งˆ๋‚˜ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ์ „๋žต(์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๋Œ€ iptables ํ”„๋ก์‹œ)์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ฐ๊ฐ์ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ ๋…ธ๋“œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ์œ„์˜ if ๋ฌธ(์˜ˆ: source_mode x dest_mode)์—์„œ ๋ถ„๊ธฐ ์ˆ˜์˜ ์ œ๊ณฑ์— ๋น„๋ก€ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ‘œ๋ฉด์ ์„ ์ž ์žฌ์ ์œผ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“œ ์ˆ˜๋ฅผ 2๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. .

NS

์•„, ๊ทธ๋ฆฌ๊ณ  ์˜ค๋ž˜๋œ ๋…ธ๋“œ๊ฐ€ ๋ณด์ด๋Š”์ง€์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์€ ๋ถˆํ–‰ํžˆ๋„ "์˜ˆ"์ž…๋‹ˆ๋‹ค.

์œ„์˜ ๋‚ด์šฉ์€ ๋ณ„๋„์˜ ๋ฌธ์ œ์—์„œ ๋งŽ์ด ๋…ผ์˜๋ฉ๋‹ˆ๋‹ค., ๋‚˜๋Š” ๋‹น์‹ ์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ํŒŒํ—ค์น˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@quinton-hoole ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋˜ํ•œ ํ•œ ๋…ธ๋“œ์—์„œ๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์„ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ๋Š” iptables๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“œ ์ˆ˜๋Š” -C๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” 2๊ฐœ์—ฌ์•ผ ํ•˜์ง€๋งŒ -C๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋Š” ์ˆœ์ˆ˜ํ•œ iptables ๋ฒ„์ „์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ œ ์ƒ๊ฐ์—๋Š”).

์•„ ์˜ˆ, #7528์€ ์ปค๋„ ๋ฒ„์ „ ๋“ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”.
๋‚˜๋Š” Kubernetes์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ฐพ์„ ๋•Œ ๊ทธ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฐพ์€ ์œ ์ผํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๊ณ ์œ ํ•œ IP๋ฅผ ๊ฐ€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋…ผ์˜ํ•˜๋Š” ๋„คํŠธ์›Œํ‚น ๋ฌธ์„œ์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ์ด ๋ฌด์—‡์ธ์ง€ ๋” ์ž˜ ์•Œ๊ฒŒ ๋˜๋ฉด ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ํ•ดํ‚น์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/BenTheElder/kubernetes/tree/iptables_proxy

ํŠนํžˆ ์ธํ„ฐํŽ˜์ด์Šค ๋’ค์—์„œ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๊ตฌํ˜„์„ ์—ฌ๊ธฐ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.
https://github.com/BenTheElder/kubernetes/commit/4e5d24bb74aca43b0dd37cf5cfee8a34f8eff2bf

๊ตฌํ˜„ ์„ ํƒ์ด cmd/kube-proxy ๋˜๋Š” pkg/proxy์— ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€ ์ง€๊ธˆ์€ ํ™•์‹คํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  kube-proxy์—์„œ ๊ตฌํ˜„์„ ์„ ํƒํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋Œ์ด์ผœ๋ณด๋ฉด kube-proxy์—์„œ ๊ตฌํ˜„์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@BenTheElder Calico๋กœ Tim์˜ ๊ทœ์น™์„ ํ…Œ์ŠคํŠธ

๋” ์ผ๋ฐ˜์ ์œผ๋กœ Kubernetes๊ฐ€ ๊ทœ์น™์„ ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด iptables๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ํ† ๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Kubernetes ๊ทœ์น™์ด ํ–ฅํ›„ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์ง“๋ฐŸ๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋˜๋Š” ์ง“๋ฐŸํžˆ๊ณ  ์‹ถ์ง€ ์•Š์Œ).

@๋Œ€์นญ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ถ€๋ถ„์€ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๊ฝค ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ์ฃผ๋ง์— ์กฐ๊ธˆ ๋ฐ”์  ๊ฒƒ ๊ฐ™์ง€๋งŒ ์›”์š”์ผ์—๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์„ ๊ตฌํ˜„ํ•˜๋Š” GSoC๋ฅผ ์œ„ํ•ด ์ด ํ’€ํƒ€์ž„ ์ž‘์—…์„ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋™์•ˆ ์ด๊ฒƒ์„ ์—ผ๋‘์— ๋‘๊ณ  ์‹ถ์ง€๋งŒ ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ API๋ฅผ ์‚ดํŽด๋ณธ ํ›„์— ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ / ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

FWIW, ๋‚˜๋Š” kube-proxy๊ฐ€ ๊ฑฐ์˜ ์‘๋‹ตํ•˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ์ผ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/MikaelCluseau/kubernetes-iptables-proxy/blob/master/iptables-routing.rb.

์ „์— ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ณธ ์ ์ด ์—†์ง€๋งŒ ๋ฌด์ž‘์œ„ ํ†ต๊ณ„ ์ผ์น˜ ๊ฐ€์ค‘์น˜์— ์‹ค์ˆ˜๋ฅผ ํ•œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๊ฐ€๊นŒ์šด ๊ฒƒ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค :-)

๋‚˜๋Š” ๋˜ํ•œ ์šฐ๋ฆฌ๊ฐ€ nf_conntrack_max์— ๋น ๋ฅด๊ฒŒ ๋„๋‹ฌํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ฆ๊ฐ€ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# cat /etc/sysctl.d/nf_conntrack.conf 
net.netfilter.nf_conntrack_max = 1000000
net.nf_conntrack_max           = 1000000

iptables ๋Œ€ํ•œ ๋ชจ๋“  ํ•„์š”์„ฑ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋Œ€์‹  IPVS ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
iptables๋ณด๋‹ค ํ”„๋ก์‹ฑ์— ๋” ์ ํ•ฉํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...
๋‹ค์Œ์€ ๊ฐ„๋‹จํ•œ go ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. https://github.com/noxiouz/go-ipvs
๊ทธ๋ฆฌ๊ณ  #561์„ ์™„์„ฑํ•˜๊ธฐ ์œ„ํ•ด ktcpvs ํ”„๋กœ์ ํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

IPVS๋Š” iptables์™€ ๊ฐ™์€ netfilter์— ๋Œ€ํ•œ ์ถ”์ƒํ™”์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ฝ”๋“œ์™€ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. iptables๋Š” netfilter๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#561 ๋ฐ ktcpvs์˜ ๊ฒฝ์šฐ: ktcpvs๋Š” 2004๋…„ ์ดํ›„๋กœ ๋ฐœ์ „์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ URL ์žฌ์ž‘์„ฑ์„ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  #561์€ ํ”Œ๋Ÿฌ๊ทธํ˜• ๋ฐธ๋Ÿฐ์„œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ: go ํ”„๋กœ์ ํŠธ์—๋Š” ๋ผ์ด์„ ์Šค๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

iptables๋Š” nftables( nft cli)๋ฅผ ์œ„ํ•ด "์–ธ์  ๊ฐ€" ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ iptables CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทœ์น™์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๊ฐ•๋ ฅํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...

๋น ๋ฅธ ๊ฒ€์ƒ‰์œผ๋กœ ๋‹ค๋ฅธ MIT ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค. https://github.com/vieux/go-libipvs
๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ณต์žก์„ฑ์ด ์ด๋ฏธ ์ปค๋„ ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ๋ฐฉํƒ„์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•œ ์ž‘์—…์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ •๋ง ์‰ฌ์šด ์ผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

iptables๊ฐ€ ์กฐ๋งŒ๊ฐ„ ์ฃผ์š” ๋ฐฐํฌํŒ์—์„œ ์ œ๊ฑฐ๋  ๊ฒƒ์ธ์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. iptables CLI๋Š” ํŠนํžˆ netfilter์— ๋Œ€ํ•œ ๊ทœ์น™์„ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค...?

๋งํฌ๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ถˆ์™„์ „ํ•œ cgo ๋ž˜ํผ๋Š” iptables ๋ฐ iptables-restore ํฌ๊ฒฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ์•ˆ์ „ํ•ด ๋ณด์ด๋ฉฐ ๋‹ค๋ฅธ ๊ทœ์น™(์˜ˆ: nodeports) ๋ฐ iptables-restore ๋Œ€ํ•œ iptables๊ฐ€ ์ด๋ฏธ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•ฝ๊ฐ„์˜ ์›์ž์„ฑ์œผ๋กœ ๋Œ€๋Ÿ‰ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IPVS๋Š” ๋˜ํ•œ "์‹ค์ œ" ์„œ๋ฒ„์™€ ๋ณ„๋„๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์œ ์ผํ•˜๊ฒŒ ์ง€์›๋˜๋Š” ์‚ฌ์šฉ๋ฒ•์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค:

2.2. ๋ฌธ์ œ: ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(๋””๋ ‰ํ„ฐ์™€ ์‹ค์ œ ์„œ๋ฒ„๋Š” ๊ฐ€์ƒ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Œ).

LVS๋ฅผ ์„ค์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ/์‹คํ–‰ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ, ๋””๋ ‰ํ„ฐ, ์‹ค์ œ ์„œ๋ฒ„์˜ ์ตœ์†Œ 3๊ฐœ์˜ ๋จธ์‹ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€์—์„œ LVS๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๊ณ„๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” LVS(๋””๋ ‰ํ„ฐ ๋˜๋Š” ์‹ค์ œ ์„œ๋ฒ„)์˜ ์‹œ์Šคํ…œ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. LVS์— ์žˆ๋Š” ๊ธฐ๊ณ„์—์„œ LVS ์ œ์–ด ์„œ๋น„์Šค(์˜ˆ: http, smtp, telnet)์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ; ๋””๋ ‰ํ„ฐ์˜ ์•ก์„ธ์Šค๊ฐ€ ์ค‘๋‹จ๋˜๊ณ  ์‹ค์ œ ์„œ๋ฒ„์˜ ์•ก์„ธ์Šค๊ฐ€ LVS๋ฅผ ์šฐํšŒํ•˜์—ฌ ๋กœ์ปฌ๋กœ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ IPVS/LVS๊ฐ€ ํ•˜ํŠธ๋น„ํŠธ ๋ฐ๋ชฌ ๋ฐ ์ถ”๊ฐ€ ๋ชจ๋‹ˆํ„ฐ๋ง ํ”„๋กœ์„ธ์Šค์™€ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค . ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ kubernetes ๋‚ด์—์„œ ๋์  ์ •๋ณด ๋ฐ ํฌ๋“œ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

iptables ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Calico์—์„œ iptables๋ฅผ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐ•๋ ฅํ•˜๊ณ  ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค(๊ทœ์น™์„ ์ž˜ ์„ค๊ณ„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •). @BenTheElder , iptables ์ž‘์—…์— ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด ์ €ํฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

iptables ๋ฐ iptables-restore์˜ ๊ฒฝ์šฐ +1, ํ›จ์”ฌ ๋œ ๋ฌด๊ฑฐ์šด ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
IPVS/LVS๋ณด๋‹ค ๋” ์ ์€ ์‹œ์Šคํ…œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค(ํ•˜ํŠธ๋น„ํŠธ ๋ฐ๋ชฌ,
๋“ฑ.)

2015๋…„ 6์›” 13์ผ ํ† ์š”์ผ ์˜ค์ „ 11์‹œ 27๋ถ„, Alex Pollitt [email protected]
์ผ๋‹ค:

iptables ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Calico์—์„œ iptables๋ฅผ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉฐ
๊ทธ๋“ค์€ ๊ฐ•๋ ฅํ•œ ๊ฒƒ์œผ๋กœ ์ž…์ฆ๋˜์—ˆ์œผ๋ฉฐ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.
๊ทœ์น™์„ ์ž˜ ๋””์ž์ธํ•˜์‹ญ์‹œ์˜ค). @BenTheElder https://github.com/BenTheElder ,
iptables ์ž‘์—…์— ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด
์šฐ๋ฆฌ๋Š” ๊ธฐ๊บผ์ด ์นฉ์„ ๋„ฃ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -111719474
.

Alex์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธํ•˜๋ฉด ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์‹œ๊ฐ„์ด ์žˆ๋‹ค๋ฉด ํ˜„์žฌ ๊ตฌํ˜„(https://github.com/GoogleCloudPlatform/kubernetes/pull/9210)์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ/์ž…๋ ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ ์™„์ „ํ•˜๊ณ  ํ˜„์žฌ ์—…์ŠคํŠธ๋ฆผ ๋งˆ์Šคํ„ฐ์™€ ํ•จ๊ป˜ ์ตœ์‹  ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ๊ทœ์น™์„ iptables-save ์™€ ๋น„๊ตํ•˜๊ณ  ์นด์šดํ„ฐ ๋“ฑ์„ ๋ณต์›ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ์„ ์™„๋ฃŒํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ทœ์น™์ด ์ƒ์„ฑ๋˜๊ณ  (๋Œ€๋ถ€๋ถ„) ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ OP์— ์„ค๋ช…๋œ ๊ทœ์น™์„ ๊ฑฐ์˜ ๋”ฐ๋ฅด๊ณ  ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋Š” iptables๊ฐ€ ์ˆ˜๋ฝํ•  ์ด๋ฆ„์˜ ์ž๋™ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ์ฒด์ธ ์ด๋ฆ„๋ฟ์ž…๋‹ˆ๋‹ค.

https://github.com/BenTheElder/kubernetes/issues/3์— ๋ณด๊ณ ๋œ ์—ฃ์ง€ ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ผ€์ด์Šค๋Š” ์ž์ฒด ์—ฐ๊ฒฐ๋˜๋Š” ํฌ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MikaelCluseau ๋ฐ @Symmetric ๊ณผ ํŠนํžˆ ์ด ์ž‘์—…๊ณผ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์žฌ์„ค๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ํ›Œ๋ฅญํ•œ ํ”ผ๋“œ๋ฐฑ๊ณผ ํ† ๋ก ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค (๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!). ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ํŠนํžˆ ๊ทœ์น™ ๋””์ž์ธ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ดํŽด๋ณผ ์‹œ๊ฐ„์ด ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๊ณ  ์ถ”๊ฐ€ ์ž…๋ ฅ ์—†์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ”ผํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PR ์ž์ฒด๋Š” ๊ฝค ํฌ์ง€๋งŒ ๊ด€๋ จ ๊ทœ์น™ ์ƒ์„ฑ์€ ๋ชจ๋‘ pkg/proxy/proxieriptables.go syncProxyRules() ( https://github.com/BenTheElder/kubernetes/blob/iptables_proxy/pkg/proxy/proxieriptables)์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ #L286

๊ธฐ์กด ํ† ๋ก ์€ (๋ฌผ๋ก  ์—ฌ๊ธฐ) PR ์˜๊ฒฌ๊ณผ https://github.com/BenTheElder/kubernetes/issues/3 ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. BenTheElder/kubernetes/issues/4.

์ž…๋ ฅ์ด ํ•„์š”ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ:

ํ˜„์žฌ ์ฝ”๋“œ์—๋Š” nodePort ์ผ€์ด์Šค๋งŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด kube-proxy๊ฐ€ ์—ฌ์ „ํžˆ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋„ kube-proxy๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  Ben์˜ PR ์—์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ iptables ๊ทœ์น™์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊ทœ์น™์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์™ธ๋ถ€ LB์˜ ์†Œ์Šค IP๋ฅผ ๊ฐ€๋ฆฌ๋ฏ€๋กœ ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋…ธ๋“œ์— ๋„๋‹ฌํ•  ๋•Œ LB์—์„œ ํŠธ๋ž˜ํ”ฝ์„ DNATํ•˜๋ฉด ์‘๋‹ต ํŒจํ‚ท์ด ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ LB๊ฐ€ ์‘๋‹ต์„ ์›๋ž˜ TCP ์„ธ์…˜๊ณผ ์—ฐ๊ด€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ์ด ์šฐ๋ ค๊ฐ€ ์œ ํšจํ•œ๊ฐ€์š”? ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ๊ตฌํ˜„์ด ๋” ๊ฐ„๋‹จํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

HTTP ํ”„๋ก์‹œ๋ฅผ ๋งŒ์กฑ์Šค๋Ÿฝ๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋งˆ์ˆ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ L4์—์„œ ์ด๊ฒƒ์„ ์ผ๋ฐ˜ํ™”ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์˜ PR์—์„œ ํ‘๋งˆ๋ฒ•์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‚˜๋ฅผ ์œ„ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทœ์น™์ด iptables์— ๋Œ€ํ•œ ํ˜ธ์ถœ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ์‹œ์ž‘ํ•œ ๋‹ค์Œ iptables-restore ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ํŒŒ์ผ์˜ ํ—ค๋” ๋ถ€๋ถ„, ์ผ๋ฐ˜์ ์œผ๋กœ iptables ํ˜ธ์ถœ๋กœ ์ฑ„์›Œ์ง„ ๋ถ€๋ถ„์— ๋ˆ„๋ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์˜ ๊ด€๋ จ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

I0807 11:41:24.560063 8369 iptables.go:327] iptables -N [KUBE-PORTALS-CONTAINER -t nat]๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
I0807 11:41:24.562361 8369 iptables.go:327] running iptables -C [PREROUTING -t nat -m comment --comment handle ClusterIPs; ์ฐธ๊ณ : ์ด๊ฒƒ์€ NodePort ๊ทœ์น™ -j KUBE-PORTALS-CONTAINER ์ด์ „์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
I0807 11:41:24.563469 8369 iptables.go:327] iptables -N [KUBE-PORTALS-HOST -t nat] ์‹คํ–‰ ์ค‘
I0807 11:41:24.565452 8369 iptables.go:327] running iptables -C [OUTPUT -t nat -m comment --comment handle ClusterIPs; ์ฐธ๊ณ : ์ด๊ฒƒ์€ NodePort ๊ทœ์น™ -j KUBE-PORTALS-HOST ์ด์ „์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
I0807 11:41:24.566552 8369 iptables.go:327] iptables -N [KUBE-NODEPORT-CONTAINER -t nat] ์‹คํ–‰ ์ค‘
I0807 11:41:24.568363 8369 iptables.go:327] iptables -C ์‹คํ–‰ ์ค‘ [PREROUTING -t nat -m addrtype --dst-type LOCAL -m comment --comment ํ•ธ๋“ค ์„œ๋น„์Šค NodePorts; ์ฐธ๊ณ : ์ด๊ฒƒ์€ ์ฒด์ธ์˜ ๋งˆ์ง€๋ง‰ ๊ทœ์น™์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. -j KUBE-NODEPORT-CONTAINER]
I0807 11:41:24.569564 8369 iptables.go:327] iptables -N [KUBE-NODEPORT-HOST -t nat] ์‹คํ–‰ ์ค‘
I0807 11:41:24.571458 8369 iptables.go:327] running iptables -C [OUTPUT -t nat -m addrtype --dst-type LOCAL -m comment --comment ํ•ธ๋“ค ์„œ๋น„์Šค NodePorts; ์ฐธ๊ณ : ์ด๊ฒƒ์€ ์ฒด์ธ์˜ ๋งˆ์ง€๋ง‰ ๊ทœ์น™์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. -j KUBE-NODEPORT-HOST]
I0807 11:41:24.573392 8369 iptables.go:327] iptables -C๋ฅผ ์‹คํ–‰ ์ค‘ ]
I0807 11:41:24.574447 8369 proxier.go:349] iptables ๊ทœ์น™์„ ๋™๊ธฐํ™”ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.
I0807 11:41:24.575592 8369 proxier.go:399] ์ฒด์ธ: PREROUTING, ๊ทœ์น™: :PREROUTING ACCEPT [0:0]
I0807 11:41:24.575615 8369 proxier.go:401] ๊ทœ์น™: -A PREROUTING -m comment --comment "ClusterIP๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ : ์ด๊ฒƒ์€ NodePort ๊ทœ์น™ ์•ž์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." -j KUBE-PORTALS-CONTAINER
I0807 11:41:24.575625 8369 proxier.go:401] ๊ทœ์น™: -A PREROUTING -m addrtype --dst-type LOCAL -m comment --comment "์„œ๋น„์Šค NodePorts๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ : ์ด๊ฒƒ์€ ์ฒด์ธ์˜ ๋งˆ์ง€๋ง‰ ๊ทœ์น™์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." -j KUBE-NODEPORT-์ปจํ…Œ์ด๋„ˆ
I0807 11:41:24.575633 8369 proxier.go:399] ์ฒด์ธ: INPUT, ๊ทœ์น™: :INPUT ACCEPT [0:0]
I0807 11:41:24.575646 8369 proxier.go:399] ์ฒด์ธ: OUTPUT, ๊ทœ์น™: :OUTPUT ACCEPT [0:0]
I0807 11:41:24.575658 8369 proxier.go:401] ๊ทœ์น™: -A OUTPUT -m comment --comment "ClusterIP๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ : ์ด๊ฒƒ์€ NodePort ๊ทœ์น™ ์•ž์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." -j KUBE-PORTALS-HOST
I0807 11:41:24.575670 8369 proxier.go:401] ๊ทœ์น™: -A OUTPUT -m addrtype --dst-type LOCAL -m comment --comment "์„œ๋น„์Šค NodePorts๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ : ์ด๊ฒƒ์€ ์ฒด์ธ์˜ ๋งˆ์ง€๋ง‰ ๊ทœ์น™์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." -j KUBE-NODEPORT-ํ˜ธ์ŠคํŠธ
I0807 11:41:24.575683 8369 proxier.go:399] ์ฒด์ธ: ํฌ์ŠคํŠธ๋ผ์šฐํŒ…, ๊ทœ์น™: ํฌ์ŠคํŠธ๋ผ์šฐํŒ… ์ˆ˜๋ฝ [0:0]
I0807 11:41:24.575691 8369 proxier.go:401] ๊ทœ์น™: -A POSTROUTING! -d 10.0.0.0/8 -o eth0 -j ๋งˆ์Šค์ปค๋ ˆ์ด๋“œ
I0807 11:41:24.575699 8369 proxier.go:401] ๊ทœ์น™: -A POSTROUTING -s 10.240.240.78/32 -d 10.240.240.78/32 -m comment --comment "handle -jpod๊ฐ€ self์— ์—ฐ๊ฒฐ๋จ"
I0807 11:41:24.575709 8369 proxier.go:399] ์ฒด์ธ: KUBE-NODEPORT-CONTAINER, ๊ทœ์น™: :KUBE-NODEPORT-CONTAINER - [0:0]
I0807 11:41:24.575720 8369 proxier.go:399] ์ฒด์ธ: KUBE-NODEPORT-HOST, ๊ทœ์น™: :KUBE-NODEPORT-HOST - [0:0]
I0807 11:41:24.575729 8369 proxier.go:399] ์ฒด์ธ: KUBE-PORTALS-CONTAINER, ๊ทœ์น™: :KUBE-PORTALS-CONTAINER - [0:0]
I0807 11:41:24.575740 8369 proxier.go:399] ์ฒด์ธ: KUBE-PORTALS-HOST, ๊ทœ์น™: :KUBE-PORTALS-HOST - [0:0]
I0807 11:41:24.581897 8369 proxier.go:603] ๋™๊ธฐํ™” ๊ทœ์น™: :KUBE-PORTALS-HOST - [0:0]
:KUBE-PORTALS-์ปจํ…Œ์ด๋„ˆ - [0:0]
:KUBE-NODEPORT-ํ˜ธ์ŠคํŠธ - [0:0]
:KUBE-NODEPORT-์ปจํ…Œ์ด๋„ˆ - [0:0]
:KUBE-SVC-VO8JL93ZeRSf8cnsLpl - [0:0]
:KUBE-SVC-L26cB3JYuxdW5TF84ct - [0:0]
:KUBE-SVC-j2SF8q3nUajS8vOx2qL - [0:0]
:KUBE-SVC-shln2urO8W1aBiB2bWJ - [0:0]
:KUBE-SVC-8jQ3IvijvhJ4ppFj3Ui - [0:0]
[... ์Šค๋‹™ ...]

์ž์„ธํ•œ ์ •๋ณด ํ‘œ์‹œ ๋ชจ๋“œ์—์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ์™€ iptable-save๋ฅผ ๋ณ‘ํ•ฉํ•˜๋ฉด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ์ข‹์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@bnprss ๋ณด๊ณ ์„œ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ตœ๊ทผ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•ด ์ผ๋ถ€ ์žฌ์ž‘์„ฑ ์ค‘์— ์ž„์‹œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  iptables-restore "-T table" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋งŽ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํšŒ๊ท€์˜ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ฒŒ ๋˜๋ฉด ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@bnprss ํ…Œ์ด๋ธ” ํ—ค๋”๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ๋‹ค๊ณ  ๋งํ–ˆ๋“ฏ์ด("*nat"๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋ผ์ธ์ด์–ด์•ผ ํ•จ), ์‹ค์ˆ˜๋กœ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฉฐ ์ด๋ฅผ ๋‹ค์‹œ ๋„ฃ์€ ํ›„ ๊ฒ‰๋ณด๊ธฐ์— ๋‹ค๋ฅธ ๋ฒ„๊ทธ ์—†์ด ๋‹ค์‹œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ œ์™ธ: https:// /github.com/BenTheElder/kubernetes/issues/3). ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •์„ ๋ฐ€์–ด ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

์ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทœ์น™์ด ๋กœ๋“œ ์ค‘์ด๊ณ  ๋‚ด๋ถ€์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—๋Š” ์šด์ด ์—†์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€์™€์˜ ํ†ต์‹ ์ด ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ญ. PR๋กœ ์ด๋™ํ•˜์—ฌ ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ๊นŒ์ง€
์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ์ด์ƒ์œผ๋กœ ๋ฐฐํฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ํ…Œ์Šคํ„ฐ๊ฐ€ ์™ธ๋ถ€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
2015๋…„ 8์›” 7์ผ ์˜คํ›„ 1์‹œ 29๋ถ„์— "bnprss" [email protected]์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทœ์น™์ด ๋กœ๋“œ ์ค‘์ด๊ณ  ๋‚ด๋ถ€์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์šด์ด ์—†์Šต๋‹ˆ๋‹ค.
externalloadbalancer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์™ธ๋ถ€์™€์˜ ํ†ต์‹ ์ด ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -128772763
.

๋„ค, ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์œ„ํ•ด ์ถ”๊ฐ€ ๋ฌธ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  PR์— ๋Œ€ํ•œ ์ผ๋ถ€ ๋กœ๊ทธ ๋˜๋Š” ๋ฆฌ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ด์ง€๋งŒ ๋‚ด์ผ ์ด์ „์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž ์žฌ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฑ์—… ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ถ„ ๊ธฐํ˜ธ "-_" ์—†์ด ๊ทœ์น™์˜ ํ† ํฐ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@bnprss , ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.
์„œ๋น„์Šค์— ๋Œ€ํ•ด ์ƒ์„ฑ๋œ ๊ทœ์น™ ์ฒด์ธ์€ ์„œ๋น„์Šค ํฌํŠธ/์—”๋“œํฌ์ธํŠธ์˜ ํ•ด์‹œ์ด๋ฉฐ base64 URL์ด ์ธ์ฝ”๋”ฉ๋˜๊ณ  ์ž˜๋ฆฝ๋‹ˆ๋‹ค. KUBE-SVC-. ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://github.com/GoogleCloudPlatform/kubernetes/pull/9210/files#diff -d51765b83fe795b469e8a86276b12dc9R321
์šฐ๋ฆฌ๋Š” iptables์˜ ๋ฌธ์ž ์ œํ•œ์„ ์ถฉ์กฑํ•˜๋ฉด์„œ๋„ ์—ฌ์ „ํžˆ ๊ฒฐ์ •์ ์ธ ์œ ํšจํ•œ ์ฒด์ธ ์ด๋ฆ„์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๊ฒƒ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์™ธ๋ถ€์—์„œ ๋ณต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ ์‚ฌ์šฉ์„ ์ค‘์ง€ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ "_"๋Š” ์ผ๋ถ€ ์ธ์ฝ”๋”ฉ๋œ ํ•ด์‹œ์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  "-"๋Š” ๋ชจ๋‘ ๊ธฐ์กด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋ก์‹œ์˜ ๊ทœ์น™ ์ด๋ฆ„ ํŒจํ„ด์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํฐ ๋ฌธ์ œ ์—†์ด ๋‹ค๋ฅธ ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚œ ๊ดœ์ฐฎ์•„, ์ด๊ฑด ์ •๋ง ํ™”์žฅํ’ˆ์ด์•ผ! :)
๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ „์— ๋ณธ ๊ฒƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
gce lb ๊ทœ์น™: a07f76b3b2ec311e59e2642010af0479
gce fw ๊ทœ์น™: k8s-fw-a7ecad94f3ba511e59e2642010af0479
gce ๋ผ์šฐํŒ… ๊ทœ์น™: default-route-6973e029b504a0e8
๋…ธ๋“œ๋กœ gce ๋ผ์šฐํŒ…: obfuscated_cluster_node-43506797-2eb2-11e5-9e26-42010af04793

์ด๊ฒƒ์€ ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค:
KUBE-SVC-6ADi2TVfn7mFPvBjC56
๊ทธ๊ฒƒ๋“ค์€ ์žฌ๋ฏธ์žˆ๋‹ค:
KUBE-SVC-zU6ParcQ-UfW_LdRDUc
KUBE-SVC-y--z1xTUpHPT6sgAUCC

๊ทธ๋ž˜, ๋‚˜๋„ ๊ทธ๋“ค์˜ ํŒฌ์ด ์•„๋‹ˆ์•ผ, ์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ ํ•ด์‹œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์„๊ฑฐ์•ผ
๋ถ€ํ˜ธํ™”.

2015๋…„ 8์›” 7์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 2์‹œ 16๋ถ„์— bnprss [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚œ ๊ดœ์ฐฎ์•„, ์ด๊ฑด ์ •๋ง ํ™”์žฅํ’ˆ์ด์•ผ! :)
๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ „์— ๋ณธ ๊ฒƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
gce lb ๊ทœ์น™: a07f76b3b2ec311e59e2642010af0479
gce fw ๊ทœ์น™: k8s-fw-a7ecad94f3ba511e59e2642010af0479
gce ๋ผ์šฐํŒ… ๊ทœ์น™: default-route-6973e029b504a0e8
๋…ธ๋“œ๋กœ gce ๋ผ์šฐํŒ…:
obfuscated_cluster_node-43506797-2eb2-11e5-9e26-42010af04793

์ด๊ฒƒ์€ ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค:
KUBE-SVC-6ADi2TVfn7mFPvBjC56
๊ทธ๊ฒƒ๋“ค์€ ์žฌ๋ฏธ์žˆ๋‹ค:
KUBE-SVC-zU6ParcQ-UfW_LdRDUc
KUBE-SVC-y--z1xTUpHPT6sgAUCC

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -128785914
.

์˜ˆ, SHA์˜ ์ž˜๋ฆฐ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. git์€ docker๋„ ๊ดœ์ฐฎ๊ณ  kube ์—”ํ„ฐํ‹ฐ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ฐธ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฐฉ์‹์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ํ•ด์‹œ base64์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ;)
@thockin ์ด ๊ทธ ์ ์— ๋Œ€ํ•ด ์กฐ์–ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” iptables์˜ ์œ ํšจํ•œ ๋ฌธ์ž์— ๋” ๊ด€์‹ฌ์ด ๋งŽ์•˜๋Š”๋ฐ, ์ข‹์€ ์ฐธ์กฐ๋ฅผ ์ฐพ๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๊ณง ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2015๋…„ 8์›” 7์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 2์‹œ 29๋ถ„์— bnprss [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์˜ˆ, SHA์˜ ์ž˜๋ฆฐ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. git์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฑด, ๋„์ปค๋„, ๊ทธ๋ฆฌ๊ณ  kube์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ฐธ์กฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ํ•ด์‹œ base64์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด
๋•๋‹ค. ;)
@thockin https://github.com/thockin ์ด ๊ทธ ์ ์— ๋Œ€ํ•ด ์กฐ์–ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -128788454
.

@bnprss fyi PR์€ ์ƒ๋‹นํžˆ ๋ถˆ์•ˆ์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ž‘์„ฑ ์ค‘์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” NodePort ๋“ฑ์„ ์ž˜๋ผ๋‚ด๊ณ  ํฌํ„ธ์„ ์ง€์›ํ•˜๋Š” ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๊นจ๋—ํ•œ ๋ฒ„์ „์„ ์–ป์€ ๋‹ค์Œ ์ „์ฒด ํŒจ๋ฆฌํ‹ฐ๋กœ ๋‹ค์‹œ ์ž‘์—…ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹น์žฅ ์‹คํ–‰ํ•˜์ง€๋Š” _ํ•˜์ง€_ ์•Š๊ฒ ์ง€๋งŒ ๊ณง ๋‹ค์‹œ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. PR์„ ๋” ์ž‘์€ ๊ด€๋ จ ๊ฒƒ์œผ๋กœ ์ชผ๊ฐœ์„œ ์ง€๊ธˆ ๋‹น์žฅ iptables-proxy๋กœ ๊นจ๋—ํ•œ ๊ฒƒ์„ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ง‘์—์„œ ๋…ธ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์™„์ „ํžˆ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
ํŒจ๋ฆฌํ‹ฐ์ง€๋งŒ ๋‹จ๊ณ„๋ณ„๋กœ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

2015๋…„ 8์›” 7์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 9์‹œ 35๋ถ„, Benjamin Elder ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

์œ„์˜ ๋Œ“๊ธ€์— ๋Œ€ํ•œ ๋‚ด ๋Œ€๋‹ต๋„ ๊ณง ์ง€์›Œ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

IRC์—์„œ ๋…ผ์˜:

  • ์—ฌ์ „ํžˆ ์นด์šดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ณ„์†ํ•ด์„œ
    util/iptables ํŒจํ‚ค์ง€์˜ ์ƒํƒœ.
  • ์ฒด์ธ ๊ธธ์ด ์ œํ•œ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ์ „ํžˆ ํ•ด์‹ฑ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋งค์šฐ ๊น”๋”ํ•œ ๋‹จ์ˆœํ™”์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ํ›„์— ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
์ข€ ๋” ํ† ๋ก .

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/GoogleCloudPlatform/kubernetes/issues/3760#issuecomment -128912169
.

์ƒํƒœ: "๊ธฐ๋ณธ" ๋กœ์ง์ด ์ฒดํฌ์ธ๋˜๊ณ  ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ๋…ธ๋“œ ํฌํŠธ์—์„œ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์ƒํ•œ ์ผ€์ด์Šค๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด ๋ฉ”๋ชจ:

# Basic node ports:
iptables -t nat -N KUBE-NODEPORTS
iptables -t nat -A PREROUTING -j KUBE-NODEPORTS
iptables -t nat -A OUTPUT -j KUBE-NODEPORTS
iptables -t nat -A KUBE-NODEPORTS -p tcp -m comment --comment "TEST: default/nodeport:p" -m tcp --dport 30241 -j KUBE-SVC-EQKU6GMUKRXBR6NWW53

# To get traffic from node to localhost:nodeport to the service:
echo 1 > /proc/sys/net/ipv4/conf/all/route_localnet
# Mark packets that are destined for services from localhost, then masquerade those
iptables -t nat -I KUBE-SVC-EQKU6GMUKRXBR6NWW53 -s 127.0.0.0/16 -j MARK --set-mark 0x4b000001;
iptables -t nat -A POSTROUTING -m mark --mark 0x4b000001 -j MASQUERADE

# To get traffic from a pod to itself via a service:
for intf in $(ip link list | grep veth | cut -f2 -d:); do brctl hairpin cbr0 $intf on; done
# Mark packets that are destined for each endpoint from the same endpoint, then masquerade those.
# This is hacky, but I don't really know which pods are "local" and I don't really want to right now. (but I will eventually)
iptables -t nat -I KUBE-SEP-HHNEQBOLY57T5MQCFIY -s 10.244.1.6 -j MARK --set-mark 0x4b000001

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ contrib ๋„๊ตฌ์— ๋Œ€ํ•ด ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ง€๊ธˆ๊นŒ์ง€ ๋‚˜๋Š” ๋…ธ๋“œ์—์„œ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋™ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋Œ€๊ธฐ ์‹œ๊ฐ„์€
์ด์— ๋Œ€ํ•œ ์š”์ฒญ์€ kube-proxy ๋ฆฌ์†Œ์Šค ๋กœ๋“œ ๋ฐ ๋คํ”„ ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•ด ์ฐธ์กฐํ•˜์„ธ์š”.
๊ทธ๋ž˜ํ”„ ๋“ฑ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ CSV๋กœ
๊ธˆ์š”์ผ ์ด์ „์— ์™„๋ฃŒ๋˜์–ด ์ง€๊ธˆ kubectl์— ๋” ์ต์ˆ™ํ•ด์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2015๋…„ 8์›” 12์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 8์‹œ 48๋ถ„, Tim Hockin [email protected]
์ผ๋‹ค:

์ƒํƒœ: "๊ธฐ๋ณธ" ๋กœ์ง์ด ์ฒดํฌ์ธ๋˜๊ณ  ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ๋…ธ๋“œ ํฌํŠธ์—์„œ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ด์ƒํ•œ ์ผ€์ด์Šค๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠน๋ณ„ํ•œ ์ทจ๊ธ‰. ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด ๋ฉ”๋ชจ:

๊ธฐ๋ณธ ๋…ธ๋“œ ํฌํŠธ:

iptables -t nat -N KUBE-NODEPORTS
iptables -t nat -A ์‚ฌ์ „ ๋ผ์šฐํŒ… -j KUBE-NODEPORTS
iptables -t nat -A ์ถœ๋ ฅ -j KUBE-NODEPORTS
iptables -t nat -A KUBE-NODEPORTS -p tcp -m comment --comment "ํ…Œ์ŠคํŠธ: ๊ธฐ๋ณธ/ ๋…ธ๋“œํฌํŠธ:p " -m tcp --dport 30241 -j KUBE-SVC-EQKU6GMUKRXBR6NWW53

๋…ธ๋“œ์—์„œ localhost:nodeport ๋กœ์˜ ํŠธ๋ž˜ํ”ฝ์„ ์„œ๋น„์Šค๋กœ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด:

์—์ฝ” 1 > /proc/sys/net/ipv4/conf/all/route_localnet

localhost์˜ ์„œ๋น„์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํŒจํ‚ท์„ ํ‘œ์‹œํ•œ ๋‹ค์Œ ํ•ด๋‹น ํŒจํ‚ท์„ ๊ฐ€์žฅํ•ฉ๋‹ˆ๋‹ค.

iptables -t nat -I KUBE-SVC-EQKU6GMUKRXBR6NWW53 -s 127.0.0.0/16 -j MARK --set-mark 0x4b000001;
iptables -t nat -A POSTROUTING -m ๋งˆํฌ --mark 0x4b000001 -j MASQUERADE

์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํฌ๋“œ์—์„œ ์ž์ฒด๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

for intf in $(ip link list | grep veth | cut -f2 -d:); brctl ๋จธ๋ฆฌํ•€ cbr0 $intf ์ผœ๊ธฐ; ์™„๋ฃŒ

๋™์ผํ•œ ๋์ ์—์„œ ๊ฐ ๋์ ์œผ๋กœ ํ–ฅํ•˜๋Š” ํŒจํ‚ท์„ ํ‘œ์‹œํ•œ ๋‹ค์Œ ๊ฐ€์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ•ดํ‚คํ•˜์ง€๋งŒ ์–ด๋–ค ํฌ๋“œ๊ฐ€ "๋กœ์ปฌ"์ธ์ง€ ์‹ค์ œ๋กœ ์•Œ์ง€ ๋ชปํ•˜๋ฉฐ ์ง€๊ธˆ ๋‹น์žฅ์€ ์ •๋ง๋กœ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ฒฐ๊ตญ)

iptables -t nat -I KUBE-SEP-HHNEQBOLY57T5MQCFIY -s 10.244.1.6 -j MARK --set-mark 0x4b000001

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130492394
.

@BenTheElder ๋ฐฉ๊ธˆ GCE์—์„œ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ƒ์„ธํ•œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ •์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. netperf๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(qperf๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ธก์ •๋„ ์ œ๊ณตํ•จ).

netperf๋Š” ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์„ฑ๋Šฅ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋„์ปค ์ปจํ…Œ์ด๋„ˆ paultiplady/ netserver:ubuntu.2์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ๋ชจ๋‘ ํŒจํ‚ค์ง•

kubectl exec  -t $netserver-pod-1 -- netperf โ€“l 30 -i 10 -I 99,1 -c -j -H $netserver-pod-2-ip -t OMNI --  -T tcp -D -O THROUGHPUT,THROUGHPUT_UNITS,MEAN_LATENCY,MIN_LATENCY,MAX_LATENCY,P50_LATENCY,P90_LATENCY,P99_LATENCY,STDDEV_LATENCY,LOCAL_CPU_UTIL

๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํฌํ•จํ•œ ์ ์ ˆํ•œ ํ†ต๊ณ„ ๋ถ„ํฌ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. docker run --net=host ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ netserver ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ node->pod ํ…Œ์ŠคํŠธ๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ปจํ…Œ์ด๋„ˆ์˜ dockerfile์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋” ๊ฐ„๊ฒฐํ•œ ๊ฒƒ์œผ๋กœ ํ™•์žฅํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋” ๋น ๋ฅธ ํ’€๋ง์„ ์œ„ํ•œ alpinelinux ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ).

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜๊ฒฌ ์—์„œ ์šฐ๋ฆฌ๋Š” ์ผ์ข…์˜ ์„œ๋น„์Šค ์š”์ฒญ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ‘œ์ค€ nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ๋“œ X๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ…Œ์ŠคํŠธ ํฌ๋“œ ์‹œ๊ฐ„์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์น˜๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋…ธ๋“œ Y์—์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ netperf/qperf๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ•ญ์ƒ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@thockin๊ณผ์˜ ์ด์ „ ํ† ๋ก ์— ๋”ฐ๋ผ ๋จผ์ € ํ•ด๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

2015๋…„ 8์›” 13์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 12:02, Paul Tiplady [email protected]
์ผ๋‹ค:

@BenTheElder https://github.com/BenTheElder ๋‚˜๋Š” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ผ์„ํ–ˆ์Šต๋‹ˆ๋‹ค.
GCE์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ • -- ๋‹ค์Œ์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
netperf(qperf๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ธก์ •๋„ ์ œ๊ณตํ•จ).

netperf๋Š” ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์„ฑ๋Šฅ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ํด๋ผ์ด์–ธํŠธ์™€
๋„์ปค ์ปจํ…Œ์ด๋„ˆ paultiplady/ netserver:ubuntu.2 ์˜ ์„œ๋ฒ„
netperf์—๋Š” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์ง€๋งŒ ๋‘ ๊ฐœ๋ฅผ ํšŒ์ „์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋„ท์„œ๋ฒ„ ํฌ๋“œ ๋ฐ ์‹คํ–‰

kubectl exec -t $netserver-pod-1 -- netperf -l 30 -i 10 -I 99,1 -c -j -H $netserver-pod-2-ip -t OMNI -- -T tcp -D -O THROUGHPUT,THROUGHPUT_UNITS,MEAN_LATENCY,MIN_LATENCY,MAX_LATENCY,P50_LATENCY,P90_LATENCY,P99_LATENCY,STDDEV_LATENCY,LOCAL_CPU_UTIL

๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํฌํ•จํ•œ ์ ์ ˆํ•œ ํ†ต๊ณ„ ๋ถ„ํฌ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
docker run --net=host๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ netserver ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ -> ํฌ๋“œ ํ…Œ์ŠคํŠธ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ปจํ…Œ์ด๋„ˆ์˜ dockerfile์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋” ๊ฐ„๊ฒฐํ•œ ๊ฒƒ์œผ๋กœ ํ™•์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(์˜ˆ: alpinelinux ๊ธฐ๋ฐ˜
๋” ๋น ๋ฅธ ๋‹น๊น€์„ ์œ„ํ•œ ์šฉ๊ธฐ).

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130524576
.

๋…ธ๋“œ ํฌํŠธ์™€ ๊ด€๋ จํ•˜์—ฌ: #9210 @Symmetric์—์„œ ์ด ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

ํŠธ๋ž˜ํ”ฝ์ด ํ๋ฅด๋Š” ๊ฒฝ์šฐ:
LB -> node1:nodePort
์„œ๋น„์Šค ํฌ๋“œ๊ฐ€ node2์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ „์ฒด ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
LB -> node1:nodePort -> node2 -> pod:svcPort
srcIP๋Š” ์—ฌ์ „ํžˆ LB์ด๋ฏ€๋กœ ์‘๋‹ต์€
pod -> node2 -> LB
node2๋Š” LB๋กœ ์ง์ ‘ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋ฐ˜ํ™˜ ํŒจํ‚ท์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์†Œ์Šค IP๋ฅผ ๋ณต์›ํ•˜๊ธฐ ์œ„ํ•ด DNAT๋ฅผ ํ•ด์ œํ•  ๊ธฐํšŒ๋ฅผ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(๋…ธ๋“œ 1์—์„œ๋งŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ).

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ง„์งœ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ACK. tcpdump๋Š” src๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ (์˜คํ”„ ๋จธ์‹ ) ํฌ๋“œ IP:port๋กœ DNAT๋˜๋Š” ํŒจํ‚ท์„ ๋ณด์—ฌ์ฃผ์ง€๋งŒ ๋Œ€์ƒ ๋จธ์‹ ์˜ tcpdump๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒจํ‚ท์ด ๋„์ฐฉํ•œ ๊ฒฝ์šฐ์—๋„ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ ์ผํ•œ ํ•ด๊ฒฐ์ฑ…์€ SNAT๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์˜ํ–ฅ์ด ์ ์€ ์†”๋ฃจ์…˜์€ ์˜คํ”„ ๋…ธ๋“œ๋กœ ํ–ฅํ•˜๋Š” LB์˜ SNAT ํŒจํ‚ท _only_ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ a) kube-proxy์— ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์ฝ”๋“œ ๋น„์šฉ์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Œ) ๋ฐ b) ์ •์ฑ…์€ ์–ด์จŒ๋“  SNAT ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ•ญ์ƒ ์™ธ๋ถ€ LB ํŒจํ‚ท์„ SNATํ•˜์—ฌ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ฑ… ์—”์ง„์— ์–ผ๋งˆ๋‚˜ ๋‚˜์œ๊ฐ€?

๊ฒฐ๊ตญ LB๋Š” ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ํ˜ธ์ŠคํŠธ๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋˜‘๋˜‘ํ•ด์ง€๋ฉฐ ํŠธ๋ž˜ํ”ฝ์€ ๋กœ์ปฌ๋กœ ์œ ์ง€๋˜๋ฉฐ ์ด๋Š” ๋ฌด์˜๋ฏธํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. deprecatedPublicIPs ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ๋™์ž‘์„ ์•ฝ๊ฐ„ ์กฐ์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋„ ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋˜‘๊ฐ™์ด ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ชจ๋“  ๊ณต์šฉ IP๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: VM์— 1:1 NAT ์™ธ๋ถ€ IP๊ฐ€ ์žˆ์Œ). ์‰ฌ์šด ๋Œ€๋‹ต - ํ•ญ์ƒ SNAT ๋…ธ๋“œ ํฌํŠธ ํŒจํ‚ท์ž…๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ƒ๊ฐ?

๋‚ด์ผ ๋” ํ…Œ์ŠคํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@BenTheElder netserver ํฌ๋“œ๋ฅผ ์„œ๋น„์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ perf <->์˜ ํŠธ๋ž˜ํ”ฝ์ด
์„œ๋ฒ„๋Š” ์„œ๋น„์Šค VIP๋ฅผ ํ†ตํ•ด ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค
์ƒ˜ํ”Œ๋ง/๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ณ„์‚ฐ ์ง์ ‘...

2015๋…„ 8์›” 12์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 9์‹œ 20๋ถ„, Benjamin Elder ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋Œ“๊ธ€์—์„œ
์šฐ๋ฆฌ๊ฐ€ ์ผ์ข…์˜ ์„œ๋น„์Šค ์š”์ฒญ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ
์ด์ œ ํ‘œ์ค€ nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ๋“œ X๋กœ ์‚ฌ์šฉํ•˜๊ณ 
ํ…Œ์ŠคํŠธ ํฌ๋“œ ์‹œ๊ฐ„์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ณ์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ Y.

ํ•˜์ง€๋งŒ netperf/qperf๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ•ญ์ƒ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ „ ํ† ๋ก ์— ๋”ฐ๋ผ ๋จผ์ € ํ•ด๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
@ํ† ํ‚จ

2015๋…„ 8์›” 13์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 12:02, Paul Tiplady [email protected]
์ผ๋‹ค:

@BenTheElder https://github.com/BenTheElder ๋‚˜๋Š” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ผ์„ํ–ˆ์Šต๋‹ˆ๋‹ค.
GCE์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ • -- ๋‹ค์Œ์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
netperf(qperf๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ธก์ •๋„ ์ œ๊ณตํ•จ).

netperf๋Š” ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์„ฑ๋Šฅ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ํด๋ผ์ด์–ธํŠธ์™€
๋„์ปค ์ปจํ…Œ์ด๋„ˆ paultiplady/ netserver:ubuntu.2 ์˜ ์„œ๋ฒ„
netperf์—๋Š” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์ง€๋งŒ ๋‘ ๊ฐœ๋ฅผ ํšŒ์ „์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋„ท์„œ๋ฒ„ ํฌ๋“œ ๋ฐ ์‹คํ–‰

kubectl exec -t $netserver-pod-1 -- netperf -l 30 -i 10 -I 99,1 -c -j -H
$netserver-pod-2-ip -t OMNI -- -T tcp -D -O
THROUGHPUT,THROUGHPUT_UNITS,MEAN_LATENCY,MIN_LATENCY,MAX_LATENCY,P50_LATENCY,P90_LATENCY,P99_LATENCY,STDDEV_LATENCY,LOCAL_CPU_UTIL

๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ
์ฒ˜๋ฆฌ๋Ÿ‰.
docker run --net=host๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ netserver ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ -> ํฌ๋“œ ํ…Œ์ŠคํŠธ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ปจํ…Œ์ด๋„ˆ์˜ dockerfile์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋” ๊ฐ„๊ฒฐํ•œ ๊ฒƒ์œผ๋กœ ํ™•์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(์˜ˆ: alpinelinux ๊ธฐ๋ฐ˜
๋” ๋น ๋ฅธ ๋‹น๊น€์„ ์œ„ํ•œ ์šฉ๊ธฐ).

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130524576

.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130527558
.

์ง„์‹ค. @thockin ์€ ๊ฒฐ๊ตญ e2e ๋Œ€๊ธฐ ์‹œ๊ฐ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด
์ž˜. ์‹œ๊ฐ„์ด ํ—ˆ๋ฝํ•˜๋Š” ํ•œ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ฉฐ ์šฐ๋ฆฌ๋Š”
์•„๋งˆ๋„ gce ๋Œ€ AWS ๋“ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
2015๋…„ 8์›” 13์ผ ์˜คํ›„ 1์‹œ 47๋ถ„์— "Paul Tiplady" [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

netserver ํฌ๋“œ๋ฅผ ์„œ๋น„์Šค๋กœ ๋งŒ๋“ค์–ด perf <->์˜ ํŠธ๋ž˜ํ”ฝ์ด
์„œ๋ฒ„๋Š” ์„œ๋น„์Šค VIP๋ฅผ ํ†ตํ•ด ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค
์ƒ˜ํ”Œ๋ง/๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ณ„์‚ฐ ์ง์ ‘...

2015๋…„ 8์›” 12์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 9์‹œ 20๋ถ„, Benjamin Elder ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

[์ด ๋Œ“๊ธ€](

https://github.com/kubernetes/kubernetes/pull/9210#issuecomment-130154261)
์šฐ๋ฆฌ๊ฐ€ ์ผ์ข…์˜ ์„œ๋น„์Šค ์š”์ฒญ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ
์ด์ œ ํ‘œ์ค€ nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ๋“œ X๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
~์—
ํ…Œ์ŠคํŠธ ํฌ๋“œ ์‹œ๊ฐ„์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ณ์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ Y.

ํ•˜์ง€๋งŒ netperf/qperf๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ•ญ์ƒ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ „ ํ† ๋ก ์— ๋”ฐ๋ผ ๋จผ์ € ํ•ด๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
@ํ† ํ‚จ

2015๋…„ 8์›” 13์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 12:02, Paul Tiplady < [email protected]

์ผ๋‹ค:

@BenTheElder https://github.com/BenTheElder ๋ฐฉ๊ธˆ ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•ฉ๋ฆฌ์ ์œผ๋กœ
GCE์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ • -- ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
~์—
netperf(qperf๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ธก์ •๋„ ์ œ๊ณตํ•จ).

netperf๋Š” ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์„ฑ๋Šฅ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋‘ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ชจ๋‘ ํŒจํ‚ค์ง•ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ 
๋„์ปค ์ปจํ…Œ์ด๋„ˆ paultiplady/ netserver:ubuntu.2 ์˜ ์„œ๋ฒ„
๊ฑฐ๊ธฐ
netperf์—๋Š” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์ง€๋งŒ ๋‘ ๊ฐœ๋ฅผ ํšŒ์ „์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋„ท์„œ๋ฒ„ ํฌ๋“œ ๋ฐ ์‹คํ–‰

kubectl exec -t $netserver-pod-1 -- netperf -l 30 -i 10 -I 99,1 -c -j
-์‹œ๊ฐ„
$netserver-pod-2-ip -t OMNI -- -T tcp -D -O

THROUGHPUT,THROUGHPUT_UNITS,MEAN_LATENCY,MIN_LATENCY,MAX_LATENCY,P50_LATENCY,P90_LATENCY,P99_LATENCY,STDDEV_LATENCY,LOCAL_CPU_UTIL

๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ
์ฒ˜๋ฆฌ๋Ÿ‰.
docker run --net=host๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ netserver ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ -> ํฌ๋“œ ํ…Œ์ŠคํŠธ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ปจํ…Œ์ด๋„ˆ์˜ dockerfile์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ
๋” ๊ฐ„๊ฒฐํ•œ ๊ฒƒ์œผ๋กœ ํ™•์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(์˜ˆ: alpinelinux ๊ธฐ๋ฐ˜
๋” ๋น ๋ฅธ ๋‹น๊น€์„ ์œ„ํ•œ ์šฉ๊ธฐ).

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<

https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130524576

.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
<
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130527558

.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130776866
.

@Symmetric netperf ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-)

๋‚˜์ค‘์— ์›น ์„œ๋น„์Šค์™€ ๊ฐ™์€ "์‹ค์ œ" ๋กœ๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ธ์ˆ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์–ป์€ ํ›„์—๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋งค์šฐ ์ข‹์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ฒญ์†Œ๊ฐ€ ๋๋‚˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ์ผํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ค์œผ๋‹ˆ ๊ธฐ์ฉ๋‹ˆ๋‹ค.
๊ทธ ๋„๊ตฌ์— ๋Œ€ํ•œ ์˜ต์…˜์ด ์žˆ์ง€๋งŒ ๋‚ด ํ”„๋กœํŒŒ์ผ๋ง ์ž‘์—…์— ๋งค์šฐ ์œ ์šฉํ•œ ๊ฒƒ์œผ๋กœ ์ž…์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ™•์‹คํžˆ iperf๋ณด๋‹ค...

2015๋…„ 8์›” 13์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 2์‹œ 32๋ถ„, Benjamin Elder ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

@Symmetric https://github.com/Symmetric netperf ํ…Œ์ŠคํŠธ๊ฐ€ ์ž‘๋™ ์ค‘์ž…๋‹ˆ๋‹ค
ํ›Œ๋ฅญํ•˜๊ฒŒ. ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-)

๋‚˜์ค‘์— ์›น ์„œ๋น„์Šค์™€ ๊ฐ™์€ "์‹ค์ œ" ๋ถ€ํ•˜์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ธ์ˆ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์–ป์€ ํ›„์—๋Š” ๋งค์šฐ ์ข‹์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ
๋ฉ€๋ฆฌ. ๋‚˜์ค‘์— ์ฒญ์†Œ๊ฐ€ ๋๋‚˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -130850398
.

@thockin LB ํŠธ๋ž˜ํ”ฝ์„ ์œ„ํ•ด SNAT๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํ˜„์žฌ ์ƒ๊ฐ์€ ํฌ๋“œ์˜ ์•ก์„ธ์Šค ์ •์ฑ…์„ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ๊ฐ’์€ '[my namespace]์—์„œ ํ—ˆ์šฉ'์ด๋ฉฐ, ์ด ๊ฒฝ์šฐ LB ํŒจํ‚ท์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • '[์ด๋ฆ„ ๊ณต๊ฐ„ ๋ชฉ๋ก]์—์„œ ํ—ˆ์šฉ' ๋˜๋Š” '[ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ์ด๋ฆ„ ๊ณต๊ฐ„]์—์„œ ํ—ˆ์šฉ', ๋‹ค์‹œ LB ํŒจํ‚ท์€ ํ•ญ์ƒ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • '๋ชจ๋‘์—์„œ ํ—ˆ์šฉ', ์ด ๊ฒฝ์šฐ LB, ๋‹ค๋ฅธ ๋…ธ๋“œ ๋˜๋Š” ์–ด๋””์—์„œ๋“  ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ LB์˜ ์†Œ์Šค IP๋ฅผ ์žƒ๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

LB๊ฐ€ ์„œ๋น„์Šค ํฌ๋“œ์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋…ธ๋“œ์— ๋„๋‹ฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ SNAT๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, LB IP๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋  ๋•Œ LB IP๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋” ์—„๊ฒฉํ•œ ๋ฐฐ์†ก์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

publicIP์™€ ๊ด€๋ จํ•˜์—ฌ nodePort์™€ ๋™์ผํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ LB๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ํ˜ธ์ŠคํŠธ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ SNATํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. nodePort๋ณด๋‹ค ๋” ์‚ฌ์•…ํ•œ ๋ฐฉ๋ฒ•์„ ๋†“์น˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ํ•œ ์œ„์˜ ๋‚ด์šฉ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค ...

์•ˆ์ „ ์กฐ์น˜๋กœ ๋ชจ๋“  ๊ฒƒ์„ MASQUERADE์— ํ”„๋ก์‹œํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์‹ค์ œ๋กœ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋ก์‹œ์— ๋งค์šฐ ๊ฐ€๊น๊ฒŒ ์ž‘๋™). ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ต์ง€ ์•Š๊ณ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ง„๋‹จํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒดํ•˜๋Š” ๋งค์šฐ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(vxlan ์‚ฌ๋ก€์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

-------- ๋ฉ”์‹œ์ง€ d'origine --------
๋“œ : Paul Tiplady [email protected]
๋‚ ์งœ : 2015๋…„ 8์›” 14์ผ 12:50 (GMT+11:00)
ร€ : kubernetes/kubernetes [email protected]
์ฐธ์กฐ : ๋ฏธ์นด์—˜ ํด๋ฃจ ์†Œ [email protected]
Objet : Re: [kubernetes] ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๋Œ€์‹  โ€‹โ€‹ํ”„๋ก์‹œ์— iptables๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
(#3760)

@thockin LB ํŠธ๋ž˜ํ”ฝ์„ ์œ„ํ•ด SNAT๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํ˜„์žฌ ์ƒ๊ฐ์€ ํฌ๋“œ์˜ ์•ก์„ธ์Šค ์ •์ฑ…์„ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์€ '[my namespace]์—์„œ ํ—ˆ์šฉ'์ด๋ฉฐ, ์ด ๊ฒฝ์šฐ LB ํŒจํ‚ท์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
'[์ด๋ฆ„ ๊ณต๊ฐ„ ๋ชฉ๋ก]์—์„œ ํ—ˆ์šฉ' ๋˜๋Š” '[ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ์ด๋ฆ„ ๊ณต๊ฐ„]์—์„œ ํ—ˆ์šฉ', ๋‹ค์‹œ LB ํŒจํ‚ท์€ ํ•ญ์ƒ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
'๋ชจ๋‘์—์„œ ํ—ˆ์šฉ', ์ด ๊ฒฝ์šฐ LB, ๋‹ค๋ฅธ ๋…ธ๋“œ ๋˜๋Š” ์–ด๋””์—์„œ๋“  ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ LB์˜ ์†Œ์Šค IP๋ฅผ ์žƒ๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

LB๊ฐ€ ์„œ๋น„์Šค ํฌ๋“œ์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋…ธ๋“œ์— ๋„๋‹ฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ SNAT๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, LB IP๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋  ๋•Œ LB IP๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋” ์—„๊ฒฉํ•œ ๋ฐฐ์†ก์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

publicIP์™€ ๊ด€๋ จํ•˜์—ฌ nodePort์™€ ๋™์ผํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ LB๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ํ˜ธ์ŠคํŠธ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ SNATํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. nodePort๋ณด๋‹ค ๋” ์‚ฌ์•…ํ•œ ๋ฐฉ๋ฒ•์„ ๋†“์น˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ํ•œ ์œ„์˜ ๋‚ด์šฉ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค ...

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

@MikaelCluseau ๋‚˜์œ ์ƒ๊ฐ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์—ฌ์ „ํžˆ ํ•  ์ผ: ๋จธ๋ฆฌํ•€, e2e ์ˆ˜์ •, ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”

ํŒ€ ์•ˆ๋…•, ๋‹ค์‹œ ์˜ค์ง€ ๋ชปํ•ด ๋ฏธ์•ˆํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฌธ์ œ๊ฐ€ ์ข€ ์žˆ์–ด์„œ ... ๋‹ค์Œ ์ฃผ ํ† ์š”์ผ์— ๋จธ๋ฆฌํ•€์„ ๊ณ ๋ฅผ ๊ฒƒ ๊ฐ™์•„์š”.

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ์˜€์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ณ„ํš์ด์…จ์Šต๋‹ˆ๊นŒ? :)

์˜ˆ, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. e2 ํ…Œ์ŠคํŒ…์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ๋งํ–ˆ๋“ฏ์ด. ๋‚ด๊ฐ€ ๋„์™€์ค„๊ฒŒ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ๋‚˜์—๊ฒŒ ํฐ ๋„์›€์ด ๋˜๋‹ˆ๊นŒ ์ตœ๋Œ€ํ•œ ๋งˆ์Šคํ„ฐํ•˜๋Š”๊ฒŒ ๋‚ซ๊ณ , ๋ฒ„๊ทธ๋ฅผ ์žก๋Š” ๊ฒƒ๋ณด๋‹ค ๋ญ๊ฐ€ ๋‚˜์„๊นŒ? :-) ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ๊ฒƒ์„ ์ž์œ ๋กญ๊ฒŒ ์ œ์•ˆํ•˜์ง€๋งŒ ๋จธ๋ฆฌํ•€์€ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•„์ฃผ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. kubelet์—์„œ ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋ฉฐ ํ™œ์„ฑํ™”ํ•  ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฒ˜์Œ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋จ). ์ผ์ฃผ์ผ์— 0.5~1์ผ ์ผํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

AFAIK๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ถ€๋ถ„์€ v1.1 ์ดํ›„์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ๊ฐ’(ํญ๋ฐœ์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •)์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฉฐ ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๋งˆ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ!

2015๋…„ 9์›” 24์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 11์‹œ 21๋ถ„, Tim Hockin [email protected]
์ผ๋‹ค:

AFAIK๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ถ€๋ถ„์€ ๊ทธ๊ฒƒ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
v1.1 ์ดํ›„์— (ํญ๋ฐœ์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •) ์•ฝ๊ฐ„์˜ ๋งˆ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ์œ„์—.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -142960614
.

v1.1 ์ดํ›„ ์–ผ๋งˆ ํ›„ ์ด๊ฒƒ์€ ๊ทธ๊ฒƒ์— ์•ฝ๊ฐ„์˜ ๋งˆ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์•ผ. ์šฐ๋ฆฌ๋Š” 1.1์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์ •๋ง๋กœ ๊ธฐ๋Œ€ํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค ....
https://github.com/kubernetes/kubernetes/blob/master/docs/roadmap.md

@bgrieder ์—ฌ์ „ํžˆ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IN์ด์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผœ์ ธ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น ํ•˜๋‚˜์˜ ์ฃผ์„์œผ๋กœ ์˜ตํŠธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ(๋ฐ kube-proxy ์žฌ์‹œ์ž‘)

2015๋…„ 9์›” 24์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 8์‹œ 27๋ถ„์— Bruno G. [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

v1.1 ์ดํ›„ ์–ผ๋งˆ ํ›„ ์ด๊ฒƒ์€ ๊ทธ๊ฒƒ์— ์•ฝ๊ฐ„์˜ ๋งˆ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์•ผ. ์šฐ๋ฆฌ๋Š” 1.1์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์ •๋ง๋กœ ๊ธฐ๋Œ€ํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค ....
https://github.com/kubernetes/kubernetes/blob/master/docs/roadmap.md

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -142962932
.

@thockin @bnprss ok ํ•˜์ง€๋งŒ ๋ฒ„์ „ 1.1์€ ์ถœ์‹œ ํ›„ Google Container Engine์—์„œ ์‹คํ–‰๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. '๋…ธ๋“œ๋‹น ๋‹จ์ผ ์ฃผ์„์œผ๋กœ ์„ ํƒ'ํ•˜๋Š” ๋ฐ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์œ ์—ฐ์„ฑ์ด ํ•„์š”ํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ ˆ์ฐจ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ฑฐ๋‚˜ ๋ฌธ์„œ๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

1.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜๋ฉด:

$ for node in $(kubectl get nodes -o name); do kubectl annotate $node net.beta.kubernetes.io/proxy-mode=iptables; done

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ ๋…ธ๋“œ์— SSH๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  kube-proxy๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ฐ ๋…ธ๋“œ๋ฅผ ์žฌ๋ถ€ํŒ…).

์ข€ ๋” ์‹ ์ค‘ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 1~2๋…ธ๋“œ ํ•ด๋ณด๊ณ  ํ•ด๋ณด์„ธ์š” :)

1.1 ๋ฌธ์„œ์— ๋งค์ง ๋ฃจํ”„๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ์•Š๋„๋ก ์ด ๋ฌธ์ œ๋ฅผ "๋ฆด๋ฆฌ์Šค ๋…ธํŠธ"๋กœ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

@RichieEscarez

(๊ทธ๋ƒฅ ํ•œ ์ฃผ ๋™์•ˆ iptables ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!)

@thockin ์ด๊ฒƒ์€ ํ์‡„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด 1.1 ๋งˆ์ผ์Šคํ†ค์—์„œ ์ œ๊ฑฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๊ธฐ๋ณธ ํ™œ์„ฑํ™”๋ฅผ ์œ„ํ•ด 1.2๋กœ ์ด๋™ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž ์žฌ์ ์œผ๋กœ ์–ด๋ฆฌ์„์€ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์‚ฌ๊ณผํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ IP์˜ ๋ณด์กด๊ณผ ๊ด€๋ จํ•˜์—ฌ:

@thockin 9์›” 2์ผ์˜ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ "ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ํŠธ๋ž˜ํ”ฝ๋งŒ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ๋‚ด์šฉ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด 1.2 ์•ŒํŒŒ์—์„œ๋„ ์—ฌ์ „ํžˆ ์‚ฌ์‹ค์ž…๋‹ˆ๊นŒ?

์ƒˆ๋กœ์šด 1.2 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋…ธ๋“œ ์ฃผ์„์„ ์ ์šฉํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ HAProxy๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํฌ๋“œ์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”์ฒญ์˜ ์†Œ์Šค ์ฃผ์†Œ๋กœ 10.244.0.1์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •์„ ๋†“์ณค๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ์•„์ง ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์˜ ๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€.

๊ธฐ๋ณธ๊ฐ’์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์„์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋…ธ๋“œ(net.beta.kubernetes.io/proxy-mode=iptables) ๋ฐ ๋‹ค์‹œ ์‹œ์ž‘
๋Œ€๋ฆฌ. ๊ทธ๋Ÿฌ๋‚˜ ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ IP๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€๋งŒ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
IP.
2015๋…„ 10์›” 23์ผ ์˜คํ›„ 5์‹œ 9๋ถ„์— "Ben Hundley" [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ž ์žฌ์ ์œผ๋กœ ์–ด๋ฆฌ์„์€ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์‚ฌ๊ณผํ•˜์ง€๋งŒ ๋ณด์กด๊ณผ ๊ด€๋ จํ•˜์—ฌ
ํด๋ผ์ด์–ธํŠธ IP:

@thockin https://github.com/thockin 9์›” 2์ผ ๋‹ค๋ฅธ ํ˜ธ์—์„œ ๋ดค์Šต๋‹ˆ๋‹ค
"ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ํŠธ๋ž˜ํ”ฝ๋งŒ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค" -- ์—ฌ์ „ํžˆ
1.2 ์•ŒํŒŒ์— ๋Œ€ํ•ด ์‚ฌ์‹ค์ž…๋‹ˆ๊นŒ?

์ƒˆ๋กœ์šด 1.2 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋…ธ๋“œ ์ฃผ์„์„ ์ ์šฉํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ 10.244.0.1์„ ๋ชจ๋“  ์š”์ฒญ์— โ€‹โ€‹๋Œ€ํ•œ ์†Œ์Šค ์ฃผ์†Œ๋กœ ๋ด…๋‹ˆ๋‹ค.
HAProxy๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํฌ๋“œ.

์ด ์‹œ์ ์—์„œ ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋†“์ณค๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์•„์ง ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์š”์ฒญ์„ ํ•˜๋Š” ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์˜ ๊ณต์šฉ IP ์ฃผ์†Œ๋ฅผ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -150725513
.

์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ DNAT + kube-proxy๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŒ…์œผ๋กœ ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋น„์Šค ๋„คํŠธ์›Œํฌ๊ฐ€ 10.42.0.0/16์ด๊ณ  IP 10.10.1.1์— ๊ณ ๊ฐ€์šฉ์„ฑ kube-proxy๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ iptable ๊ทœ์น™์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-A PREROUTING -i public -p tcp -m tcp --dport 25 -j DNAT --to-destination 10.42.12.34

๋ฐ ๋‹ค์Œ ๊ฒฝ๋กœ:

10.42.0.0/16 via 10.10.1.1 dev edge 

๊ทธ๋Ÿฌ๋ฉด ๋’ค์— ์žˆ๋Š” ํฌ๋“œ๊ฐ€ ์‹ค์ œ IP๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Oct 24 02:41:39 email-0yr7n mail.info postfix/smtpd[469]: connect from zed.yyy.ru.[94.102.51.96]

๋ฌผ๋ก  ํŒจํ‚ท์˜ ๋ฐ˜ํ™˜ ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ด DNAT๊ฐ€ ์˜คํ”„๋จธ์‹  ๋ฐฑ์—”๋“œ์— ์—ฐ๊ฒฐ๋˜๋ฉด
SNAT. ์ด๊ฒƒ์ด ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

2015๋…„ 10์›” 23์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 8์‹œ 12๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ DNAT๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
kube-proxy๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŒ…. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋น„์Šค ๋„คํŠธ์›Œํฌ๊ฐ€
10.42.0.0/16์ด๊ณ  IP์— ๊ณ ๊ฐ€์šฉ์„ฑ kube-proxy๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
10.10.1.1์—์„œ ๋‹ค์Œ iptable ๊ทœ์น™์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-A PREROUTING -i public -p tcp -m tcp --dport 25 -j DNAT --to-destination 10.42.12.34

๋ฐ ๋‹ค์Œ ๊ฒฝ๋กœ:

10.10.1.1 dev edge๋ฅผ ํ†ตํ•œ 10.42.0.0/16

๊ทธ๋Ÿฌ๋ฉด ๋’ค์— ์žˆ๋Š” ํฌ๋“œ๊ฐ€ ์‹ค์ œ IP๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

10์›” 24์ผ 02:41:39 ์ด๋ฉ”์ผ-0yr7n mail.info postfix/smtpd[469]: zed.yyy.ru.[94.102.51.96]์—์„œ ์—ฐ๊ฒฐ

๋ฌผ๋ก  ํŒจํ‚ท์˜ ๋ฐ˜ํ™˜ ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -150747217
.

ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์–ด๋–ค ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? :-) ํŒจํ‚ท์ด ์˜ฌ๋ฐ”๋ฅธ conntrack ๊ทœ์น™์„ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ†ตํ•ด conntrack ์ƒํƒœ๋ฅผ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋‹ฌ์„ฑํ•˜๋ ค๋Š” ๊ฒƒ์„ ์•ฝ๊ฐ„ ์žƒ์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ iptables ํ”„๋ก์‹œ๊ฐ€ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ์‹์€ ํŒจํ‚ท
๋…ธ๋“œ์— ๋„์ฐฉํ•˜๋ฉด ๋กœ์ปฌ์—์„œ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Œ์„ ๊ฐ์ง€ํ•˜๊ณ  ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
SNAT, ๋ฐฑ์—”๋“œ ์„ ํƒ, SNAT๊ฐ€ ์žˆ๋Š” ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌ, ๋ฐฑ์—”๋“œ ์‘๋‹ต
์šฐ๋ฆฌ๋Š” SNAT๋ฅผ ํ•ด์ œํ•˜๊ณ  DNAT๋ฅผ ํ•ด์ œํ•˜๊ณ  ์™ธ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

2015๋…„ 10์›” 23์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 9์‹œ 32๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์–ด๋–ค ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? :-) ๋‚˜๋Š” ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒจํ‚ท์€ ์˜ฌ๋ฐ”๋ฅธ conntrack ๊ทœ์น™์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋‹ค
ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ†ตํ•ด conntrack ์ƒํƒœ๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -150753147
.

์•„, ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. SNAT๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  kube-proxy์— ๋™์ผํ•œ conntrack ๋ชฉ๋ก์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณ ๊ฐ์—๊ฒŒ ์‘๋‹ตํ•  ๋•Œ ๋ชจ๋“  kube-proxy๊ฐ€ DNAT๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„  ๋ชจ์–‘์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด HA๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ณต์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

[client] ----- [proxy in HA] ------ [node1]
                           `------- [node2]

๊ทธ๋Ÿฌ๋‚˜ ์‚ผ๊ฐํ˜• ๋ชจ์–‘์˜ ๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค๋ฉด ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[client] ----- [proxy1] ------ [node1]
       `------ [proxy2] ------ [node2]

๊ท€์—ฌ์šธํ…๋ฐ ๋ฏธ์นœ๋“ฏ์ด ๋ณต์žกํ•ด

2015๋…„ 10์›” 25์ผ ์ผ์š”์ผ ์˜คํ›„ 11:20, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

์•„, ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. SNAT๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ์—
๋ชจ๋“  kube-proxy๋Š” ๋™์ผํ•œ conntrack ๋ชฉ๋ก์„ ๊ฐ€์ง€๋ฉฐ, ๊ทธ ์ค‘ ์–ด๋Š ๊ฒƒ์ด๋“  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณ ๊ฐ์—๊ฒŒ ์‘๋‹ตํ•  ๋•Œ DNAT๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด HA๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ณต์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„  ๋ชจ์–‘์˜ ๊ตฌ์กฐ:

[ํด๋ผ์ด์–ธํŠธ] ----- [HA์˜ ํ”„๋ก์‹œ] ------ [๋…ธ๋“œ1]
`--------- [๋…ธ๋“œ2]

๊ทธ๋Ÿฌ๋‚˜ ์‚ผ๊ฐํ˜• ๋ชจ์–‘์˜ ๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค๋ฉด ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[ํด๋ผ์ด์–ธํŠธ] ----- [ํ”„๋ก์‹œ1] ------ [๋…ธ๋“œ1]
`------ [ํ”„๋ก์‹œ2] ------ [๋…ธ๋“œ2]

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -151037663
.

๋‚ด๊ฐ€ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•(์ ์ ˆํ•œ ์กฐ์‚ฌ๋ฅผ ํ•˜๊ธฐ ์ „์— ๋ฌป๊ณ  ์‹ถ์ง€ ์•Š์ง€๋งŒ ์„œ๋ธŒ์ ฏ์ด ์ด์ œ ์—ด๋ ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์—...)์€ ์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” "๋น„๋Œ€์นญ ๋‹ค์ค‘ ๊ฒฝ๋กœ ๋ผ์šฐํŒ…"์ž…๋‹ˆ๋‹ค. http:// conntrack-tools.netfilter.org/manual.html#sync-aa . ๊ทธ๋ฆฌ๊ณ  ๋„ค, ์ •๋ง ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒƒ์€...

  1. proxy1์€ iptables ํ›„ํฌ๋ฅผ ํ†ตํ•ด ์ƒˆ ์—ฐ๊ฒฐ์„ ์ˆ˜์‹ ํ•˜๊ณ (์–ด๋””์„ ๊ฐ€ ๋ณธ ์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ํ•ด๋‹น LB๋Š” ์ด๋ฅผ proxy2์˜ ๋…ธ๋“œ์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. proxy1์€ "setup conntrack entry for {src-ip}:{src-port} -> {pod-ip}:{pod-port}"์™€ ๊ฐ™์€ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  3. proxy2๋Š” ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  conntrack ํ•ญ๋ชฉ์„ ์„ค์ •ํ•˜๊ณ  ์ด๋ฅผ proxy1์— ACKํ•ฉ๋‹ˆ๋‹ค.
  4. proxy1์€ ํŒจํ‚ท์ด DNAT ๊ทœ์น™์„ ํ†ต๊ณผํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” proxy1์—๋„ conntrack ํ•ญ๋ชฉ์„ ๋„ฃ์Œ).
  5. ํฌ๋“œ๊ฐ€ ์‘๋‹ตํ•˜๋ฉด ์ด์— ๋”ฐ๋ผ proxy2์˜ ํ˜ธ์ŠคํŠธ๊ฐ€ DNAT๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  6. ํด๋ผ์ด์–ธํŠธ๊ฐ€ proxy1์„ ํ†ตํ•ด ์ด ํ๋ฆ„์—์„œ ๋‹ค๋ฅธ ํŒจํ‚ท์„ ๋ณด๋‚ผ ๋•Œ conntrack ํ•ญ๋ชฉ๋„ ์˜ฌ๋ฐ”๋ฅธ DNAT๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์ƒˆ ์—ฐ๊ฒฐ๋‹น 2๊ฐœ์˜ ํŒจํ‚ท์ด๊ณ  un-SNAT + ์ถ”๊ฐ€ ๋ผ์šฐํŒ…์„ ํ”ผํ•จ์œผ๋กœ์จ ์‹ ์†ํ•˜๊ฒŒ ์ƒํ™˜๋ฉ๋‹ˆ๋‹ค(๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŒจํ‚ท์ด proxy1์„ ํ†ตํ•ด ๋˜๋Œ์•„๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—).

๋‚˜๋Š” ๋„คํŠธ์›Œํฌ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋„ˆ๋ฌด ๋งŽ์ด ๊ฐ€์ • ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” NodePort ์„œ๋น„์Šค๋ณ„๋กœ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด INPUT ์ฒด์ธ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ทœ์น™์„ ๊ฐ„๋‹จํ•œ ALLOW IP / DROP ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

iptables -A INPUT -s $WHITELISTED_IP -p tcp --dport $CONTAINER_PORT -j ACCEPT
iptables -A INPUT -p tcp --dport $CONTAINER_PORT -j DROP

์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ๊ตฌ์ƒํ•œ ๊ฒƒ์€ NodePort ์„œ๋น„์Šค์—์„œ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์„์€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” IP๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ทœ์น™์ด ์ ์šฉ๋  ๋•Œ๊นŒ์ง€ ์กฐ๊ธˆ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์„œ๋น„์Šค ์ฃผ์„์—์„œ ๋ฏธ๋‹ˆ์–ธ์˜ INPUT ์ฒด์ธ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊ฐ ๋ฏธ๋‹ˆ์–ธ์— ๋Œ€ํ•œ ๋ฏธ์„ธํ•œ ํฌ๋ก  ์ž‘์—…์„ ์ƒ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ฏธ์ณค์–ด?

@thockin ์€ ๋‚˜๋ณด๋‹ค ๋” ๋‚˜์€ ๊ฒฌํ•ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ์€ ์ง๊ต์ ์ด๋ฉฐ ์‹œ์Šคํ…œ์ด๋‚˜ ๋„คํŠธ์›Œํฌ/ํ”„๋ก์‹œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋”ฐ๋กœ ๋ณด๊ด€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Kubernetes๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ etcd๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ‚ค์— ๊ทœ์น™ ์„ธํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  etcdctl watch/exec๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

# while true; do etcdctl watch "/iptables/$(hostname)" && etcdctl get /iptables/$(hostname) |iptables-restore --noflush; done &
# iptables -F my-filter
# iptables -nvL my-filter
Chain my-filter (0 references)
 pkts bytes target     prot opt in     out     source               destination      
# ~nwrk/go/bin/etcdctl set /iptables/$(hostname) >/dev/null <<EOF
*filter
:my-filter -
-A my-filter -j ACCEPT -s 1.2.3.4 -p tcp --dport 80
-A my-filter -j DROP -p tcp --dport 80
COMMIT
EOF
# iptables -nvL my-filter
Chain my-filter (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       1.2.3.4              0.0.0.0/0            tcp dpt:80
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š” #14505

2015๋…„ 10์›” 26์ผ ์›”์š”์ผ ์˜ค์ „ 8์‹œ 53๋ถ„, Ben Hundley [email protected]
์ผ๋‹ค:

์ œ ๊ฒฝ์šฐ์—๋Š” NodePort ์„œ๋น„์Šค๋ณ„๋กœ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ๊ทœ์น™์— ๊ฐ„๋‹จํ•œ ALLOW IP / DROP์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
INPUT ์ฒด์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

iptables -A INPUT -s $WHITELISTED_IP -p tcp --dport $CONTAINER_PORT -j ACCEPT
iptables -A ์ž…๋ ฅ -p tcp --dport $CONTAINER_PORT -j DROP

์ด ๊ทœ์น™์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ๊ตฌ์ƒํ–ˆ๋˜ ๊ฒƒ์€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
NodePort ์„œ๋น„์Šค. ์ฃผ์„์€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” IP๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ทœ์น™์ด ์ ์šฉ๋  ๋•Œ๊นŒ์ง€ ์กฐ๊ธˆ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž ์‹œ ์ƒ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ ๋ฏธ๋‹ˆ์–ธ์— ๋Œ€ํ•œ cron ์ž‘์—…์„ ํ†ตํ•ด ๋ฏธ๋‹ˆ์–ธ์˜ INPUT ์—…๋ฐ์ดํŠธ
๋ชจ๋“  ์„œ๋น„์Šค ์ฃผ์„์—์„œ ์ฒด์ธ.

์—ฌ๊ธฐ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ฏธ์ณค์–ด?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -151181267
.

์ด๊ฒƒ์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ๋ณด์•ˆ ๊ทธ๋ฃน์ด ์—ฐ๊ฒฐ๋œ ์ดˆ๊ธฐ ์ ‘๊ทผ ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค. AWS์—์„œ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋‹น ๋ฆฌ์Šค๋„ˆ ํ•œ๋„์— ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋„๋‹ฌํ–ˆ๊ณ , ๋‹จ์ผ kube ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ SG์™€ ์—ฌ๋Ÿฌ ELB์— ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ๋ถ„์‚ฐ์‹œํ‚ค๋ ค๋Š” ํ„ธ์ด ๋งŽ์€ ๋กœ์ง์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค.

๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ์šฐ๋ฆฌ๋Š” iptables๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ๊ฐ€์ž…ํ•˜์…จ๋‹ค๋ฉด ์š”์•ฝํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Œ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ์ด ๋ฌธ์ œ์— ๋ณ‘ํ•ฉ๋˜์—ˆ์ง€๋งŒ ์ œ์•ˆ๋œ(๋ฐ ๊ตฌํ˜„๋œ) ์†”๋ฃจ์…˜์œผ๋กœ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ์˜ IP์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์•„.

@shaylev2 ํ˜„์žฌ ํด๋ผ์šฐ๋“œ LB๋ฅผ ํ†ตํ•ด nodePort๋กœ ์ˆ˜์‹  ๊ฑฐ๋ถ€ํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์–ป๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ LB๊ฐ€ ๋”ฐ๋ผ์žก์œผ๋ฉด ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํ‚น์ด ์„ค์ •๋˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, iptables ๊ทœ์น™์ด OVS ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ OpenShift์—์„œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒจํ‚ท์€ ์„œ๋น„์Šค ๋์ ์œผ๋กœ ์ด๋™ํ•˜๋Š” DNAT'๋ฅผ ๋ฐ›์ง€๋งŒ ์†Œ์Šค IP๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์ด๋ฏ€๋กœ ์‘๋‹ต์ด OVS ๋‚ด์— ์œ ์ง€๋˜๋ฏ€๋กœ iptables์— ๋‹ค์‹œ ๋„๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ DNAT'๊ฐ€ ๋˜๋Œ๋ ค์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ ํฌ๋“œ๋Š” ํŒจํ‚ท์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ํŒจํ‚ท์„ ์™„์ „ํžˆ ๊ฐ€์žฅํ•˜์—ฌ ๋‚˜๊ฐ€๋Š” ๋„์ค‘์— OVS์—์„œ ๋‹ค์‹œ ๋ฐ”์šด์Šค๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

OVS์—๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ VIP ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹น์‹ ์€ ๊ทธ๋ƒฅ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
kube-proxy(์˜คํ”ˆ์ฝ˜ํŠธ๋ ˆ์ผ ์ฐธ์กฐ)

2015๋…„ 11์›” 20์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 7:09, Dan Winship [email protected]
์ผ๋‹ค:

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํ‚น์ด ์„ค์ •๋˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค
iptables ๊ทœ์น™์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ OpenShift์—์„œ ๋ฐ”๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
OVS ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ์—์„œ. ๋”ฐ๋ผ์„œ ํŒจํ‚ท์€ ์„œ๋น„์Šค์— ๋“ค์–ด๊ฐ€๋Š” DNAT๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
๋์ ์ด์ง€๋งŒ ์†Œ์Šค IP๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์ด๋ฏ€๋กœ ์‘๋‹ต์€
OVS ๋‚ด์— ๋จธ๋ฌด๋ฅด๋ฏ€๋กœ iptables๋ฅผ ๋‹ค์‹œ ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ DNAT'ing์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋Œ€๋กœ ๋˜์–ด ํด๋ผ์ด์–ธํŠธ ํฌ๋“œ๊ฐ€ ํŒจํ‚ท์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์—์„œ
์ˆœ๊ฐ„, ์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ํŒจํ‚ท์„ ์™„์ „ํžˆ ๊ฐ€์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋์ ์œผ๋กœ ์ด๋™ํ•˜์—ฌ OVS์—์„œ ๋‹ค์‹œ ํŠ€์–ด ๋‚˜์˜ค๋„๋ก
๋‚˜๊ฐ€๋Š” ๊ธธ. (์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -158426296
.

์šฐ๋ฆฌ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ OVS ๋‚ด์—์„œ ์ˆœ์ˆ˜ iptables-proxying๊ณผ ์™„์ „ํžˆ ๋™๋“ฑํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ, ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” OVS conntrack ์ง€์›์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•„์ง ์˜์กดํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์ตœ์‹  ์ปค๋„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์•„๋งˆ๋„ ์žฅ๊ธฐ์ ์ธ ๊ณ„ํš์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(ํ˜„์žฌ๋กœ์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์˜ค๋Š” ์•Œ๋ ค์ง„ ์„œ๋น„์Šค ๋์ ๊ณผ ์ผ์น˜ํ•˜๋Š” ์†Œ์Šค IP+ํฌํŠธ๊ฐ€ ์žˆ๋Š” ํŒจํ‚ท์— ๋Œ€ํ•ด OVS์—์„œ ๋ถˆํ•„์š”ํ•œ ์ถ”๊ฐ€ ํ™‰์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋…ธ๋“œ๊ฐ€ DNAT๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. , ๊ทธ๋Ÿฐ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ ํฌ๋“œ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค์‹œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” OVS๋กœ ๋‹ค์‹œ ๋ฐ”์šด์Šคํ•ฉ๋‹ˆ๋‹ค.)

์„œ๋น„์Šค VIP ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”์ƒํ™”๋ผ๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฝ์šฐ).

2015๋…„ 11์›” 23์ผ ์›”์š”์ผ ์˜ค์ „ 6์‹œ 54๋ถ„, Dan Winship [email protected]
์ผ๋‹ค:

์šฐ๋ฆฌ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.
pure-iptables-proxying์€ ์™„์ „ํžˆ OVS ๋‚ด๋ถ€์—์„œ ์ˆ˜ํ–‰๋˜์ง€๋งŒ OVS conntrack์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์˜์กดํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์ตœ์‹  ์ปค๋„์ด ํ•„์š”ํ•œ ์ง€์›
์•„์ง. ๊ทธ๊ฒƒ์€ ์•„๋งˆ๋„ ์žฅ๊ธฐ์ ์ธ ๊ณ„ํš์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์ง€๊ธˆ์€ ๋ฌด๋ฃŒ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์•Œ๋ ค์ง„ ์„œ๋น„์Šค์™€ ์ผ์น˜ํ•˜๋Š” ์†Œ์Šค IP+ํฌํŠธ๊ฐ€ ์žˆ๋Š” ํŒจํ‚ท์— ๋Œ€ํ•ด OVS์—์„œ ํ™‰ ์•„์›ƒ
์ปจํ…Œ์ด๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์˜ค๋Š” ๋์ ; ๊ทธ๋Ÿฌ๋ฉด ๋…ธ๋“œ๋Š”
์•„๋งˆ๋„ DNAT๋ฅผ ํ•ด์ œํ•œ ๋‹ค์Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” OVS๋กœ ๋‹ค์‹œ ๋ฐ”์šด์Šคํ•ฉ๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ ํฌ๋“œ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค์‹œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.)

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -158959014
.

iptables/nftables๊ฐ€ TCP ๋ฐ UDP ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ชจ๋‘ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ IPVS https://github.com/kubernetes/kubernetes/issues/17470 ์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ œ์ž‘๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ์ ํ•ฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (์ฝ๊ธฐ: k8s ํŒ€์„ ์œ„ํ•œ ๋œ ์ง€์†์ ์ธ ๋ณ€๊ฒฝ/์œ ์ง€ ๊ด€๋ฆฌ), ๋” ํ’๋ถ€ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๊ฑฐ์˜ ๋ผ์ธ ์†๋„์˜ ์†๋„๋กœ ์•ˆ์ •์„ฑ์ด ์ž…์ฆ๋˜์—ˆ์œผ๋ฉฐ, amd๋Š” ๊ทœ์น™์„ ์กฐ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋œ golang ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@thockin , ๊ธฐํƒ€ https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -150743158 ์— ๋”ฐ๋ผ ์ฃผ์„์„ ๋‹ฌ์•˜์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ IP๋Š” ์—ฌ์ „ํžˆ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ์•ฑ์—์„œ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. .

์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ์ฆ‰, ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด ์„ค์ •์—๋Š” ์™ธ๋ถ€ LB๊ฐ€ ์—†๊ณ  ์„œ๋น„์Šค๊ฐ€ ๋…ธ๋“œ ํฌํŠธ๋กœ ๋…ธ์ถœ๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ผ๋ฐ˜ TCP(http/Websocket ์•„๋‹˜) ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@ashishvyas ์‹คํ–‰ ์ค‘์ธ kube-proxy ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

v1.1.3์„ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -143280584 ๋ฐ https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -150743158์˜ ์ง€์นจ์„ ๋”ฐ๋ฅด๋˜ ์ด๋ผ๋Š” ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  net.beta.kubernetes.io/proxy-mode , net.experimental.kubernetes.io/proxy-mode ๋ผ๋Š” ์ฃผ์„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

for node in $(kubectl get nodes -o name); do
  kubectl annotate $node net.experimental.kubernetes.io/proxy-mode=iptables;
done

'Found Experimental annotation' ๋ฐ 'Annotation ํ—ˆ์šฉ iptables ํ”„๋ก์‹œ'์™€ ๊ฐ™์€ kube-proxy ์‹œ์ž‘ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋กœ๊ทธ ๋ฌธ์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/kubernetes/kubernetes/commit/da9a9a94d804c5bfdf3cc86ee76a2bc1a2742d16์ด ๋งŒ๋“  ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๋Š” 1.1.4์ด๋ฏ€๋กœ net.beta.kubernetes.io/proxy-mode ๊ฐ€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ์ผ์„ ์ฒ˜์Œ ๊ฒช๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด ํด๋ผ์ด์–ธํŠธ IP๊ฐ€ ํ†ต๊ณผํ•  ๋•Œ ์†์‹ค๋ฉ๋‹ˆ๋‹ค.
๋…ธ๋“œ ํฌํŠธ. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋งค์šฐ ๋งˆ์Œ์— ๋“ ๋‹ค
์ด ๋ฌธ์ œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•,
DNS-RR๋กœ)

2016๋…„ 1์›” 13์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 10์‹œ 25๋ถ„, Mike Danese [email protected]
์ผ๋‹ค:

#3760(๋Œ“๊ธ€)์˜ ์ง€์นจ์„ ๋”ฐ๋ฅด์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -143280584
๋ฐ #3760(๋Œ“๊ธ€)
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -150743158
๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฆ„์ด ์ง€์ •๋œ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ 
net.beta.kubernetes.io/proxy-mode, ๋ช…๋ช…๋œ ์ฃผ์„ ์‚ฌ์šฉ
net.experimental.kubernetes.io/proxy-mode.

$(kubectl get nodes -o name)์˜ ๋…ธ๋“œ์— ๋Œ€ํ•ด; ~ํ•˜๋‹ค
kubectl ์ฃผ์„ $node net.experimental.kubernetes.io/proxy-mode=iptables;
์™„๋ฃŒ

kube-proxy ์‹œ์ž‘์ด ์‹œ์ž‘๋  ๋•Œ ๋กœ๊ทธ ๋ฌธ์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
'์‹คํ—˜์  ์ฃผ์„ ๋ฐœ๊ฒฌ' ๋ฐ '์ฃผ์„์—์„œ iptables ํ”„๋ก์‹œ ํ—ˆ์šฉ'๊ณผ ๊ฐ™์€

da9a9a9์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค
https://github.com/kubernetes/kubernetes/commit/da9a9a94d804c5bfdf3cc86ee76a2bc1a2742d16
1.1.4๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ์ผ์„ ์ฒ˜์Œ ๊ฒช๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -171387997
.

@thockin , ์ผ์‹œ์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ง€๊ธˆ ๋‹น์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์ €์™€ ์ด ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ž์„ธํ•œ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ํ˜„์žฌ๋กœ์„œ๋Š” ์‹ค์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋‹ค์Œ์œผ๋กœ ๊ท€๊ฒฐ๋œ๋‹ค.
๊ฐ kube-proxy๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ๋ฐฑ์—”๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค.
์›๋ž˜ ํด๋ผ์ด์–ธํŠธ IP๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๋ฉด ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ถ„๋ช…ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ง์ ‘ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

"์ˆ˜์ •"์€ _only_ ์„œ๋น„์Šค S์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ๋‹ค์Œ ์œ„์น˜์— ์žˆ๋Š” ๋…ธ๋“œ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
S _and_์— ๋Œ€ํ•ด ์ตœ์†Œ 1๊ฐœ์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ์ „์†กํ•˜๋Š”์ง€
๊ฐ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฑ์—”๋“œ. ๊ทธ๋Ÿฌ๋ฉด Kube-proxy๊ฐ€ ๋กœ์ปฌ ๋ฐฑ์—”๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…์ ์ ์œผ๋กœ.

2๊ฐœ์˜ ๋…ธ๋“œ์™€ 3๊ฐœ์˜ ๋ฐฑ์—”๋“œ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ 2๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.
๋ฐฑ์—”๋“œ. ์–ด๋–ค ๊ฒฝ๋กœ์˜ ํŠธ๋ž˜ํ”ฝ์ด๋“  ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— 2๋ฐฐ๋งŒํผ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„์ง ๊ทธ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์ด๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์ผ์ข…์˜ ์ถ”์ธก์ด๊ณ 
๋”ฐ๋ผ์„œ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค.

2016๋…„ 1์›” 13์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 12์‹œ 17๋ถ„, Ashish Vyas [email protected]
์ผ๋‹ค:

@thockin https://github.com/thockin , ์ผ์‹œ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์ง€๊ธˆ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
์ด ์Šค๋ ˆ๋“œ์˜ ๋‚˜์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ž์„ธํ•œ ๋‹จ๊ณ„๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -171420567
.

@mikedanese ,

$ sudo docker pull gcr.io/google_containers/ hyperkube:v1.1.4
์ €์žฅ์†Œ gcr.io/google_containers/hyperkube ๊ฐ€์ ธ์˜ค๊ธฐ
gcr.io/google_containers/hyperkube ์ €์žฅ์†Œ์—์„œ ํƒœ๊ทธ v1.1.4๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
$ sudo docker pull gcr.io/google_containers/ hyperkube:v1.1.3
v1.1.3: google_containers/hyperkube์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
๋‹ค์ด์ œ์ŠคํŠธ: sha256:004dde049951a4004d99e12846e1fc7274fdc5855752d50288e3be4748778ca2
์ƒํƒœ: gcr.io/google_containers/ hyperkube:v1.1.3์˜ ์ด๋ฏธ์ง€๊ฐ€ ์ตœ์‹  ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

@thockin ๊ธด ์‘๋‹ต์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ๋‹ค๋ฃจ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ๋ฐฐ๊ฒฝ ์ง€์‹์œผ๋กœ ์šฐ๋ฆฌ์˜ ์ฃผ์š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋งค์šฐ ๊ณ ์„ฑ๋Šฅ์˜ ์Šค๋งˆํŠธ DNS ํ”Œ๋žซํผ(์ฆ‰, UDP๊ฐ€ ํ•„์š”ํ•˜๊ณ  ํฌ๋“œ๋‹น ์ตœ์†Œ 100,000๊ฐœ ์ด์ƒ์˜ ์š”์ฒญ/์ดˆ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ)๊ณผ ํด๋ผ์ด์–ธํŠธ์˜ ์‹ค์ œ ๋ชจ์Šต์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” SNI ํ”„๋ก์‹œ์˜ ์ง€์› ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. IP ์ฃผ์†Œ(์ด๊ฒƒ์€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ์‡ผ ์Šคํ† ํผ์ž…๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋„คํŠธ์›Œํ‚น ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ๋‹จ์ผ ๋„คํŠธ์›Œํฌ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์œผ๋ฉฐ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ด์œ (์„ฑ๋Šฅ/์•ˆ์ •์„ฑ/์œ ์—ฐ์„ฑ/๋ชฉ์  ๋นŒ๋“œ SLB) ๋•Œ๋ฌธ์— IPVS๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. , ํ•˜์ง€๋งŒ ๊ฐ™์€ ์ค„์„ ๋”ฐ๋ผ iptables๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•จ๊ป˜ ํ•ดํ‚นํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” vxlan(๋น ๋ฅด๊ณ , ์‰ฝ๊ณ , ์‚ฌ์ดํŠธ ๊ฐ„ ์ž‘๋™)์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ OVS๊ฐ€ ์žˆ๋Š” GRE/VXLAN ๋˜๋Š” ํ‘œ์ค€ ๋ ˆ์ด์–ด 2 ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํ‚น์—์„œ๋„ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ L2 ๋„คํŠธ์›Œํฌ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •).

์žฅ์•  ์กฐ์น˜ ์†๋„ ์š”๊ตฌ ์‚ฌํ•ญ ๋˜๋Š” ํŠน์ • ์œ ํ˜•์˜ ์„œ๋น„์Šค์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ ์• ๋‹ˆ์บ์ŠคํŠธ์™€ DNS๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ๋“ค์–ด์˜ค๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋ฏ€๋กœ ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ์ด ์ƒ๋‹นํžˆ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์ง€๋งŒ ์ง€์ ํ•œ ๋Œ€๋กœ ๋ฌธ์ œ๋Š” ํฌ๋“œ ์œ„์น˜์— ๊ด€๊ณ„์—†์ด ํฌ๋“œ ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์ด ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ํšจ๊ณผ์ ์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ๋ชจ๋ธ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‹œ๋„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ VIP์˜ 2 ๋ ˆ์ด์–ด์˜€์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋Š” ์™ธ๋ถ€ VIP(์„œ๋น„์Šค๋‹น 1๊ฐœ)(๋…ธ๋“œ์˜ ํ•ด๋‹น ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํฌ๋“œ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ) ๋ฐ ๋…ธ๋“œ ๋‚ด์—์„œ ๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๋‚ด๋ถ€ VIP(ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์—์„œ ์‹คํ–‰)(์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๋“œ์— ๊ณ ๋ฅด๊ฒŒ). ์ด ๋ชจ๋ธ์˜ ํ•œ๊ณ„๋Š” ์™ธ๋ถ€ VIP๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž์ฒด ๋ฌผ๋ฆฌ์  ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. DSR ๋ชจ๋“œ(์ง์ ‘ ์„œ๋ฒ„ ๋ฐ˜ํ™˜) ๋ชจ๋“œ์—์„œ IPVS์˜ ์ข‹์€ ์ ์€ ๋ฐ˜ํ™˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ณผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ํŠธ๋ž˜ํ”ฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Consumer >> (over L3) >> External VIP node >> (1) >> Internal VIP node >> (2) >> Container >> (any which way you want) >> Consumer

(1) ์™ธ๋ถ€ VIP๊ฐ€ ์žˆ๋Š” ํ˜ธ์ŠคํŠธ์˜ IPVS(DSR ๋ชจ๋“œ)๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ผ _node_๋ฅผ ์„ ํƒํ•˜๊ณ (IPVS ์šฉ์–ด๋กœ "์‹ค์ œ ์„œ๋ฒ„") ํŒจํ‚ท์˜ DST MAC ์ฃผ์†Œ๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, IP ํŒจํ‚ท์€ k8s ๋…ธ๋“œ). ๋…ธ๋“œ์—์„œ ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํฌ๋“œ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋…ธ๋“œ ๊ฐ„์— ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
(2) k8s ๋…ธ๋“œ์˜ IPVS(DSR ๋ชจ๋“œ์—์„œ๋„)๋Š” ํฌ๋“œ ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•ฉ๋‹ˆ๋‹ค(๋…ธ๋“œ์— ๋Œ€ํ•œ veth๋ฅผ ํ†ตํ•ด). ์ปจํ…Œ์ด๋„ˆ(TCP ๋ฐ UDP)์˜ ์‘๋‹ต์€ ์„œ๋น„์Šค ์†Œ๋น„์ž์—๊ฒŒ ์ง์ ‘ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋ธ์˜ ์žฅ์ ์€ ์‹คํ–‰์ด ์ •๋ง ๊ฐ„๋‹จํ•˜๊ณ  ๊ทœ์น™ ์ง‘ํ•ฉ์ด ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์˜ ๋‹จ์ ์€ ์™ธ๋ถ€ VIP๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์„œ๋น„์Šค ์š”์ฒญ(์‘๋‹ต ์ œ์™ธ)์„ ์ง‘์ค‘ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "shared-nothing"์„ ์ข‹์•„ํ•˜๋ฏ€๋กœ ๋ฒ„์ „ 2๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ชจ๋ธ์€ ์ด์ œ ๋” ์Šค๋งˆํŠธํ•œ IPVS ๋ฐ iptables ๊ตฌ์„ฑ์ด ํฌํ•จ๋œ VIP์˜ ๋‹จ์ผ ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.

Consumer >> Any node/local node >> (1) >> Container >> (any which way you want) >> Consumer
๋˜๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Consumer >> Any node/local node >> (1) >> Remote Node >> (2) >> Container >> (any which way you want) >> Consumer

(1) ํŠธ๋ž˜ํ”ฝ์ด ๊ธฐ๋ณธ VIP์— ๋„๋‹ฌํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ํฌ๋“œ์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋ฉ๋‹ˆ๋‹ค.
(2) ํŠธ๋ž˜ํ”ฝ์ด ๋ณด์กฐ VIP์— ๋„๋‹ฌํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์€ ๋ชจ๋“  ๋กœ์ปฌ ํฌ๋“œ์—์„œ๋งŒ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ณด์กฐ VIP๋Š” ๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ(FWMARK VIP)์—์„œ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ FWMARK=1234๋กœ ํ‘œ์‹œํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ•์ œ๋กœ ๋‹ค๋ฅธ ๊ทœ์น™ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฃจํ”„๊ฐ€ ๋ฐฉ์ง€๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ VIP์—๋Š” ๋กœ์ปฌ ํฌ๋“œ ๋ฐ ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ์›๊ฒฉ ํ˜ธ์ŠคํŠธ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค(๊ฐ€์ค‘์น˜๋Š” ๊ฐ ๋กœ์ปฌ ํฌ๋“œ์— ๋Œ€ํ•ด 100์ด๊ณ  100 * ์›๊ฒฉ ๋…ธ๋“œ์— ๋Œ€ํ•ด ํฌ๋“œ ์ˆ˜). ์˜ˆ๋ฅผ ๋“ค์–ด 3๊ฐœ์˜ ํฌ๋“œ๊ฐ€ nodeA์—์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ณ  2๊ฐœ์˜ ํฌ๋“œ๊ฐ€ nodeB์—์„œ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ nodeA์˜ ๊ทœ์น™ ์ง‘ํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP service.ip.address:0 rr persistent 360
-> pod1.on.nodeA.ip:80 Route 100 0 0
-> pod2.on.nodeA.ip:80 Route 100 0 0
-> pod2.on.nodeA.ip:80 Route 100 0 0
-> interfaceip.of.nodeB:80 Route 200 0 0
FWM 1234 rr
-> pod1.on.nodeA.ip:80 Route 100 0 0
-> pod2.on.nodeA.ip:80 Route 100 0 0
-> pod3.on.nodeA.ip:80 Route 100 0 0

๊ทธ๋Ÿฌ๋‚˜ nodeB์—์„œ IPVS ๊ตฌ์„ฑ์€ nodeA์— 2๊ฐœ์˜ ๋กœ์ปฌ ํฌ๋“œ์™€ 3๊ฐœ์˜ ์›๊ฒฉ ํฌ๋“œ๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP service.ip.address:0 rr persistent 360
-> pod1.on.nodeB.ip:80 Route 100 0 0
-> pod2.on.nodeB.ip:80 Route 100 0 0
-> interfaceip.of.nodeA:80 Route 300 0 0
FWM 1234 rr
-> pod1.on.nodeB.ip:80 Route 100 0 0
-> pod2.on.nodeB.ip:80 Route 100 0 0

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ FWMARK๋ฅผ ์ „ํ™˜ํ•˜๊ณ  iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ veth+ ์ธํ„ฐํŽ˜์ด์Šค(์™€์ผ๋“œ์นด๋“œ ์ผ์น˜)์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ FWMARKํ•˜๊ณ  FWMARK ์ผ์น˜๊ฐ€ ๋กœ์ปฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์—๋งŒ ์‚ฌ์šฉ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๊ด€๋ จ๋œ NAT๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ํฌ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ํ™˜๊ฒฝ์˜ SVC_XXX_YYY IP๋ฅผ ๋ฃจํ”„๋ฐฑ ๋˜๋Š” ๋”๋ฏธ ์ธํ„ฐํŽ˜์ด์Šค์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜์ง€๋งŒ IPVS VIP๋„ DNAT๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ .

์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ์š”์ฒญ ์ฒ˜๋ฆฌ/๋ผ์šฐํŒ…์„ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฐ€์žฅ ์ง์ ‘์ ์ธ ๋„คํŠธ์›Œํ‚น์ด๋ฏ€๋กœ ํ›จ์”ฌ ๋” ์ž˜ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ ์€ IPVS ๊ทœ์น™์„ ์ƒ์„ฑํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€์ ์ธ ์˜๋ฆฌํ•จ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ (golang) ๋ฐ๋ชฌ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์žˆ๊ณ  ๊ด€์‹ฌ์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ์ด๋ฅผ ์œ„ํ•œ k8s ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋Šฆ๊ฒŒ ๋‹ค๋ฃจ์—ˆ๊ณ  ์•„๋งˆ๋„ ์ „์ฒด ํ”์ ์„ ์ถฉ๋ถ„ํžˆ ์ž์„ธํžˆ ์ฝ์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ: ์œ„์˜ @qoke ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ์ดํ•ด

@lxpollitt ๋งž์Šต๋‹ˆ๋‹ค. IPVS๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์†Œ์Šค IP๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด IPVS ๊ตฌ์„ฑ์ด kube-proxy์—์„œ ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ชจ๋“  ๋„คํŠธ์›Œํ‚น์„ ์ง์ ‘ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค IP๋ฅผ ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋Œ์•„์˜ค๋Š” ๊ธธ์— ํŠธ๋ž˜ํ”ฝ์„ "un-nat"ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‘ ๊ฐœ์˜ IPtables DNAT ๋ ˆ์ด์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ธก๋ฉด์—์„œ, ๋‚ด ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” flannel(vxlan ๋ชจ๋“œ์—์„œ)๊ณผ ํ•จ๊ป˜, ๋‚ด ๋ผ์šฐํŒ… ๋…ธ๋“œ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ kube-proxy(iptables ๋ชจ๋“œ์—์„œ, ๋งค์Šค์ปค๋ ˆ์ด๋”ฉ์ด ์•„๋‹˜) + flannel์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์š”์ฒญ์€ ์„œ๋น„์Šค IP๋กœ DNATed๋œ ๋‹ค์Œ kube-proxy์™€ ํ•จ๊ป˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ/ํ™œ์„ฑ ๋ผ์šฐํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ด ์„ค์ •์„ ํ†ตํ•ด ์™ธ๋ถ€ IP๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FWIW์—์„œ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ "๊ฐ€์žฅ ์ง์ ‘์ ์ธ ๋„คํŠธ์›Œํ‚น"์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

kube-proxy๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ํŠนํžˆ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ด๋ฏธ kube-proxy ์™ธ๋ถ€์— ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ฐ์•ˆํ•  ๋•Œ ๊ณ ๊ฐ iptables-rules ๊ด€๋ฆฌ์ž๋ฅผ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์„๊นŒ์š”? kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ๋ณด๊ณ  ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ์˜ ํฌ๋“œ์—๋งŒ DNAT VIP์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์„ค์ •ํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ kube-proxy๋ฅผ ์œ„ํ•œ ๋ชจ๋“œ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด... ์Œ.. ์ด๋ฆ„์„ ์ž˜ ๋ชฐ๋ผ์š”... --proxy-mode=iptables-to-node-pods-only.

์ž์„ธํ•œ ์ž‘์„ฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ํฅ๋ฏธ๋กญ๊ณ  ์ €๋Š”
์˜ค๋Š˜ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ์ข‹์€ ์‹œ๊ฐ„. ๋ถˆํ–‰ํžˆ๋„ ๋‹น์‹ ์€
์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ํŠน์ •ํ•œ ์˜์—ญ์œผ๋กœ ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.
GCE์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ๋Š” ๋ผ์šฐํŒ…๋˜๊ธฐ ๋•Œ๋ฌธ์— IPVS ๊ฒŒ์ดํŠธ์›จ์ด ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
ํšŒ๋กœ๋ง. ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ž‘๋™ํ•˜๋”๋ผ๋„ ํฌํŠธ ์žฌ๋งคํ•‘์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ,
Kubernetes๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์„œ๋น„์Šค ํฌํŠธ == ๋Œ€์ƒ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
ํฌํŠธ.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํ•ต์‹ฌ ๊ณผ์ œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜
์ผ๋ฐ˜์ ์œผ๋กœ ์ƒํ™ฉ์˜ ์ข…๋ฅ˜ ๋˜๋Š” ๋‹น์‹ ์˜ ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜ ๋‹น์‹ ์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌ
์Šค์Šค๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ipvs encap ๋ชจ๋“œ๋กœ ๋ญ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ์˜ ์„ฑ๋Šฅ์  ์˜๋ฏธ๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

2016๋…„ 1์›” 14์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 3์‹œ 37๋ถ„์— qoke [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@thockin https://github.com/thockin ๊ธด ์‘๋‹ต์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ๋‹ค๋ฃจ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.
๋‘ ๊ฐ€์ง€ ๋ชจ๋‘์— ์ง๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ๋ฐฐ๊ฒฝ์ง€์‹์œผ๋กœ ์šฐ๋ฆฌ์˜ ์ฃผ์š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋งค์šฐ ๊ณ ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค.
์Šค๋งˆํŠธ DNS ํ”Œ๋žซํผ(์ฆ‰, UDP๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ตœ์†Œ 100k+
ํฌ๋“œ๋‹น ์š”์ฒญ/์ดˆ) ๋ฐ SNI ํ”„๋ก์‹œ์˜ ์ง€์› ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
ํด๋ผ์ด์–ธํŠธ์˜ ์‹ค์ œ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š”
์šฐ๋ฆฌ๋ฅผ). ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋‹จ์ผ ๋„คํŠธ์›Œํฌ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ด์œ ๋กœ IPVS๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
(์„ฑ๋Šฅ/์•ˆ์ •์„ฑ/์œ ์—ฐ์„ฑ/์šฉ๋„ ๋นŒ๋“œ SLB)
์•„๋งˆ๋„ ์ด ๊ฐ™์€ ์ค„์„ ๋”ฐ๋ผ iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ๊ป˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ดํ‚นํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋„. ์šฐ๋ฆฌ๋Š” vxlan(๋น ๋ฅด๊ณ , ์‰ฝ๊ณ , ์‚ฌ์ดํŠธ ๊ฐ„ ์ž‘๋™)์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘
๋ฐฉ๋ฒ•์€ OVS ๋˜๋Š” ํ‘œ์ค€ ๋ ˆ์ด์–ด 2๊ฐ€ ์žˆ๋Š” GRE/VXLAN์—์„œ๋„ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํ‚น๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ L2 ๋„คํŠธ์›Œํฌ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •).

์• ๋‹ˆ์บ์ŠคํŠธ์™€
์žฅ์•  ์กฐ์น˜ ์†๋„ ์š”๊ตฌ ์‚ฌํ•ญ ๋˜๋Š” ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•˜๋Š” ํ•ญ๋ชฉ์— ๋”ฐ๋ผ DNS
ํŠน์ • ์œ ํ˜•์˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ
๋…ธ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ์ด ์žˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ์ง€์ ํ•˜์‹  ๋Œ€๋กœ
๊ทธ๋Ÿฌ๋ฉด ํŒŸ(Pod) ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์ด ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋ฉ๋‹ˆ๋‹ค.
ํฌ๋“œ ์œ„์น˜. ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ
์„œ๋น„์Šค๋Š” ํšจ๊ณผ์ ์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ๋ชจ๋ธ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‹œ๋„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ VIP์˜ 2 ๋ ˆ์ด์–ด์˜€์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ VIP(๋‹น 1๋ช…
๋…ธ๋“œ ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋Š” ์„œ๋น„์Šค)
๋…ธ๋“œ์˜ ํ•ด๋‹น ์„œ๋น„์Šค), ๋‚ด๋ถ€ VIP(๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š”)
๋…ธ๋“œ ๋‚ด์—์„œ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ(์ผ๋ฐ˜์ ์œผ๋กœ ๊ท ๋“ฑํ•˜๊ฒŒ
ํฌ๋“œ์— ๊ฑธ์ณ). ์ด ๋ชจ๋ธ์˜ ํ•œ๊ณ„๋Š” ์™ธ๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ๊ฐ€
๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž์ฒด์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ VIP
๋ฌผ๋ฆฌ์  ๋…ธ๋“œ. DSR ๋ชจ๋“œ์—์„œ IPVS์˜ ์ข‹์€ ์ (์ง์ ‘ ์„œ๋ฒ„ ๋ฐ˜ํ™˜)
๋ชจ๋“œ๋Š” ๋ฐ˜ํ™˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ณผ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์†Œ๋น„์ž >> (L3 ์ด์ƒ) >> ์™ธ๋ถ€ VIP ๋…ธ๋“œ >> (1) >> ๋‚ด๋ถ€ VIP ๋…ธ๋“œ >>
(2) >> ์ปจํ…Œ์ด๋„ˆ >> (์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ) >> ์†Œ๋น„์ž

(1) ์™ธ๋ถ€ VIP๊ฐ€ ์žˆ๋Š” ํ˜ธ์ŠคํŠธ์˜ IPVS(DSR ๋ชจ๋“œ)๋Š” _node_๋ฅผ ์„ ํƒํ•˜์—ฌ
(IPVS ์šฉ์–ด๋กœ "์‹ค์ œ ์„œ๋ฒ„")๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด๊ณ  DST MAC๋งŒ ๋ณ€๊ฒฝ
ํŒจํ‚ท์˜ ์ฃผ์†Œ(์ฆ‰, IP ํŒจํ‚ท์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  k8s ๋…ธ๋“œ์— ๋„์ฐฉํ•จ). ๊ทธ๊ฒƒ์€๋กœ๋“œ
ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํฌ๋“œ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋…ธ๋“œ ๊ฐ„์— ๊ท ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋…ธ๋“œ.
(2) k8s ๋…ธ๋“œ์˜ IPVS(DSR ๋ชจ๋“œ์—์„œ๋„)๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
ํฌ๋“œ(๋…ธ๋“œ์— ๋Œ€ํ•œ veth๋ฅผ ํ†ตํ•ด). ์ปจํ…Œ์ด๋„ˆ(TCP ๋ฐ UDP)์˜ ์‘๋‹ต ์ด๋™
์„œ๋น„์Šค ์†Œ๋น„์ž์—๊ฒŒ ์ง์ ‘ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์ด ๋ชจ๋ธ์˜ ์žฅ์ ์€ ์‹œ์ž‘ํ•˜๊ธฐ๊ฐ€ ์ •๋ง ๊ฐ„๋‹จํ•˜๊ณ 
๊ทœ์น™ ์„ธํŠธ๋Š” ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์˜ ๋‹จ์ ์€
๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์„œ๋น„์Šค ์š”์ฒญ(ํšŒ์‹  ์ œ์™ธ)์„ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.
์™ธ๋ถ€ VIP๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "๋น„๊ณต์œ "๋ฅผ ์ข‹์•„ํ•˜๋ฏ€๋กœ,
๋ฒ„์ „ 2 ์ž…๋ ฅ:

๋‘ ๋ฒˆ์งธ ๋ชจ๋ธ์€ ์ด์ œ ์žฌ๋ฏธ ์žˆ๋Š” ๋‹จ์ผ ๊ณ„์ธต์˜ VIP์ž…๋‹ˆ๋‹ค.
๋” ๋˜‘๋˜‘ํ•œ IPVS ๋ฐ iptables ๊ตฌ์„ฑ.

์†Œ๋น„์ž >> ๋ชจ๋“  ๋…ธ๋“œ/๋กœ์ปฌ ๋…ธ๋“œ >> (1) >> ์ปจํ…Œ์ด๋„ˆ >> (์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“ 
์›) >> ์†Œ๋น„์ž
๋˜๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์†Œ๋น„์ž >> ๋ชจ๋“  ๋…ธ๋“œ/๋กœ์ปฌ ๋…ธ๋“œ >> (1) >> ์›๊ฒฉ ๋…ธ๋“œ >> (2) >> ์ปจํ…Œ์ด๋„ˆ

(์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ) >> ์†Œ๋น„์ž

(1) ํŠธ๋ž˜ํ”ฝ์ด ๊ธฐ๋ณธ VIP์— ๋„๋‹ฌํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์ด ๋ชจ๋“  ํฌ๋“œ์— ๊ฑธ์ณ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋ฉ๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ.
(2) ํŠธ๋ž˜ํ”ฝ์ด 2์ฐจ VIP์— ๋„๋‹ฌํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์€ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•ด์„œ๋งŒ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋ฉ๋‹ˆ๋‹ค.
๋กœ์ปฌ ํฌ๋“œ. ์ด ๋ณด์กฐ VIP๋Š” ๋‹ค์Œ์—์„œ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ(FWMARK VIP). ์šฐ๋ฆฌ๋Š” ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
FWMARK=1234์ธ ๋ชจ๋“  ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ•์ œ๋กœ ์ด๋™
๋…ธ๋“œ ๊ฐ„์˜ ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋‹ค๋ฅธ ๊ทœ์น™ ์ง‘ํ•ฉ์œผ๋กœ

๊ธฐ๋ณธ VIP์—๋Š” ๋กœ์ปฌ ํฌ๋“œ ๋ฐ ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ์›๊ฒฉ ํ˜ธ์ŠคํŠธ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค(
๊ฐ€์ค‘์น˜๋Š” ๊ฐ ๋กœ์ปฌ ํฌ๋“œ์— ๋Œ€ํ•ด 100์ด๊ณ  100 * ํฌ๋“œ ์ˆ˜์ž…๋‹ˆ๋‹ค.
์›๊ฒฉ ๋…ธ๋“œ). ์˜ˆ๋ฅผ ๋“ค์–ด 3๊ฐœ์˜ ํฌ๋“œ๊ฐ€ nodeA์—์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ณ 
nodeB์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋‘ ๊ฐœ์˜ ํฌ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ nodeA์˜ ๊ทœ์น™ ์ง‘ํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ:

Prot LocalAddress:ํฌํŠธ ์Šค์ผ€์ค„๋Ÿฌ ํ”Œ๋ž˜๊ทธ
-> RemoteAddress: ํฌํŠธ ํฌ์›Œ๋“œ ๊ฐ€์ค‘์น˜ ActiveConn InActConn
TCP service.ip.address:0 rr ์˜๊ตฌ 360
-> pod1.on.nodeA.ip:80 ๊ฒฝ๋กœ 100 0 0
-> pod2.on.nodeA.ip:80 ๊ฒฝ๋กœ 100 0 0
-> pod2.on.nodeA.ip:80 ๊ฒฝ๋กœ 100 0 0
-> interfaceip.of.nodeB:80 ๊ฒฝ๋กœ 200 0 0
FWM 1234 rr
-> pod1.on.nodeA.ip:80 ๊ฒฝ๋กœ 100 0 0
-> pod2.on.nodeA.ip:80 ๊ฒฝ๋กœ 100 0 0
-> pod3.on.nodeA.ip:80 ๊ฒฝ๋กœ 100 0 0

๊ทธ๋Ÿฌ๋‚˜ nodeB์—์„œ๋Š” IPVS ๊ตฌ์„ฑ์ด ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
nodeA์—๋Š” 2๊ฐœ์˜ ๋กœ์ปฌ ํฌ๋“œ์™€ 3๊ฐœ์˜ ์›๊ฒฉ ํฌ๋“œ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

Prot LocalAddress: ํฌํŠธ ์Šค์ผ€์ค„๋Ÿฌ ํ”Œ๋ž˜๊ทธ
-> RemoteAddress: ํฌํŠธ ํฌ์›Œ๋“œ ๊ฐ€์ค‘์น˜ ActiveConn InActConn
TCP service.ip.address:0 rr ์˜๊ตฌ 360
-> pod1.on.nodeB.ip:80 ๊ฒฝ๋กœ 100 0 0
-> pod2.on.nodeB.ip:80 ๊ฒฝ๋กœ 100 0 0
-> interfaceip.of.nodeA:80 ๋ฃจํŠธ 300 0 0
FWM 1234 rr
-> pod1.on.nodeB.ip:80 ๊ฒฝ๋กœ 100 0 0
-> pod2.on.nodeB.ip:80 ๊ฒฝ๋กœ 100 0 0

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ FWMARK๋ฅผ ์ „ํ™˜ํ•˜๊ณ  iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ
veth+ ์ธํ„ฐํŽ˜์ด์Šค(์™€์ผ๋“œ์นด๋“œ ์ผ์น˜)์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ FWMARKํ•˜๊ณ  FWMARK
๋กœ์ปฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” match.

์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฐ€์žฅ ์ง์ ‘์ ์ธ ๋„คํŠธ์›Œํ‚น์ž…๋‹ˆ๋‹ค.
์š”์ฒญ ์ฒ˜๋ฆฌ/๋ผ์šฐํŒ…์ด ํ›จ์”ฌ ๋” ์ž˜ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ ์€ ์ข€
IPVS ๊ทœ์น™์„ ์ƒ์„ฑํ•  ๋•Œ ์ถ”๊ฐ€ ์Šค๋งˆํŠธ.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -171619663
.

iptables-to-node-pods-only ๋ชจ๋“œ๋ฅผ ์‹œ๋„ํ•ด ๋ณด๋ฉด ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋งŽ์€ ํŒŒ๋ฌธ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ๊ท ํ˜•์˜ ๊ฐ€๋Šฅ์„ฑ์€ ๋งค์šฐ ํ˜„์‹ค์ ์ด๋ฉฐ
์ตœ์†Œํ•œ ์„œ๋น„์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ.

2016๋…„ 1์›” 14์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 3์‹œ 59๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

๋‚ด ์ธก๋ฉด์—์„œ ๋‚ด ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” flannel(vxlan ๋ชจ๋“œ์—์„œ)์„ ์‚ฌ์šฉํ•˜์—ฌ
kube-proxy(iptables ๋ชจ๋“œ ๋ฐ masquerading ์•„๋‹˜) + flannel ์‚ฌ์šฉ
๋‚ด ๋ผ์šฐํŒ… ๋…ธ๋“œ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์™ธ๋ถ€ ์š”์ฒญ์€ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด DNATed๋ฉ๋‹ˆ๋‹ค.
kube-proxy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด IP๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š”ํ•˜์ง€ ์•Š์•˜๋‹ค
ํ™œ์„ฑ/ํ™œ์„ฑ ๋ผ์šฐํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์™„๋ฃŒํ–ˆ์ง€๋งŒ ์ด ์„ค์ •์„ ํ†ตํ•ด
์™ธ๋ถ€ IP. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ FWIW์—์„œ ์–ธ๊ธ‰ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด "๊ฐ€์žฅ
์ง์ ‘ ๋„คํŠธ์›Œํ‚น".

kube-proxy๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ์ง€๋งŒ
ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ํŠนํžˆ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด
์ด๋ฏธ kube-proxy ์™ธ๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ์„ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ๋ณด๊ณ  ์„ค์ •ํ•˜๋Š” iptables-rules ๊ด€๋ฆฌ์ž
์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ์˜ ํฌ๋“œ์—๋งŒ DNAT VIP์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋Ÿด์ˆ˜์žˆ๋‹ค
kube-proxy์˜ ๋ชจ๋“œ์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ... ๊ธ€์Ž„์š”.
์ด๋ฆ„... --proxy-mode=iptables-to-node-pods-only.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -171821603
.

@thockin ์˜ˆ๋ฅผ ๋“ค์–ด 2๊ฐœ์˜ ๋ณต์ œ๋ณธ์ด ๋™์ผํ•œ ๋…ธ๋“œ์— ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๊ณ  ์™ธ๋ถ€ LB ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์•„๋งˆ๋„ "๋‹จ์ผ ๋งˆ์Šคํ„ฐ" ๋ชจ๋“œ์— ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— "์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ" ์‚ฌ๋ก€๋ฅผ kube-proxy์˜ ๋ฒ”์œ„ ๋ฐ–์— ๋‘˜ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ kube-proxy ๋ชจ๋“œ "iptables-to-node-pods-only"๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ 2๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‚ด์ผ์€ kube-proxy์˜ "iptables-to-node-pods-only" ๋ชจ๋“œ์™€ ์„œ๋น„์Šค๋‹น ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๋กœ Linux ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” contrib/ip-route-elb์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. , ์ฃผ์–ด์ง„ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๋…ธ๋“œ๊ฐ€ ๋ณด์œ ํ•œ ์—”๋“œํฌ์ธํŠธ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ€์ค‘์น˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@thockin ์˜ˆ๋ฅผ ๋“ค์–ด 2๊ฐœ์˜ ๋ณต์ œ๋ณธ์ด ๋™์ผํ•œ ๋…ธ๋“œ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ "ํ”„๋กœ๊ทธ๋žจ
์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์™€ ์™ธ๋ถ€ LB๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ kube-proxy์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ"
ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์•„๋งˆ๋„ "๋‹จ์ผ ๋งˆ์Šคํ„ฐ" ๋ชจ๋“œ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ kube-proxy ๋ชจ๋“œ "iptables-to-node-
pods-only'๋Š” 2๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

"๋กœ์ปฌ ํฌ๋“œ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ๋งŒ"์€ ํ”„๋กœ์„ธ์Šค์˜ 2๋‹จ๊ณ„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1 ๋‹จ๊ณ„
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋งŒ ๋ณด๋‚ด๋„๋ก ์„œ๋น„์Šค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ์„œ๋น„์Šค์— ๋Œ€ํ•ด 1๊ฐœ ์ด์ƒ์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์—. ๊ทธ ๋‹จ๊ณ„
๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ, ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ๊ตญ ์ด๊ฒƒ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๋ž˜๋„.

์™„๋ฃŒ๋˜๋ฉด ๋…ธ๋“œ ํฌํŠธ๊ฐ€ ๋กœ์ปฌ์„ ์„ ํ˜ธํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•˜๋ฉด ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด ๋‹จ๊ณ„์—์„œ๋Š” ํ›จ์”ฌ ๋” ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ƒ๊ฐ.. ๊ทธ๊ฒŒ _ํ•ญ์ƒ_์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? (์ฆ‰, ๋ฆฌ๋ชจ์ฝ˜์„ ์„ ํƒํ•˜์ง€
๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ) ๋˜๋Š” ํ™•๋ฅ ์ ์ž…๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š”ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ
๋™์ผํ•œ ๋…ธ๋“œ ํฌํŠธ๋ฅผ ํ†ตํ•ด(๋‹ค๋ฅธ ๋…ธ๋“œ๋Š” ๋งค์šฐ
๋‹ค๋ฅธ ๋™์ž‘) ๋˜๋Š” ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ ํฌํŠธ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๊นŒ?
์ด ๋…ธ๋“œ์— 1๊ฐœ ์ด์ƒ์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ? ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ
๋ถˆ๊ท ํ˜• ๋ฌธ์ œ?

๋‚˜๋Š” ๋‚ด์ผ kube-proxy์—์„œ "iptables-to-node-pods-only" ๋ชจ๋“œ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ ์ ˆํ•œ ๊ฐ€์ค‘์น˜๋กœ ์„œ๋น„์Šค๋‹น ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๋กœ Linux ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ์œ ์ง€ํ•˜๋Š” contrib/ip-route-elb
๋…ธ๋“œ๊ฐ€ ์ฃผ์–ด์ง„ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด.

ELB๊ฐ€ ๊ฐ€์ค‘์น˜๋ฅผ ์ง€์›ํ•˜๋ฉด
GCE๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ตฐ์š” ์ง€์›์•ˆ๋˜๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ
๋ฌด๊ฒŒ. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„.

2016๋…„ 1์›” 16์ผ ์˜ค์ „ 5์‹œ 19๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

"๋กœ์ปฌ ํฌ๋“œ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ๋งŒ"์€ ํ”„๋กœ์„ธ์Šค์˜ 2๋‹จ๊ณ„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1 ๋‹จ๊ณ„
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋งŒ ๋ณด๋‚ด๋„๋ก ์„œ๋น„์Šค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ์„œ๋น„์Šค์— ๋Œ€ํ•ด 1๊ฐœ ์ด์ƒ์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์—. ๊ทธ ๋‹จ๊ณ„
๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ, ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ๊ตญ ์ด๊ฒƒ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๋ž˜๋„.

๊ทธ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋‹จ ์™„๋ฃŒ๋˜๋ฉด [...]

๊ทธ๋Ÿผ ์™„์„ฑ๋œ ๋ชจ์Šต์„ ํ•œ๋ฒˆ ๋ณด์‹ค๊นŒ์š” :-)

ELB๊ฐ€ ๊ฐ€์ค‘์น˜๋ฅผ ์ง€์›ํ•˜๋ฉด
GCE๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ตฐ์š” ์ง€์›์•ˆ๋˜๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ
๋ฌด๊ฒŒ.

๋งค๋‰ด์–ผ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋‚ด 10๋ฐฐ ์ด์ƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋„คํŠธ์›Œํ‚น ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์บ์น˜๋ฅผ ์™„์ „ํžˆ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‚จ์ž ip-route๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

           nexthop NEXTHOP
                  the nexthop of a multipath route.  NEXTHOP is a 

์ตœ์ƒ์œ„ ์ธ์ˆ˜ ๋ชฉ๋ก๊ณผ ์œ ์‚ฌํ•œ ์ž์ฒด ๊ตฌ๋ฌธ์„ ๊ฐ€์ง„ ๋ณต์žกํ•œ ๊ฐ’:

                          via [ FAMILY ] ADDRESS - is the nexthop 

๋ผ์šฐํ„ฐ.

                          dev NAME - is the output device.

                          weight NUMBER - is a weight for this 

์ƒ๋Œ€ ๋Œ€์—ญํญ ๋˜๋Š” ํ’ˆ์งˆ์„ ๋ฐ˜์˜ํ•˜๋Š” ๋‹ค์ค‘ ๊ฒฝ๋กœ ๊ฒฝ๋กœ์˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„.

'E'๋Š” '์™ธ๋ถ€'์˜ ์•ฝ์ž๋ผ์„œ ๊ฑฐ๊ธฐ์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ,
์ ์–ด๋„ ์•„์ด๋””์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์–ป์œผ๋ ค๋ฉด.

2016๋…„ 1์›” 15์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 2์‹œ 55๋ถ„, Mikaรซl Cluseau
[email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

2016๋…„ 1์›” 16์ผ ์˜ค์ „ 5์‹œ 19๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

"๋กœ์ปฌ ํฌ๋“œ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ๋งŒ"์€ ํ”„๋กœ์„ธ์Šค์˜ 2๋‹จ๊ณ„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1 ๋‹จ๊ณ„
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋งŒ ๋ณด๋‚ด๋„๋ก ์„œ๋น„์Šค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ์„œ๋น„์Šค์— ๋Œ€ํ•ด 1๊ฐœ ์ด์ƒ์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์—. ๊ทธ ๋‹จ๊ณ„
๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ, ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ๊ตญ ์ด๊ฒƒ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๋ž˜๋„.

๊ทธ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ค๋Š˜ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์ƒ๊ฐํ–ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ณ„๋กœ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๋ƒฅ ๋ฏธ๋””์—„ ํ•˜๋“œ.

์ผ๋‹จ ์™„๋ฃŒ๋˜๋ฉด [...]

๊ทธ๋Ÿผ ์™„์„ฑ๋œ ๋ชจ์Šต์„ ํ•œ๋ฒˆ ๋ณด์‹ค๊นŒ์š” :-)

๊ณต์ •ํ•˜๊ฒŒ, ๋‚˜๋Š” ์ผ๋ จ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. :)

ELB๊ฐ€ ๊ฐ€์ค‘์น˜๋ฅผ ์ง€์›ํ•˜๋ฉด
GCE๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ตฐ์š” ์ง€์›์•ˆ๋˜๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ
๋ฌด๊ฒŒ.

๋งค๋‰ด์–ผ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋‚ด 10๋ฐฐ ์ด์ƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋„คํŠธ์›Œํ‚น ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์บ์น˜๋ฅผ ์™„์ „ํžˆ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‚จ์ž ip-route๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

๋„ฅ์ŠคํŠธํ™‰ ๋„ฅ์Šคํ™‰
๋‹ค์ค‘ ๊ฒฝ๋กœ ๊ฒฝ๋กœ์˜ ๋‹ค์Œ ํ™‰. ๋„ฅ์Šคํƒ‘์€
์ตœ์ƒ์œ„ ์ธ์ˆ˜ ๋ชฉ๋ก๊ณผ ์œ ์‚ฌํ•œ ์ž์ฒด ๊ตฌ๋ฌธ์„ ๊ฐ€์ง„ ๋ณต์žกํ•œ ๊ฐ’:

via [ FAMILY ] ADDRESS - is the nexthop
๋ผ์šฐํ„ฐ.

dev NAME - ์ถœ๋ ฅ ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

weight NUMBER - ์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ€์ค‘์น˜
์ƒ๋Œ€ ๋Œ€์—ญํญ ๋˜๋Š” ํ’ˆ์งˆ์„ ๋ฐ˜์˜ํ•˜๋Š” ๋‹ค์ค‘ ๊ฒฝ๋กœ ๊ฒฝ๋กœ์˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๋ฆฌ๋ˆ…์Šค์˜ IP ๋ผ์šฐํŒ… ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋Š ๊ฒƒ๋„
์–ด์จŒ๋“  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” LB ๊ตฌํ˜„. GCE๋Š” Google์˜ ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ฌด๊ฒŒ๊ฐ€ ์—†๋Š” ๋ฐธ๋Ÿฐ์„œ. ๋‚˜๋Š” ์•„๋งˆ์กด ELB์ธ์ง€ ๋ชจ๋ฅธ๋‹ค
ํ•˜๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„.

'E'๋Š” '์™ธ๋ถ€'์˜ ์•ฝ์ž๋ผ์„œ ๊ฑฐ๊ธฐ์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ,
์ ์–ด๋„ ์•„์ด๋””์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์–ป์œผ๋ ค๋ฉด.

๋ฌผ๋ก , ์šฐ๋ฆฌ๋Š” ๊ธฐ์—ฌ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :)

๋˜ํ•œ ์ด๊ฒƒ์„ ์ถ”๊ตฌํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐœ์˜ ๋ฒ„๊ทธ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) ์„œ๋น„์Šค์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์‹ค์ œ๋กœ
ํ•ด๋‹น ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

2) ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ๋ณด์กดํ•˜๋ ค๋ฉด kube-proxy๊ฐ€
์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ํ•ญ์ƒ ๋กœ์ปฌ ๋ฐฑ์—”๋“œ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค(xref #1).

๊ทธ๋Ÿฐ ๋‹ค์Œ ์˜๋„์™€ ๋ฐฉํ–ฅ์„ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.

2016๋…„ 1์›” 15์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 5์‹œ 11๋ถ„์— Tim Hockin [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

2016๋…„ 1์›” 15์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 2์‹œ 55๋ถ„, Mikaรซl Cluseau
[email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

2016๋…„ 1์›” 16์ผ ์˜ค์ „ 5์‹œ 19๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

"๋กœ์ปฌ ํฌ๋“œ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ๋งŒ"์€ ํ”„๋กœ์„ธ์Šค์˜ 2๋‹จ๊ณ„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1 ๋‹จ๊ณ„
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋งŒ ๋ณด๋‚ด๋„๋ก ์„œ๋น„์Šค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ์„œ๋น„์Šค์— ๋Œ€ํ•ด 1๊ฐœ ์ด์ƒ์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์—. ๊ทธ ๋‹จ๊ณ„
๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ, ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ๊ตญ ์ด๊ฒƒ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๋ž˜๋„.

๊ทธ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ค๋Š˜ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์ƒ๊ฐํ–ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ณ„๋กœ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๋ƒฅ ๋ฏธ๋””์—„ ํ•˜๋“œ.

์ผ๋‹จ ์™„๋ฃŒ๋˜๋ฉด [...]

๊ทธ๋Ÿผ ์™„์„ฑ๋œ ๋ชจ์Šต์„ ํ•œ๋ฒˆ ๋ณด์‹ค๊นŒ์š” :-)

๊ณต์ •ํ•˜๊ฒŒ, ๋‚˜๋Š” ์ผ๋ จ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. :)

ELB๊ฐ€ ๊ฐ€์ค‘์น˜๋ฅผ ์ง€์›ํ•˜๋ฉด
GCE๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ตฐ์š” ์ง€์›์•ˆ๋˜๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ
๋ฌด๊ฒŒ.

๋งค๋‰ด์–ผ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋‚ด 10๋ฐฐ ์ด์ƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋„คํŠธ์›Œํ‚น ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์บ์น˜๋ฅผ ์™„์ „ํžˆ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‚จ์ž ip-route๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

๋„ฅ์ŠคํŠธํ™‰ ๋„ฅ์Šคํ™‰
๋‹ค์ค‘ ๊ฒฝ๋กœ ๊ฒฝ๋กœ์˜ ๋‹ค์Œ ํ™‰. ๋„ฅ์Šคํƒ‘์€
์ตœ์ƒ์œ„ ์ธ์ˆ˜ ๋ชฉ๋ก๊ณผ ์œ ์‚ฌํ•œ ์ž์ฒด ๊ตฌ๋ฌธ์„ ๊ฐ€์ง„ ๋ณต์žกํ•œ ๊ฐ’:

via [ FAMILY ] ADDRESS - is the nexthop
๋ผ์šฐํ„ฐ.

dev NAME - ์ถœ๋ ฅ ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

weight NUMBER - ์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ€์ค‘์น˜
์ƒ๋Œ€ ๋Œ€์—ญํญ ๋˜๋Š” ํ’ˆ์งˆ์„ ๋ฐ˜์˜ํ•˜๋Š” ๋‹ค์ค‘ ๊ฒฝ๋กœ ๊ฒฝ๋กœ์˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๋ฆฌ๋ˆ…์Šค์˜ IP ๋ผ์šฐํŒ… ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋Š ๊ฒƒ๋„
์–ด์จŒ๋“  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” LB ๊ตฌํ˜„. GCE๋Š” Google์˜ ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ฌด๊ฒŒ๊ฐ€ ์—†๋Š” ๋ฐธ๋Ÿฐ์„œ. ๋‚˜๋Š” ์•„๋งˆ์กด ELB์ธ์ง€ ๋ชจ๋ฅธ๋‹ค
ํ•˜๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„.

'E'๋Š” '์™ธ๋ถ€'์˜ ์•ฝ์ž๋ผ์„œ ๊ฑฐ๊ธฐ์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ,
์ ์–ด๋„ ์•„์ด๋””์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์–ป์œผ๋ ค๋ฉด.

๋ฌผ๋ก , ์šฐ๋ฆฌ๋Š” ๊ธฐ์—ฌ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :)

๋ฌธ์„œ๊ฐ€ ์—†๋Š” PR์˜ ์œ„ํ—˜์€ ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€์ด๋‹ค
์ œ์•ˆ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค
๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด PR์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
2016๋…„ 1์›” 15์ผ ์˜คํ›„ 7์‹œ 2๋ถ„์— "Mikaรซl Cluseau" [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด ์ด๋ฆ„๊ณผ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ (1)์— ๋Œ€ํ•œ ํ’€ ์š”์ฒญ์„ ์ง์ ‘ ์—ฌ๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ?
์„ค๋ช…?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -172149777
.

๋ถˆํ–‰ํžˆ๋„ ๋‹น์‹ ์€ ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ํŠน์ •ํ•œ ์˜์—ญ์„ ๋„˜์—ˆ์Šต๋‹ˆ๋‹ค.
GCE์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ๋Š” ๋ผ์šฐํŒ…๋œ ๋„คํŠธ์›Œํฌ ๋•Œ๋ฌธ์— IPVS ๊ฒŒ์ดํŠธ์›จ์ด ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ž‘๋™ํ•˜๋”๋ผ๋„ Kubernetes๊ฐ€ ์ง€์›ํ•˜๋Š” ํฌํŠธ ์žฌ๋งคํ•‘์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์„œ๋น„์Šค ํฌํŠธ == ๋Œ€์ƒ ํฌํŠธ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด ์ธก์—์„œ ์ด๊ฒƒ์€ ๋ ˆ์ด์–ด 3 ๋„คํŠธ์›Œํฌ(์šฐ๋ฆฌ๋Š” ์˜ค๋ฒ„๋ ˆ์ด ์‚ฌ์šฉ)๋ฅผ ํ†ตํ•ด ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ ์—†์ด๋Š” ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ด์‹ ๊ฐ€๋Šฅํ•˜๊ณ  ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ํƒ€์‚ฌ ํด๋ผ์šฐ๋“œ(์˜ˆ: GCE).

DSR ๋ชจ๋“œ์˜ ์ œํ•œ ์‚ฌํ•ญ์„ ์ˆ˜์ •ํ•˜๋ฉด ์„œ๋น„์Šค ํฌํŠธ == ๋Œ€์ƒ ํฌํŠธ์ด์ง€๋งŒ ๋™์ผํ•œ ํฌํŠธ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” _๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ์—_ ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์ง€ ์•Š๋Š” ํ•œ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "์ปจํ…Œ์ด๋„ˆ๋‹น 1๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜" ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๊ฐ€์ •ํ•  ๋•Œ ์ด์— ๋Œ€ํ•œ ๋‹จ์ผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ๋‚ด๋ถ€์— ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ํฌํŠธ์— ์žˆ๊ณ  ๋ชจ๋“  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ž˜ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํฌํŠธ๋ฅผ ๋‹ค์‹œ ๋งคํ•‘ํ•ด์•ผ ํ•˜๋Š” _์ •๋ง_ ํ•„์š”ํ•œ ๊ฒฝ์šฐ(๊ทธ ์ด์œ  ๋’ค์— ์ˆจ๊ฒจ์ง„ ์‹ค์ œ ์ด์œ ๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค) "ROUTE" ๋ชจ๋“œ ๋Œ€์‹  IPVS NAT ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubernetes์˜ ํ•ต์‹ฌ์— ๋Œ€ํ•œ ๋„์ „์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ฐฉํ•ด๋ฅผ ๋ฐ›์ง€ ์•Š๊ณ  ์Šค์Šค๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ipvs encap ๋ชจ๋“œ๋กœ ๋ญ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ์˜ ์„ฑ๋Šฅ์  ์˜๋ฏธ๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ ์ž‘๋™ํ•˜๊ณ  Amazon์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ํ™•์žฅํ•ด์•ผ ํ•  ๋•Œ GCE์—์„œ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค). DSR์˜ ์œ ์ผํ•œ ์ œํ•œ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๋“œ/์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์„œ๋น„์Šค์™€ ๋™์ผํ•œ ํฌํŠธ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ ๋งŽ์€ ๋‚ด๋ถ€ ๋…ผ์˜ ๋์— E2E ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ ๊ด€์ ์—์„œ ์ด๊ฒƒ์ด ์ œํ•œ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์•„๋ฌด๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋ฐฉ์ •์‹์—์„œ DSR(IPVS ๊ฒฝ๋กœ ๋ชจ๋“œ)์„ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  IPVS์˜ "NAT ๋ชจ๋“œ"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฌํŠธ๋ฅผ ๋‹ค์‹œ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ฌ์ „ํžˆ IPVS ๊ธฐ๋Šฅ/์„ฑ๋Šฅ ๋“ฑ์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ๋‹จ์ ์€ NAT๊ฐ€ ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์„ธ๊ธˆ์„ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ (a) UDP๋ฅผ ์ง€์›ํ•˜๊ณ  (b) ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์†”๋ฃจ์…˜์— ๋น„ํ•ด ์—ฌ์ „ํžˆ ๋ฒˆ๊ฐœ์ฒ˜๋Ÿผ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@brendandburns @thockin ์ด์ „ ์Šค๋ ˆ๋“œ์—์„œ ์„ฑ๋Šฅ ์ˆ˜์น˜๋ฅผ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๊ฐ€์žฅ ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋ผ๊ณ  ๋ถ€๋ฅด์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ HTTP๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์›Œํฌ๋กœ๋“œ ์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ ์‹œ์ž‘์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ apache-bench ์ˆซ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://docs.google.com/presentation/d/1vv5Zszt4HDGbuyVlvOe76unHskxPuZQseQnarNbhQVc

๋‹ค๋ฅธ ๋‘ ์†”๋ฃจ์…˜๊ณผ์˜ ๊ณต์ •ํ•œ ๋น„๊ต๋ฅผ ์œ„ํ•ด IPVS์—์„œ DNAT๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด๋Š” ๋˜ํ•œ ์„œ๋น„์Šค ํฌํŠธ๊ฐ€ ๋Œ€์ƒ ์„œ๋น„์Šค ํฌํŠธ์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•จ). ์šฐ๋ฆฌ์˜ ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋‹ค์†Œ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ์˜ ์„ฑ๋Šฅ ๋ชฉํ‘œ๋Š” ์•„๋งˆ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋‹ค๋ฅด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฆ‰, ํ•˜๋“œ์›จ์–ด๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ์Œ).

๊ฐ์‚ฌ ํ•ด์š”!

kube-proxy๊ฐ€ UDP๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ์–ด๋””์—์„œ ์™”๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ ˆ๋Œ€์ ์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(์—ฐ๊ฒฐ ์—†์ด๋Š”
์‹œ๊ฐ„ ์ดˆ๊ณผ๊นŒ์ง€).

๋˜ํ•œ iptables (new) kube-proxy์™€ userspace๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
(๋ ˆ๊ฑฐ์‹œ) ๋ชจ๋“œ.

2016๋…„ 1์›” 16์ผ ํ† ์š”์ผ ์˜คํ›„ 9์‹œ 45๋ถ„์— qoke [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@thockin https://github.com/thockin ์ด์ „์— ์š”์ฒญํ•œ ์Šค๋ ˆ๋“œ์—์„œ
์ผ๋ถ€ ์„ฑ๋Šฅ ์ˆ˜์น˜. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐ€์žฅ ํฌ๊ด„์ ์ธ ์„ธํŠธ๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.
ํ…Œ์ŠคํŠธ ์ค‘ HTTP๊ฐ€ ๋” ์ผ๋ฐ˜์ ์ธ ์›Œํฌ๋กœ๋“œ ์ค‘ ํ•˜๋‚˜์ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ
๋‹ค์Œ์€ ์‹œ์ž‘์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ apache-bench ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.

https://docs.google.com/presentation/d/1vv5Zszt4HDGbuyVlvOe76unHskxPuZQseQnarNbhQVc

๋‹ค๋ฅธ ๋‘ ์†”๋ฃจ์…˜๊ณผ์˜ ๊ณต์ •ํ•œ ๋น„๊ต๋ฅผ ์œ„ํ•ด IPVS์—์„œ DNAT๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
(์ด๋Š” ๋˜ํ•œ ์„œ๋น„์Šค ํฌํŠธ๊ฐ€ ๋Œ€์ƒ ์„œ๋น„์Šค ํฌํŠธ์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค). ์šฐ๋ฆฌ์˜
์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋‹ค์†Œ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ์˜ ์„ฑ๋Šฅ ๋ชฉํ‘œ๋Š”
์•„๋งˆ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋‹ค๋ฅด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฆ‰, ๋ชจ๋“  ํ•˜๋“œ์›จ์–ด๋ฅผ
์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -172293881
.

์ƒˆ๋กœ์šด ๋ชจ๋“œ์™€ ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋“œ์— ๋Œ€ํ•œ ์ข‹์€ ์†Œ์‹ - ์–ธ๊ธ‰ ๋ฐ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ UDP ์ธก๋ฉด์—์„œ๋„ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ UDP๊ฐ€ kube-proxy์—์„œ ์™„์ „ํžˆ ์ง€์›๋˜๋Š”์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. UDP๋กœ kube-proxy๋ฅผ ์ฒ˜์Œ ์‹œ๋„ํ–ˆ์„ ๋•Œ ๋งŽ์€ ์ค‘๋‹จ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋Š˜๋ ธ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์†”๋ฃจ์…˜์„ ๋นจ๋ฆฌ ์ฐพ์•„์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…๋ณด๋‹ค๋Š” IPVS๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ์—๋Š” ์ƒ๋‹นํžˆ ๋‚ฎ์€ ์ดˆ๋‹น ํŒจํ‚ท ์›Œํฌ๋กœ๋“œ(1k pps ๋ฏธ๋งŒ)์—์„œ๋งŒ ์ž‘๋™ํ–ˆ์ง€๋งŒ ์ตœ๊ทผ์— ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

iptables ๋ฐ ๊ณ ์† UDP ์„œ๋น„์Šค์˜ ์ฃผ์š” ๋ฌธ์ œ๋Š” netfilter conntrack ํ…Œ์ด๋ธ”์ด ์ฑ„์›Œ์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. conntrack ํฌ๊ธฐ๋ฅผ 100๋งŒ ๊ฐœ๋กœ ๋Š˜๋ฆฌ๋”๋ผ๋„ ์ผ๋ถ€ ๋งฌ์›จ์–ด์— ๊ฐ์—ผ๋œ ์ตœ์ข… ์‚ฌ์šฉ์ž DDoS๊ฐ€ ์‚ฌ์šฉ์ž์ด๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๋ฅผ DNS ์ฆํญ ๊ณต๊ฒฉ์— ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด conntrack ํ…Œ์ด๋ธ”์ด ๋‹ค์‹œ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ DNS ์„œ๋ฒ„(๋˜๋Š” ๋ชจ๋“  ๊ณ ์† UDP ์„œ๋น„์Šค)์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” conntrack์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์›์‹œ ํ…Œ์ด๋ธ”์—์„œ -j NOTRACK ์‚ฌ์šฉ). conntrack์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด iptables NAT ๋ฐ ์ƒํƒœ ์ €์žฅ ํ•ญ๋ชฉ(-m state)์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

GIT ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์™ธ์— "k8s.io/kubernetes/pkg/proxy/ipvs" ๋ชจ๋“ˆ/ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์ „์— ์–ด๋””๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์„๊นŒ์š”? ์•„๋‹ˆ๋ฉด ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋” ์ž˜ ์•„๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ด๊ฒƒ์ด ์ตœ์„ ์ž…๋‹ˆ๊นŒ?

๋˜ํ•œ ํŠน์ • ๋ฒค์น˜๋งˆํฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ œ๊ฐ€ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2016๋…„ 1์›” 17์ผ ์˜คํ›„ 8์‹œ 50๋ถ„์— qoke๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

GIT repo๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ฐ€์žฅ ๋จผ์ € ์‚ดํŽด๋ณผ ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ?
"k8s.io/kubernetes/pkg/proxy/ipvs" ๋ชจ๋“ˆ/ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋‹น์‹ ๋„ ๊ธฐ์—ฌ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

FWIW... ๋ชฉ๋ก ์‹œ๊ณ„์™€ ์–ธ๋ธํƒ€ ์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…๋ฆฝ
ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ์— ๋ฐ˜์‘ํ•˜๋Š” Binay
https://github.com/kubernetes/kubernetes/pull/19755. ๋งŒ์•ฝ ์ •๋ณด๊ฐ€
~์—
https://github.com/kubernetes/kubernetes/pull/19755/files#diff -0becc97ac222c3f2838fbfe8446d5375R26
์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ช‡ ์ค„๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
(https://github.com/kubernetes/kubernetes/pull/19755/files#diff-0becc97ac222c3f2838fbfe8446d5375R44).

์ด PoC์—์„œ๋Š” clusterIP ์„œ๋น„์Šค๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋‹น์‹ ์€ ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ํŠน์ •ํ•œ ์˜์—ญ์„ ๋„˜์—ˆ์Šต๋‹ˆ๋‹ค.
GCE์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ๋Š” ๋ผ์šฐํŒ…๋œ ๋„คํŠธ์›Œํฌ ๋•Œ๋ฌธ์— IPVS ๊ฒŒ์ดํŠธ์›จ์ด ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ž‘๋™ํ•˜๋”๋ผ๋„
Kubernetes๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ํฌํŠธ ์žฌ๋งคํ•‘์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์„œ๋น„์Šค ํฌํŠธ == ๋Œ€์ƒ ํฌํŠธ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด ์ธก์—์„œ ์ด๊ฒƒ์€ ๋ ˆ์ด์–ด 3 ๋„คํŠธ์›Œํฌ(์šฐ๋ฆฌ๋Š” ์˜ค๋ฒ„๋ ˆ์ด ์‚ฌ์šฉ)๋ฅผ ํ†ตํ•ด ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ
์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ ์—†์ด, ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ด์‹ ๊ฐ€๋Šฅํ•˜๊ณ  ํƒ€์‚ฌ์—์„œ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ(์˜ˆ: GCE).

์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ์ •์  ๊ฒฝ๋กœ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ
GCE์—์„œ. ์–ด์ฉŒ๋ฉด ๋‚˜๋Š” ๋‹น์‹ ์ด ์ ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ์ˆ ์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. NS
๋‚˜๋Š” ์ด๊ฒƒ์˜ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹˜์„ ์ž์œ ๋กญ๊ฒŒ ์ธ์ •ํ•˜์‹ญ์‹œ์˜ค :)

์„œ๋น„์Šค ํฌํŠธ == ๋Œ€์ƒ ํฌํŠธ๋ผ๋Š” ์ œํ•œ์„ ์ˆ˜์ •ํ•˜์ง€๋งŒ ๋‘ ๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋™์ผํ•œ ํฌํŠธ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ(์šฐ๋ฆฌ๋Š” ์ด์— ๋Œ€ํ•ด ๋งŽ์€ ์‹œ๊ฐ„์„ ์ƒ๊ฐํ•˜๊ณ  "1 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
์ปจํ…Œ์ด๋„ˆ๋‹น" ์ง€์นจ์— ๋”ฐ๋ฅด๋ฉด ์ด์— ๋Œ€ํ•œ ๋‹จ์ผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋…ธ๋“œ์—์„œ ๋ชจ๋‘ ์‹คํ–‰๋˜๋Š” ๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๋ถ€ ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ํฌํŠธ์— ์žˆ๊ณ  ๋ชจ๋“  ๋ถ€ํ•˜๊ฐ€ ์ž˜ ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์š”์ปจ๋Œ€, ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹น์‹ ์„ ๋ฉˆ์ถ”์ง€ ์•Š์Šต๋‹ˆ๋‹ค
๋™์ผํ•œ ๋…ธ๋“œ์˜ ๋™์ผํ•œ ํฌํŠธ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ:
etcd1๊ณผ etcd2 ์‚ฌ์ด์˜ ์ „ํ™˜) ๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐํƒ€ ์ƒํ™ฉ
๋ฐฑ์—”๋“œ ํฌํŠธ๋งŒ ๋‹ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ทธ
Kubernetes๋Š” ์ด๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด
์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ
๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค).

kubernetes์˜ ํ•ต์‹ฌ์— ๋Œ€ํ•œ ๋„์ „์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์Šค์Šค๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ipvs encap ๋ชจ๋“œ๋กœ ๋ญ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์„์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ ์„ฑ๋Šฅ์€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค
๊ทธ๊ฒƒ์˜ ์˜๋ฏธ.

์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ ์ž‘๋™ํ•˜๊ณ  Amazon์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค์Œ์—์„œ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
ํ™•์žฅํ•ด์•ผ ํ•  ๋•Œ GCE), ํฌ๋“œ/์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด > ์„œ๋น„์Šค์™€ ๋™์ผํ•œ ํฌํŠธ์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์œ ์ผํ•œ ์ œํ•œ ์‚ฌํ•ญ์€ ๋งŽ์€ ๋‚ด๋ถ€ ๋…ผ์˜ ๋์— ์•„๋ฌด๋„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค
์ด๊ฒƒ์€ E2E ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ ๊ด€์ ์—์„œ ์ œํ•œ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ •๋ง๋กœ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค. ๋” ๋‹จ๊ณ„์ ์œผ๋กœ ๋ญ”๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ UDP ์ธก๋ฉด์—์„œ๋„ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ UDP๊ฐ€ kube-proxy์—์„œ ์™„์ „ํžˆ ์ง€์›๋˜๋Š”์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.
UDP๋กœ kube-proxy๋ฅผ ์ฒ˜์Œ ์‹œ๋„ํ–ˆ์„ ๋•Œ ๋งŽ์€ ์ค‘๋‹จ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋Š˜๋ ธ๊ณ 
์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์†”๋ฃจ์…˜์„ ๋นจ๋ฆฌ ์ฐพ์•„์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…๋ณด๋‹ค๋Š” IPVS๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์—์„œ
๋งค์šฐ ๋‚ฎ์€ ์ดˆ๋‹น ํŒจํ‚ท ์›Œํฌ๋กœ๋“œ(1k pps ๋ฏธ๋งŒ)์—์„œ๋งŒ ์ž‘๋™ํ–ˆ์ง€๋งŒ ์ตœ๊ทผ์— ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

iptables ๋ฐ ๊ณ ์† UDP ์„œ๋น„์Šค์˜ ์ฃผ์š” ๋ฌธ์ œ๋Š” netfilter conntrack ํ…Œ์ด๋ธ”์ด ์ฑ„์›Œ์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ๊ฐ€์‹œ์ผœ๋„
๊ทœ๋ชจ๋ฅผ 100๋งŒ๊นŒ์ง€ ์ถ”์ ํ•œ ๋‹ค์Œ ์ผ๋ถ€ ๋งฌ์›จ์–ด์— ๊ฐ์—ผ๋œ ์ตœ์ข… ์‚ฌ์šฉ์ž DDoS๊ฐ€ ๊ท€ํ•˜๋ฅผ ๊ณต๊ฒฉํ•˜๊ฑฐ๋‚˜ DNS ์ฆํญ์— ๊ท€ํ•˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
๊ณต๊ฒฉํ•˜๋ฉด conntrack ํ…Œ์ด๋ธ”์ด ๋‹ค์‹œ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋งํ•ด์„œ DNS ์„œ๋ฒ„(๋˜๋Š” ๋ชจ๋“  ๊ณ ์†
UDP ์„œ๋น„์Šค)๋Š” conntrack(์›์‹œ ํ…Œ์ด๋ธ”์—์„œ -j NOTRACK ์‚ฌ์šฉ)์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  conntrack์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด iptables NAT ๋ฐ
์ƒํƒœ ์ €์žฅ ํ•ญ๋ชฉ(-m ์ƒํƒœ)์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋„ค, UDP์šฉ NAT๋Š” ์ •๋ง ๋ถˆํ–‰ํ•ฉ๋‹ˆ๋‹ค. non-conntrack ์ฐพ๊ธฐ
์†”๋ฃจ์…˜์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋ชจ๋“ 
ํ™˜๊ฒฝ ๋˜๋Š” ํ”Œ๋žซํผ์— ์˜ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋จ(์ž์ฒด์ ์œผ๋กœ ์–ด๋ ค์šด
๋ฐฉ๋ฒ•).

GIT ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ƒ์„ฑ์„ ์‹œ๋„ํ•˜๊ธฐ ์ „์— ์‚ดํŽด๋ด์•ผ ํ•  ๊ฐ€์žฅ ์ข‹์€ ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ?
"k8s.io/kubernetes/pkg/proxy/ipvs" ๋ชจ๋“ˆ/ํŒจํ‚ค์ง€? ์•„๋‹ˆ๋ฉด ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋” ์ž˜ ์•„๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ด๊ฒƒ์ด ์ตœ์„ ์ž…๋‹ˆ๊นŒ?

IPVS์— ๋Œ€ํ•œ github ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์ง€๋งŒ ๊ฐ€์žฅ ๋ฌด๋„ํšŒ(NAT)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“œ ์—†์ด๋Š” GCE์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
ํฌํŠธ ์žฌ๋งคํ•‘ ๊ธฐ๋Šฅ). ํฌํŠธ ์žฌ๋งคํ•‘์ด ๋œ ์ด์ƒ์ ์ผ ๊ฒฝ์šฐ
๋ฐธ๋Ÿฐ์‹ฑ ๋ชจ๋“œ, ์•„๋งˆ ๊ทธ๊ฑธ๋กœ ์‚ด ์ˆ˜ ์žˆ๊ณ  ๊ทธ๋ƒฅ ๋ฌธ์„œํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Œ€๋กœ.

์ด ๋Œ€ํ™”๋ฅผ ๊ทธ๊ณณ์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ธธ์„ ์žƒ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 12์‹œ 34๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋„ค, UDP์šฉ NAT๋Š” ์ •๋ง ๋ถˆํ–‰ํ•ฉ๋‹ˆ๋‹ค. non-conntrack ์ฐพ๊ธฐ
์†”๋ฃจ์…˜์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋ชจ๋“ 
ํ™˜๊ฒฝ ๋˜๋Š” ํ”Œ๋žซํผ์— ์˜ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋จ(์ž์ฒด์ ์œผ๋กœ ์–ด๋ ค์šด
๋ฐฉ๋ฒ•).

(ํฌ๋“œ, ํฌํŠธ) ์ปคํ”Œ์ด
๋Œ€๋ถ€๋ถ„์˜ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค(ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์— ์—ฌ๋Ÿฌ ํฌ๋“œ)?

์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

{from: clientIP:clientPort, to: externalIP:externalPort} ---[proxy๊ฐ€ ์ž„์˜์˜ ํฌ๋“œ๋ฅผ ์„ ํƒํ•จ]---> {from: clientIP:clientPort, to: podIP:targetPort} ---> [์˜ฌ๋ฐ”๋ฅธ ํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…๋จ ...]

๋Œ์•„์˜ค๋Š” ๊ธธ์— ๋ฐฉํ™”๋ฒฝ์—๋Š” {from:
podIP:targetPort , to: any}๋Š” {from:
e xternalIP:externalPort , ๋Œ€์ƒ: ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ}.

iptables ๋ฐฉ์–ธ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ ค๋ฉด:

iptables -t nat -N stateless-svc-in

iptables -t nat -N stateless-svc-out

iptables -t nat -A stateless-svc-in  -j DNAT -s 1.2.3.4  -p udp --dport 53 --to-destination 10.1.0.1 -m statistic --mode random --probability 0.3333

iptables -t nat -A stateless-svc-in  -j DNAT -s 1.2.3.4  -p udp --dport 53 --to-destination 10.2.0.1 -m statistic --mode random --probability 0.5

iptables -t nat -A stateless-svc-in  -j DNAT -s 1.2.3.4  -p udp --dport 53 --to-destination 10.2.0.2 -m statistic --mode random --probability 1

iptables -t nat -A stateless-svc-out -j SNAT -s 10.1.0.1 -p udp --sport 53 --to-source 1.2.3.4

iptables -t nat -A stateless-svc-out -j SNAT -s 10.2.0.1 -p udp --sport 53 --to-source 1.2.3.4

iptables -t nat -A stateless-svc-out -j SNAT -s 10.2.0.2 -p udp --sport 53 --to-source 1.2.3.4

ํŒจํ‚ท์ด ์™ธ๋ถ€์—์„œ ์˜ฌ ๋•Œ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ณณ์„ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ.

์„œ๋น„์Šค๊ฐ€ Kubernetes์—์„œ ํ‘œํ˜„๋˜๋Š” ๋ฐฉ์‹์€ ๋‹จ์ผ ํฌ๋“œ๊ฐ€
๋งŽ์€ ์„œ๋น„์Šค๊ฐ€ ์•ž์— ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์€ ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค - ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค
SNAT์—.

2016๋…„ 1์›” 17์ผ ์ผ์š”์ผ ์˜คํ›„ 6:13, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 12์‹œ 34๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋„ค, UDP์šฉ NAT๋Š” ์ •๋ง ๋ถˆํ–‰ํ•ฉ๋‹ˆ๋‹ค. non-conntrack ์ฐพ๊ธฐ
์†”๋ฃจ์…˜์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋ชจ๋“ 
ํ™˜๊ฒฝ ๋˜๋Š” ํ”Œ๋žซํผ์— ์˜ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋จ(์ž์ฒด์ ์œผ๋กœ ์–ด๋ ค์šด
๋ฐฉ๋ฒ•).

(ํฌ๋“œ, ํฌํŠธ) ์ปคํ”Œ์ด
๋Œ€๋ถ€๋ถ„์˜ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค(ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์— ์—ฌ๋Ÿฌ ํฌ๋“œ)?

์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

{from: clientIP:clientPort, to: externalIP:externalPort} ---[ํ”„๋ก์‹œ ์„ ํƒ
์ž„์˜์˜ ํฌ๋“œ]---> {from: clientIP:clientPort, to: podIP:targetPort} --->
[์˜ฌ๋ฐ”๋ฅธ ํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…๋จ...]

๋Œ์•„์˜ค๋Š” ๊ธธ์— ๋ฐฉํ™”๋ฒฝ์—๋Š” {from:
podIP:targetPort , to: any}๋Š” {from:
e xternalIP:externalPort , ๋Œ€์ƒ: ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ}.

iptables ๋ฐฉ์–ธ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ ค๋ฉด:

iptables -t nat -N stateless-svc-in

iptables -t nat -N stateless-svc-out

iptables -t nat -A stateless-svc-in -j DNAT -s 1.2.3.4 -p udp --dport 53
--to-destination 10.1.0.1 -m statistic --mode random --probability 0.3333

iptables -t nat -A stateless-svc-in -j DNAT -s 1.2.3.4 -p udp --dport 53
--to-destination 10.2.0.1 -m statistic --mode random --probability 0.5

iptables -t nat -A stateless-svc-in -j DNAT -s 1.2.3.4 -p udp --dport 53
--to-destination 10.2.0.2 -m statistic --mode random --probability 1

iptables -t nat -A stateless-svc-out -j SNAT -s 10.1.0.1 -p udp --sport 53
--to-source 1.2.3.4

iptables -t nat -A stateless-svc-out -j SNAT -s 10.2.0.1 -p udp --sport 53
--to-source 1.2.3.4

iptables -t nat -A stateless-svc-out -j SNAT -s 10.2.0.2 -p udp --sport 53
--to-source 1.2.3.4

ํŒจํ‚ท์ด ์™ธ๋ถ€์—์„œ ์˜ฌ ๋•Œ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ณณ์„ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -172408290
.

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 3์‹œ 31๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ Kubernetes์—์„œ ํ‘œํ˜„๋˜๋Š” ๋ฐฉ์‹์€ ๋‹จ์ผ ํฌ๋“œ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋˜๋ ค๊ณ 
์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ์•ž์— ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์€ ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค - ์šฐ๋ฆฌ๋Š” ๋ชจ๋ฆ…๋‹ˆ๋‹ค
๋ญ๋ผ๊ณ  ์š”
SNAT์—.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋Œ€์ผ(์ œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์žฅ :-))์œผ๋กœ ์ œํ•œํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋‹จ์ง€ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ์„ ์„ ๊ธ‹๊ณ ์ž ๋…ธ๋ ฅํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก , ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™œ ๊ทธ๋ ‡์ง€ ์•Š์€์ง€๋ฅผ ์ง€์ ํ•˜๋Š” ๋ถˆํ–‰ํ•œ ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์†”๋ฃจ์…˜ :(

2016๋…„ 1์›” 17์ผ ์ผ์š”์ผ ์˜คํ›„ 8์‹œ 34๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 3์‹œ 31๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ Kubernetes์—์„œ ํ‘œํ˜„๋˜๋Š” ๋ฐฉ์‹์€ ๋‹จ์ผ ํฌ๋“œ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋˜๋ ค๊ณ 
์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ์•ž์— ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์€ ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค - ์šฐ๋ฆฌ๋Š” ๋ชจ๋ฆ…๋‹ˆ๋‹ค
๋ญ๋ผ๊ณ  ์š”
SNAT์—.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋Œ€์ผ(์ œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์žฅ :-))์œผ๋กœ ์ œํ•œํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋‹จ์ง€ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ์„ ์„ ๊ธ‹๊ณ ์ž ๋…ธ๋ ฅํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -172421828
.

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 3์‹œ 46๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™œ ๊ทธ๋ ‡์ง€ ์•Š์€์ง€๋ฅผ ์ง€์ ํ•˜๋Š” ๋ถˆํ–‰ํ•œ ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์†”๋ฃจ์…˜ :(

์˜ˆ... ํ•˜์ง€๋งŒ FAQ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์–ด๋”˜๊ฐ€์— "if len(services)
== 1 { ์ƒํƒœ ๋น„์ €์žฅ ๊ตฌํ˜„ } else { ์ƒํƒœ ์ €์žฅ ๊ตฌํ˜„ }". ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€
๋‰ด๋น„์—๊ฒŒ๋Š” ์—‰๋ง์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๊ธฐ์—ฌ/์—˜ํ”„/๋ฌด์–ธ๊ฐ€๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ์ถ”์ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค(์„œ๋น„์Šค๊ฐ€
์ฃผ์–ด์ง„ ํฌ๋“œ ์•ž์—). ์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š๋Š”๋‹ค(๊ทธ๋ ‡๋”๋ผ๋„
ํ‹ˆ์ƒˆ). ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹นํ•œ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.
๋งŽ์€ ์ฃผ์˜์‚ฌํ•ญ. ๊ทธ๋ž˜๋„ ๋” ๋‚˜์€ ๋‹ต๋ณ€์„ ์ƒ๊ฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

2016๋…„ 1์›” 17์ผ ์ผ์š”์ผ ์˜คํ›„ 8์‹œ 51๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 3์‹œ 46๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™œ ๊ทธ๋ ‡์ง€ ์•Š์€์ง€๋ฅผ ์ง€์ ํ•˜๋Š” ๋ถˆํ–‰ํ•œ ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์†”๋ฃจ์…˜ :(

์˜ˆ... ํ•˜์ง€๋งŒ FAQ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์–ด๋”˜๊ฐ€์— "if len(services)
== 1 { ์ƒํƒœ ๋น„์ €์žฅ ๊ตฌํ˜„ } else { ์ƒํƒœ ์ €์žฅ ๊ตฌํ˜„ }". ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€
๋‰ด๋น„์—๊ฒŒ๋Š” ์—‰๋ง์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋„ ๋  ์ˆ˜ ์žˆ์–ด
๊ธฐ์—ฌ/elbs/๋ญ”๊ฐ€...

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -172425404
.

2016๋…„ 1์›” 18์ผ 04:07 PM์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ์ถ”์ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค(์„œ๋น„์Šค๊ฐ€
์ฃผ์–ด์ง„ ํฌ๋“œ ์•ž์—). ์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š๋Š”๋‹ค(๊ทธ๋ ‡๋”๋ผ๋„
ํ‹ˆ์ƒˆ). ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹นํ•œ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.
๋งŽ์€ ์ฃผ์˜์‚ฌํ•ญ. ๊ทธ๋ž˜๋„ ๋” ๋‚˜์€ ๋‹ต๋ณ€์„ ์ƒ๊ฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋™์˜ํ•˜์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ๋” ๋‚˜์€ ์•„์ด๋””์–ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค :-(

๋ชฉ์ ์— ๋งž๊ฒŒ ๊ตฌ์ถ•๋œ SDN์กฐ์ฐจ๋„ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„
MPLS์™€ ๊ฐ™์€ ๋ ˆ์ด๋ธ” ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜..?

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 4์‹œ 18๋ถ„์— Mikaรซl Cluseau๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ ์— ๋งž๊ฒŒ ๊ตฌ์ถ•๋œ SDN์กฐ์ฐจ๋„ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
MPLS์™€ ๊ฐ™์€ ๋ ˆ์ด๋ธ” ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜..?

์‚ฌ๋ฌผ์— ๋ ˆ์ด๋ธ”์„ ์ง€์ •ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์—์„œ... ์„œ๋น„์Šค๋‹น ํ•˜๋‚˜์˜ IP + ํ•˜๋‚˜๋ฅผ ํ• ๋‹นํ•˜๋ฉด
์—”๋“œํฌ์ธํŠธ๋‹น IP(์„œ๋น„์Šค+ํฌ๋“œ ์ปคํ”Œ), ์ด๋Ÿฌํ•œ ์—”๋“œํฌ์ธํŠธ IP๋ฅผ
ํฌ๋“œ๋Š” ์™„์ „ํžˆ ์ƒํƒœ ๋น„์ €์žฅ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

``````

  • ํ˜ธ์ŠคํŠธ ์™ธ๋ถ€:{from: clientIP:clientPort, to: externalIP:servicePort} -----[ELB
    ํ•˜๋‚˜์˜ ๋์ ์„ ์„ ํƒ]--------> {from: clientIP:clientPort, to:
    endpointServiceIP:podPort} --> ํ˜ธ์ŠคํŠธ๋กœ์˜ ๊ฒฝ๋กœ
  • ํ˜ธ์ŠคํŠธ์—์„œ ํฌ๋“œ๋กœ:{from: clientIP:clientPort, to: endpointServiceIP:podPort} --[ํ‘œ์ค€
    ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ผ์šฐํŒ…]--> {from: clientIP:clientPort , to:
    ๋์  ServiceIP:podPort }

  • ํฌ๋“œ์—์„œ ํ˜ธ์ŠคํŠธ๋กœ:{from: endpointServiceIP:podPort, to: clientIP:clientPort}
    --------[๋ผ์šฐํ„ฐ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ผ์šฐํŒ…]-----> {from:
    endpointServiceIP:podPort, to: clientIP:clientPort} - ํ˜ธ์ŠคํŠธ์—์„œ ์™ธ๋ถ€๋กœ:{from: endpointServiceIP:podPort, to: clientIP:clientPort} --------[ELB
    SNATs back]------------------> {from: clientIP:clientPort , to:
    e xternalIP:servicePort } ```

clusterIP์—์„œ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
``````

GCE์—์„œ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ AWS์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ œํ•œ๋œ ์ˆ˜์˜ ์ •์  ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ IP ๋ฒ”์œ„ 2๊ฐœ๋ฅผ ํ•จ๊ป˜ ํ”ผ๊ธฐ๋ฐฑํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
๋…ธ์„ . ์ง€์ถœํ•ด์•ผ ํ•  IP๊ฐ€ ๋งŽ์ง€๋งŒ UDP์—๋งŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ฐ–์œผ๋กœ ์‹œ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ IP๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€๊ณ  ์žˆ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ์ž‘์—…์—์„œ "์ถ”๊ฐ€" IP๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
pingํ•˜์ง€๋งŒ TCP ๋˜๋Š” UDP๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Œ).

์–ธ์  ๊ฐ„ ๋‹ค์‹œ ํ•ด๋ด์•ผ๊ฒ ๋„ค์š”.

2016๋…„ 1์›” 17์ผ ์ผ์š”์ผ ์˜คํ›„ 10์‹œ 22๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 4์‹œ 18๋ถ„์— Mikaรซl Cluseau๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ ์— ๋งž๊ฒŒ ๊ตฌ์ถ•๋œ SDN์กฐ์ฐจ๋„ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
MPLS์™€ ๊ฐ™์€ ๋ ˆ์ด๋ธ” ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜..?

์‚ฌ๋ฌผ์— ๋ ˆ์ด๋ธ”์„ ์ง€์ •ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์—์„œ... ์„œ๋น„์Šค๋‹น ํ•˜๋‚˜์˜ IP + ํ•˜๋‚˜๋ฅผ ํ• ๋‹นํ•˜๋ฉด
์—”๋“œํฌ์ธํŠธ๋‹น IP(์„œ๋น„์Šค+ํฌ๋“œ ์ปคํ”Œ), ์ด๋Ÿฌํ•œ ์—”๋“œํฌ์ธํŠธ IP๋ฅผ
ํฌ๋“œ๋Š” ์™„์ „ํžˆ ์ƒํƒœ ๋น„์ €์žฅ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

``````

  • ํ˜ธ์ŠคํŠธ ์™ธ๋ถ€:{from: clientIP:clientPort, to: externalIP:servicePort}
    ------[์—˜๋น„]
    ํ•˜๋‚˜์˜ ๋์ ์„ ์„ ํƒ]--------> {from: clientIP:clientPort, to:
    endpointServiceIP:podPort} --> ํ˜ธ์ŠคํŠธ๋กœ์˜ ๊ฒฝ๋กœ
  • ํ˜ธ์ŠคํŠธ์—์„œ ํฌ๋“œ๋กœ:{from: clientIP:clientPort, to: endpointServiceIP:podPort}
    --[๊ธฐ์ค€
    ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ผ์šฐํŒ…]--> {from: clientIP:clientPort , to:
    ๋์  ServiceIP:podPort }

  • ํฌ๋“œ์—์„œ ํ˜ธ์ŠคํŠธ๋กœ:{from: endpointServiceIP:podPort, to: clientIP:clientPort}
    --------[๋ผ์šฐํ„ฐ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ผ์šฐํŒ…]-----> {from:
    endpointServiceIP:podPort, ๋Œ€์ƒ: clientIP:clientPort} - ํ˜ธ์ŠคํŠธ ๋Œ€์ƒ
    ์™ธ๋ถ€:{from: endpointServiceIP:podPort, to: clientIP:clientPort}
    --------[์—˜๋น„]
    SNATs back]------------------> {from: clientIP:clientPort , to:
    e xternalIP:servicePort } ```

clusterIP์—์„œ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment-172438133
.

``````

๋‚˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋‚ด ํŽธ์—์„œ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (๋‚ด ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์— ์ˆœ์ˆ˜ํ•œ netns ์‚ฌ์šฉ
์ง€๊ธˆ์€).

ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์„œ๋น„์Šค IP ๋ฒ”์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ผ์šฐํŒ… ํ•ญ๋ชฉ์˜ ์ˆ˜๋ฅผ ์ค„์ด์‹ญ์‹œ์˜ค.

cli -- elb -- h1 -- c1

| `--- c2

`--- h2 -- c2

h1_ep_ip_ranges=( 10.1.1.0/24 10.1.2.0/24 )
h2_ep_ip_ranges=( 10.1.3.0/24 )

ping ATM ์—†์Œ(PREROUTING ์ฒด์ธ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š” ํŒจํ‚ท...),
์ž ์ด ํ•„์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‚ด์ผ ;)

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 6์‹œ 28๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

GCE์—์„œ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ AWS์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ œํ•œ๋œ ์ˆ˜์˜ ์ •์  ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ IP ๋ฒ”์œ„ 2๊ฐœ๋ฅผ ํ•จ๊ป˜ ํ”ผ๊ธฐ๋ฐฑํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
๋…ธ์„ . ์ง€์ถœํ•ด์•ผ ํ•  IP๊ฐ€ ๋งŽ์ง€๋งŒ UDP์—๋งŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ฐ–์œผ๋กœ ์‹œ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ IP๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€๊ณ  ์žˆ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ์ž‘์—…์—์„œ "์ถ”๊ฐ€" IP๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
pingํ•˜์ง€๋งŒ TCP ๋˜๋Š” UDP๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Œ).

์–ธ์  ๊ฐ„ ๋‹ค์‹œ ํ•ด๋ด์•ผ๊ฒ ๋„ค์š”.

๋‚˜๋Š” ์กฐ๊ธˆ ๋” ๋‚˜์•„๊ฐ”์ง€๋งŒ, ๋‚ด๊ฐ€ ์˜ˆ์ƒํ–ˆ์–ด์•ผ ํ•˜๋Š” ์ผ์ด ์ผ์–ด๋‚ฌ๋‹ค.

๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ 10.244.2.8/25์™€ 10.244.2.250/25๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋“œ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
"์„œ๋น„์Šค ๋‚ด" ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. UDP๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.
.250 ๋ฐ SNAT์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌผ๋ก  ํด๋ผ์ด์–ธํŠธ๊ฐ€
๋™์ผํ•œ /25์— ์žˆ์ง€ ์•Š์Œ(์ผ ์ˆ˜ ์—†์Œ) ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
.8 ์ฃผ์†Œ์—์„œ ์˜ต๋‹ˆ๋‹ค. tcpdump๋Š” ์‘๋‹ต์ด .8์—์„œ ์™”๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
UDP๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ณณ์—์„œ ๋‹ค์‹œ. ์ƒ๊ฐํ•  ์˜ˆ์ •์ด๋‹ค
๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋”.

2016๋…„ 1์›” 18์ผ ์›”์š”์ผ ์˜ค์ „ 2์‹œ 59๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

๋‚˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋‚ด ํŽธ์—์„œ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (๋‚ด ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์— ์ˆœ์ˆ˜ํ•œ netns ์‚ฌ์šฉ
์ง€๊ธˆ์€).

ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์„œ๋น„์Šค IP ๋ฒ”์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ผ์šฐํŒ… ํ•ญ๋ชฉ์˜ ์ˆ˜๋ฅผ ์ค„์ด์‹ญ์‹œ์˜ค.

cli -- elb -- h1 -- c1

| `--- c2

`--- h2 -- c2

h1_ep_ip_ranges=( 10.1.1.0/24 10.1.2.0/24 )
h2_ep_ip_ranges=( 10.1.3.0/24 )

ping ATM ์—†์Œ(PREROUTING ์ฒด์ธ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š” ํŒจํ‚ท...),
์ž ์ด ํ•„์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‚ด์ผ ;)

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 6์‹œ 28๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

GCE์—์„œ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ AWS์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ œํ•œ๋œ ์ˆ˜์˜ ์ •์  ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ IP ๋ฒ”์œ„๋ฅผ ํ•จ๊ป˜ ํ”ผ๊ธฐ๋ฐฑํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
ํ•˜๋‚˜์˜
๋…ธ์„ . ์ง€์ถœํ•ด์•ผ ํ•  IP๊ฐ€ ๋งŽ์ง€๋งŒ UDP์—๋งŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ฐ–์œผ๋กœ ์‹œ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฌด์—‡.
์˜ค๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ IP๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€๊ณ  ์žˆ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ์ž‘์—…์—์„œ "์ถ”๊ฐ€" IP๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
pingํ•˜์ง€๋งŒ TCP ๋˜๋Š” UDP๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Œ).

์–ธ์  ๊ฐ„ ๋‹ค์‹œ ํ•ด๋ด์•ผ๊ฒ ๋„ค์š”.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -172497456
.

์ด๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋”๋ผ๋„ (Abhishek์„ ํ†ตํ•ด) ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ
track์€ ์–ด๋”˜๊ฐ€์— ํ๋ฅด๋ฏ€๋กœ ๊ฒฐ๊ตญ์—๋Š” stateless๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

2016๋…„ 1์›” 18์ผ ์›”์š”์ผ ์˜คํ›„ 9์‹œ 50๋ถ„์— Tim Hockin [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์กฐ๊ธˆ ๋” ๋‚˜์•„๊ฐ”์ง€๋งŒ, ๋‚ด๊ฐ€ ์˜ˆ์ƒํ–ˆ์–ด์•ผ ํ•˜๋Š” ์ผ์ด ์ผ์–ด๋‚ฌ๋‹ค.

10.244.2.8/25๋ฅผ ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋“œ๋ฅผ ์„ค์ •ํ•˜๊ณ 
10.244.2.250/25๋ฅผ "์„œ๋น„์Šค ๋‚ด" ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด๊ฐ€
UDP๋ฅผ .250์œผ๋กœ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ฐ์ง€ํ•˜์—ฌ SNAT๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌผ๋ก ,
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผํ•œ /25(์ผ ์ˆ˜ ์—†์Œ)์— ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’
.8 ์ฃผ์†Œ์—์„œ ์˜ค๋Š” ๊ฒฝ๋กœ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. tcpdump๋Š” ๋‹ค์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์‘๋‹ต์€ UDP๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ .8์—์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ณณ์—์„œ ๋‹ค์‹œ. ์ƒ๊ฐํ•  ์˜ˆ์ •์ด๋‹ค
๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋”.

2016๋…„ 1์›” 18์ผ ์›”์š”์ผ ์˜ค์ „ 2์‹œ 59๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

๋‚˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋‚ด ํŽธ์—์„œ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (๋‚ด ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์— ์ˆœ์ˆ˜ํ•œ netns ์‚ฌ์šฉ
์ง€๊ธˆ์€).

ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์„œ๋น„์Šค IP ๋ฒ”์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ผ์šฐํŒ… ํ•ญ๋ชฉ์˜ ์ˆ˜๋ฅผ ์ค„์ด์‹ญ์‹œ์˜ค.

cli -- elb -- h1 -- c1

| `--- c2

`--- h2 -- c2

h1_ep_ip_ranges=( 10.1.1.0/24 10.1.2.0/24 )
h2_ep_ip_ranges=( 10.1.3.0/24 )

ping ATM ์—†์Œ(PREROUTING ์ฒด์ธ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š” ํŒจํ‚ท...),
์ž ์ด ํ•„์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‚ด์ผ ;)

2016๋…„ 1์›” 18์ผ ์˜คํ›„ 6์‹œ 28๋ถ„์— Tim Hockin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

GCE์—์„œ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ AWS์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ œํ•œ๋œ ์ˆ˜์˜ ์ •์  ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ IP ๋ฒ”์œ„๋ฅผ ํ•จ๊ป˜ ํ”ผ๊ธฐ๋ฐฑํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
ํ•˜๋‚˜์˜
๋…ธ์„ . ์ง€์ถœํ•ด์•ผ ํ•  IP๊ฐ€ ๋งŽ์ง€๋งŒ UDP์—๋งŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ฐ–์œผ๋กœ ์‹œ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฌด์—‡.
์„œ๋น„์Šค์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— IP๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋Š”
๊ทธ๋ฆฌ๊ณ  ๊ฐ€๊ณ  ์žˆ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ์ž‘์—…์—์„œ "์ถ”๊ฐ€" IP๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
~ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค
pingํ•˜์ง€๋งŒ TCP ๋˜๋Š” UDP๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Œ).

์–ธ์  ๊ฐ„ ๋‹ค์‹œ ํ•ด๋ด์•ผ๊ฒ ๋„ค์š”.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -172497456
.

๊ทธ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค :-(์™œ ๊ทธ๋Ÿฐ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด MPLS๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹œ๋„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋ฐฐ์šฐ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค์— 2๊ฐœ์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๊ณ  ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐฑ์—”๋“œ๋ฅผ ๋ณด๋‚ด๋ ค๋Š” ๊ฒฝ์šฐ
ํŒจํ‚ท, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ํ๋ฆ„์„ ์ถ”์ ํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‹น์‹ ์€
๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ์—์„œ ํŒจํ‚ท์„ ๋ถ„๋ฌดํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ?

2016๋…„ 1์›” 20์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 12์‹œ 24๋ถ„, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

๊ทธ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค :-(๊ทธ๋Ÿฐ๋ฐ ์™œ ๊ทธ๋Ÿฐ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
MPLS ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด์จŒ๋“  ๋ฐฐ์šฐ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -173348973
.

UDP ์›Œํฌ๋กœ๋“œ์˜ ๊ฒฝ์šฐ ์˜ˆ๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. UDP์— ๋Œ€ํ•ด์„œ๋„ ์ƒํƒœ ๋น„์ €์žฅ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์„ ํƒ ์‚ฌํ•ญ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @qoke ์ด์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด

๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ IP ํ•ด์‹ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ๋ฆ„์„ ๋ณด๋‹ค ์•ˆ์ •์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋ฅผ "์ผ์ข…์˜ ์ถ”์ "์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค :-)).

@MikaelCluseau ์šฐ๋ฆฌ๋Š” ๋งค์šฐ ๊ฐ€๋ฒผ์šด UDP "

UDP ๋ฐ์ดํ„ฐ๊ทธ๋žจ ์Šค์ผ€์ค„๋ง์„ ์œ„ํ•ด IPVS ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ UDP ๋ฐ์ดํ„ฐ๊ทธ๋žจ ์Šค์ผ€์ค„๋ง์„ ๊ธฐ๋กํ•˜๊ณ  ๊ธฐ๋ณธ UDP ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” 300์ดˆ์ž…๋‹ˆ๋‹ค. UDP ์—ฐ๊ฒฐ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๊ธฐ ์ „์— ๋™์ผํ•œ ์†Œ์ผ“(ํ”„๋กœํ† ์ฝœ, IP ์ฃผ์†Œ ๋ฐ ํฌํŠธ)์˜ ๋ชจ๋“  UDP ๋ฐ์ดํ„ฐ๊ทธ๋žจ์ด ๋™์ผํ•œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

-- http://kb.linuxvirtualserver.org/wiki/IPVS ์—์„œ ์ธ์šฉ

๋ฌผ๋ก  ์ด๊ฒƒ์€ ๋‹จ์ผ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ์†Œ์Šค ํฌํŠธ๊ฐ€ ๋‹ค์–‘ํ•œ ๋‹จ์ผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๋Œ€์šฉ๋Ÿ‰ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๊ณ  ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด ๋™์ผํ•œ ์†Œ์Šค ํฌํŠธ์—์„œ ์ „์†ก๋˜๊ณ  ์ด๋ฅผ ์—ฌ๋Ÿฌ ๋ฐฑ์—”๋“œ์— ๊ฑธ์ณ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ƒํƒœ ๋น„์ €์žฅ/๋ถ„๋ฌด ๋ฐ ๊ธฐ๋„ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์„ ํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋งŽ์€ DNS ๋ฐ RADIUS ํŠธ๋ž˜ํ”ฝ์„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•ฉ๋‹ˆ๋‹ค. DNS๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ๋ฒ”์ฃผ(๋งŽ์€ ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ๋งŽ์€ ์†Œ์Šค ํฌํŠธ๊ฐ€ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ)์— ์†ํ•˜๊ณ  RADIUS๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜์ค‘ ๋ฒ”์ฃผ(์ ์€ ํด๋ผ์ด์–ธํŠธ, ๋งŽ์€ ํŒจํ‚ท ๋ชจ๋‘์—์„œ ๋™์ผํ•œ IP/ํฌํŠธ). RADIUS์— ๋Œ€ํ•ด ์ƒํƒœ ๋น„์ €์žฅ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์†Œ์Šค ํฌํŠธ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •ํ•˜์—ฌ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ์€ ํ›„์—๋„ kube-proxy์— ๋Œ€ํ•œ iptables ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์™ธ๋ถ€ IP๊ฐ€ ์ˆจ๊ฒจ์ง€๋Š” ๋ฌธ์ œ(#10921)๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ œ์•ˆ๋œ ๋Œ€๋กœ v1.1์—์„œ iptables ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ ์‹ค์ œ IP๊ฐ€ ์•„๋‹Œ ํด๋Ÿฌ์Šคํ„ฐ์˜ IP๊ฐ€ ์—ฌ์ „ํžˆ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํด๋Ÿฌ์Šคํ„ฐ๋Š” GCE์— ์žˆ์œผ๋ฉฐ ์šฐ๋ฆฌ๋Š” ๋ผ์ด๋ธŒ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— HTTPS๋ฅผ ์ง€์›ํ•˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. GCE๋Š” v.1.2 ์•ŒํŒŒ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด Ingress(AFAIK๊ฐ€ HTTPS ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ง€์›ํ•จ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Network Load Balancer๊ฐ€ ์œ ์ผํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ถ„๋ช…ํžˆ ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž์˜ ์‹ค์ œ IP๋ฅผ ๋กœ๊น…ํ•˜๋Š” ๊ธฐ๋Šฅ ์—†์ด๋Š” ๋ผ์ด๋ธŒ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์‹ ๊ทœ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์„ค๋ช…์„ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. HTTPS ์ง€์›์€ ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๋‚˜๋Š” ๊ฝค ์˜ค๋žซ๋™์•ˆ iptables ํ”„๋ก์‹œ๋ฅผ ์ผœ๊ณ  ๋„๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ์˜ ์™ธ๋ถ€ IP๊ฐ€ ์—ฌ์ „ํžˆ ์ˆจ๊ฒจ์ ธ ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค/ํด๋Ÿฌ์Šคํ„ฐ IP๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ HTTP/HTTPS ํ”„๋ก์‹œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์†Œ์Šค IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•จ์œผ๋กœ์จ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@macof ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ์—์„œ ์‹คํ–‰๋˜๋Š” HTTP/HTTPS๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

@javiercr ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฌ๋“œ ์‚ฌ์–‘์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. http://pastie.org/private/zpdelblsob654zif7xus5g

ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํฌ๋“œ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ IP๋ฅผ ํ• ๋‹น๋ฐ›๋Š” ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ ๋„คํŠธ์›Œํฌ์—์„œ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, nginx ์„œ๋ฒ„๊ฐ€ ํฌํŠธ 80/443์— ๋ฐ”์ธ๋”ฉ๋˜๋ฉด ํ˜ธ์ŠคํŠธ IP์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๊ณ  ์†Œ์Šค IP ์ฃผ์†Œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” kubernetes 1.1, /opt/bin/kube-proxy ... --proxy-mode=iptables --masquerade-all=false ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  kube-proxy๊ฐ€ ์žˆ๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ IP ๋„คํŠธ์›Œํฌ๋ฅผ ๋ผ์šฐํŒ…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์—์„œ ๋‚ด ์„œ๋น„์Šค๋Š” ์™ธ๋ถ€ IP๋ฅผ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ IP์™€ ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

I0221 01:20:32.695440       1 main.go:224] <A6GSXEKN> Connection from 202.22.xxx.yyy:51954 closed.

์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ๊ณ  ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค!

์ฐธ๊ณ ๋กœ ์ด ๋ฌธ์„œ์—์„œ๋Š” AWS ELB๊ฐ€ TCP ์—ฐ๊ฒฐ์— ๋ผ์šด๋“œ ๋กœ๋นˆ์„ ์‚ฌ์šฉํ•˜๊ณ  http/https์— ๋Œ€ํ•ด ์ตœ์†Œ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/how-elb-works.html# ์š”์ฒญ ๋ผ์šฐํŒ…

ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ์—๋งŒ ์š”์ฒญ์„ ๋ฐ›๊ณ  ๋กœ์ปฌ ํฌ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๊ฒƒ์ด ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์˜ ์ข‹์€ ๋ถ€์ˆ˜์  ์ด์ ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋…ธ๋“œ ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์ด ์ ๊ณ  ์„œ๋น„์Šค์—์„œ ํฌ๋“œ๋กœ ํ•ญ์ƒ ๋กœ์ปฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ฐœ์„ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์—ฌ๋Ÿฌ ๊ฐ€์šฉ ์˜์—ญ).

๊ฐ€์ค‘์น˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ๋…ธ๋“œ์— ํ•ญ์ƒ ๋™์ผํ•œ ์ˆ˜์˜ ํฌ๋“œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ๋‹ค์Œ(๋…ธ๋“œ๋‹น 1๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ) ๋‹ค์Œ ์‚ฌ์ด์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜์—ฌ ๋ณต์ œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ƒํ™ฉ์—์„œ ๋…ธ๋“œ์—์„œ ํฌ๋“œ๋ฅผ ์ด๋™ํ•ด์•ผ ํ•˜๊ณ  ํŠน์ • ๋ณต์ œ๋ณธ ์ˆ˜๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค๊ฐ€ ์žˆ๋Š” 4๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ ํ—ˆ์šฉ๋˜๋Š” ํฌ๋“œ ๋ณต์ œ๋ณธ์˜ ์œ ์ผํ•œ ์ˆ˜๋Š” 1,2,3,4,6,8,9,12,16,20 ๋“ฑ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํŠธ๋ž˜ํ”ฝ์ด ๋กœ์ปฌ ํฌ๋“œ๋กœ๋งŒ ๋ผ์šฐํŒ…๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํฌ๋“œ๊ฐ€ ๋กœ์ปฌ์— ์—†์„ ๋•Œ ๋…ธ๋“œ์—์„œ ๋…ธ๋“œ ํฌํŠธ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ TCP ์ƒํƒœ ํ™•์ธ์„ ํ†ตํ•ด ์š”์ฒญ์ด ํ•ด๋‹น ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์ด๊ฒƒ์˜ iptables\kube-proxy ๋ถ€๋ถ„์— ๋Œ€ํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํฌ๋“œ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์—์„œ ๊ท ํ˜•์„ ์ด๋ฃจ์ง€ ์•Š์„ ๋•Œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. API ํ˜ธ์ถœ์„ ํ†ตํ•ด ๊ฐ ๋…ธ๋“œ์— ๊ฐ€์ค‘์น˜๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์ด๋ฏธ ๋‹ค๋ฅธ ๋™์  ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค๊ฐ€ ๊ฐ API ํ˜ธ์ถœ์— ๋Œ€ํ•ด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋”ฐ๋ผ ์–ด์จŒ๋“  ๋…ธ๋“œ์— 2๊ฐœ์˜ ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ 1๊ฐœ์˜ ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ 2๋ฐฐ ํŠธ๋ž˜ํ”ฝ์„ ์ง€์›ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ์ œํ•œ์ด ์„ค์ •๋˜๊ณ  ํฌ๋“œ๋…ธ๋“œ์—์„œ ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰ ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๋ฉด ์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ€์ค‘์น˜ ์„ค์ •์„ ์ฐพ๋Š” ๋ฐ ๋˜ ๋‹ค๋ฅธ ๋ณต์žก์„ฑ ๊ณ„์ธต์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์„ ํ”ผํ•˜๊ณ  kubernetes์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๊ฐ€์ค‘์น˜๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

@yoshiwaan ์ด ๋ฌธ์ œ๊ฐ€ ์ด์ œ ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋…ธ๋“œ ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ์ œ์•ˆ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐœ์ธ์ ์œผ๋กœ ์ข‹์€ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” _if_ ํฌ๋“œ๊ฐ€ ๋กœ์ปฌ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋กœ์ปฌ ํฌ๋“œ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ์— ํฌ๋“œ๊ฐ€ ์žˆ๋„๋ก RC๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@justinsb +1, ๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ์„ค์ •์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋„ˆ๋ฌด ์ˆœ์ง„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๋ชจ๋“œ์™€ iptables์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ •๋ง๋กœ ์‚ฌ์šฉ์ž ๋ฌธ์„œ ์—์„œ ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Userland ๋ชจ๋“œ๋Š” kube-proxy๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  ์„œ๋ฒ„์— ๋Œ€ํ•œ ์†Œ์ผ“์„ ์—ด์–ด ์—ฐ๊ฒฐ ์ž์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” (1) ํ›จ์”ฌ ๋” ๋งŽ์€ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•˜๊ณ  (2) ๋‹จ์ผ ํฌํŠธ ์ˆ˜๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค(<65k). iptables ๋ชจ๋“œ๋Š” ์ปค๋„์˜ ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๋Œ€์‹  ์—ฐ๊ฒฐ ์ถ”์ ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๋” ๋งŽ์€ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค*.

(ํŽธ์ง‘) (*) SNAT ํŒจํ‚ท์ด ํ†ต๊ณผํ•˜์ง€ ์•Š๋Š” ํ•œ, ํŒจํ‚ท์ด ์—ฐ๊ฒฐ๋œ ์—ฐ๊ฒฐ ์ถ”์  ๊ทœ์น™์„ ํ†ต๊ณผํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ผ์šฐํŒ…๋œ ์•ก์„ธ์Šค ๋””์ž์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด SNAT๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋น„์Šค์˜ ๋์ ์ด ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์˜ IP๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@MikaelCluseau
์ฆ‰, kube-proxy๋Š” iptables ๊ทœ์น™์„ ์„ค์ •ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ๋งŒ ํ•˜๋ฉฐ ๋” ์ด์ƒ iptables ๋ชจ๋“œ์—์„œ ๊ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์ž„์˜์˜ ๋กœ์ปฌ ํฌํŠธ๋ฅผ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

2016๋…„ 4์›” 19์ผ ์˜คํ›„ 10์‹œ 51๋ถ„์— Emma He๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

kube-proxy๋Š” ์„ค์ • ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ์—๋งŒ ์ฑ…์ž„์ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
iptables ๋ฐ ์šฐ๋ฆฌ๋Š” ๋” ์ด์ƒ ๊ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ž„์˜์˜ ๋กœ์ปฌ ํฌํŠธ๋ฅผ ์–ป์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
iptables ๋ชจ๋“œ ๋งž์ฃ ?

์˜ˆ.

๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋” ์ผ์ฐ ์ ˆ๋Œ€์ ์œผ๋กœ ๋†“์ณค๋‹ค.

(ํŽธ์ง‘) (*) SNAT ํŒจํ‚ท์ด ํ†ต๊ณผํ•˜์ง€ ์•Š๋Š” ํ•œ, ํŒจํ‚ท์ด ์—ฐ๊ฒฐ๋œ ์—ฐ๊ฒฐ ์ถ”์  ๊ทœ์น™์„ ํ†ต๊ณผํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ผ์šฐํŒ…๋œ ์•ก์„ธ์Šค ๋””์ž์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด SNAT๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋น„์Šค์˜ ๋์ ์ด ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์˜ IP๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@MikaelCluseau ๋‚˜๋Š” iptables๊ฐ€ SNAT์™€ DNAT๋ฅผ ์ฑ„ํƒ

2016๋…„ 4์›” 20์ผ ์˜คํ›„ 1์‹œ 59๋ถ„์— Emma He๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@MikaelCluseau https://github.com/MikaelCluseau ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ
iptables๋Š” SNAT ๋ฐ DNAT๋ฅผ ์ฑ„ํƒํ•˜์ง€๋งŒ ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ €๋ฅผ ์œ„ํ•ด ์ด๊ฒƒ์„ ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

(1) ์„œ๋น„์Šค/์™ธ๋ถ€ IP๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DNAT๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
(2) ์‘๋‹ต ํŒจํ‚ท์ด ๋™์ผํ•œ conntrack์„ ํ†ต๊ณผํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ
๊ทœ์น™(์ฆ‰, ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์Šคํƒ ๋˜๋Š” ๋ณต์ œ๋œ conntrack ํ…Œ์ด๋ธ”),
SNAT ๋ถ€๋ถ„์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, MASQUERADE ๊ทœ์น™).

(2)์˜ ์กฐ๊ฑด์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํŒ…๋œ ์•ก์„ธ์Šค ๋„คํŠธ์›Œํฌ ์„ค๊ณ„์—์„œ ์–‘ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
(๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋””์ž์ธ).

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„

  • ํด๋ผ์ด์–ธํŠธ 1.0.1.1,
  • ์„œ๋น„์Šค 1.0.2.1,
  • ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํฌ๋“œ 1.0.3.1.

๊ทธ ๋‹ค์Œ์—,

  1. ๋ผ์šฐํ„ฐ/๋ฐฉํ™”๋ฒฝ/๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ/ํ˜ธ์ŠคํŠธ/ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ
    ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ "1.0.1.1 -> 1.0.2.1" ํŒจํ‚ท์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  2. ํŒจํ‚ท์ด "1.0.1.1 ->์ด ๋˜๋„๋ก ์—”๋“œํฌ์ธํŠธ(ํฌ๋“œ)์— DNAT๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ 1.0.3.1";
  3. ํฌ๋“œ๋Š” "1.0.3.1 -> 1.0.1.1" ํŒจํ‚ท์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
  4. ํŒจํ‚ท์€ ๋ผ์šฐํ„ฐ/๋ฐฉํ™”๋ฒฝ/๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ/ํ˜ธ์ŠคํŠธ/๋ฌด์—‡์ด๋“  ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
    conntrack ๊ทœ์น™์ด ์žˆ๋Š” ๊ฒฝ์šฐ conntrack ์‹œ์Šคํ…œ์€ ํŒจํ‚ท์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ๋ณด๋‚ด๊ธฐ ์ „์— "1.0.2.1 -> 1.0.1.1"๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

(2)์˜ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด SNAT/MASQUERADING์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒจํ‚ท์ด
๋ผ์šฐํ„ฐ/๋ฐฉํ™”๋ฒฝ/๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ/ํ˜ธ์ŠคํŠธ/์—ฐ๊ฒฐ ์ถ”์ .

@MikaelCluseau - google.com์—์„œ ๋‚ด github ์ด๋ฆ„์œผ๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์„ธ์š”.
๋‹น์‹ ์„ ์œ„ํ•ด ๋ญ”๊ฐ€

2016๋…„ 4์›” 19์ผ ํ™”์š”์ผ ์˜คํ›„ 8:20, Mikaรซl Cluseau [email protected]
์ผ๋‹ค:

2016๋…„ 4์›” 20์ผ ์˜คํ›„ 1์‹œ 59๋ถ„์— Emma He๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@MikaelCluseau https://github.com/MikaelCluseau ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ
iptables๋Š” SNAT ๋ฐ DNAT๋ฅผ ์ฑ„ํƒํ•˜์ง€๋งŒ ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ €๋ฅผ ์œ„ํ•ด ์ด๊ฒƒ์„ ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

(1) ์„œ๋น„์Šค/์™ธ๋ถ€ IP๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DNAT๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
(2) ์‘๋‹ต ํŒจํ‚ท์ด ๋™์ผํ•œ conntrack์„ ํ†ต๊ณผํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ
๊ทœ์น™(์ฆ‰, ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์Šคํƒ ๋˜๋Š” ๋ณต์ œ๋œ conntrack ํ…Œ์ด๋ธ”),
SNAT ๋ถ€๋ถ„์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, MASQUERADE ๊ทœ์น™).

(2)์˜ ์กฐ๊ฑด์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํŒ…๋œ ์•ก์„ธ์Šค ๋„คํŠธ์›Œํฌ ์„ค๊ณ„์—์„œ ์–‘ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
(๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋””์ž์ธ).

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„

  • ํด๋ผ์ด์–ธํŠธ 1.0.1.1,
  • ์„œ๋น„์Šค 1.0.2.1,
  • ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํฌ๋“œ 1.0.3.1.

๊ทธ ๋‹ค์Œ์—,

  1. ๋ผ์šฐํ„ฐ/๋ฐฉํ™”๋ฒฝ/๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ/ํ˜ธ์ŠคํŠธ/ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ
    ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ "1.0.1.1 -> 1.0.2.1" ํŒจํ‚ท์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  2. ํŒจํ‚ท์ด "1.0.1.1 ->์ด ๋˜๋„๋ก ์—”๋“œํฌ์ธํŠธ(ํฌ๋“œ)์— DNAT๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ 1.0.3.1";
  3. ํฌ๋“œ๋Š” "1.0.3.1 -> 1.0.1.1" ํŒจํ‚ท์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
  4. ํŒจํ‚ท์€ ๋ผ์šฐํ„ฐ/๋ฐฉํ™”๋ฒฝ/๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ/ํ˜ธ์ŠคํŠธ/๋ฌด์—‡์ด๋“  ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
    conntrack ๊ทœ์น™์ด ์žˆ๋Š” ๊ฒฝ์šฐ conntrack ์‹œ์Šคํ…œ์€ ํŒจํ‚ท์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ๋ณด๋‚ด๊ธฐ ์ „์— "1.0.2.1 -> 1.0.1.1"๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

(2)์˜ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด SNAT/MASQUERADING์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒจํ‚ท์ด
๋ผ์šฐํ„ฐ/๋ฐฉํ™”๋ฒฝ/๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ/ํ˜ธ์ŠคํŠธ/์—ฐ๊ฒฐ ์ถ”์ .

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/3760#issuecomment -212230959

@justinsb @yoshiwaan๋Š” ๋ˆ„๊ตฌ๋„ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ฐฝ์กฐ ํ•˜์…จ ๋Š”๊ฐ€? ๋‚ด ๊ฒ€์ƒ‰ fu๋Š” ๋‚˜๋ฅผ ์‹คํŒจํ•˜๊ณ  ๋‚˜๋„ ๋น„์Šทํ•œ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ด์ œ ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋…ธ๋“œ ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ์ œ์•ˆ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐœ์ธ์ ์œผ๋กœ ์ข‹์€ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ํฌ๋“œ๊ฐ€ ๋กœ์ปฌ ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ๋กœ์ปฌ ํฌ๋“œ๋กœ ๋ผ์šฐํŒ…ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ์— ํฌ๋“œ๊ฐ€ ์žˆ๋„๋ก RC๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ง์ ‘ ํ‚ค์šด๊ฒŒ ์•„๋‹ˆ๋ผ

Ahhhhh, ์ฐพ์€ ๊ฒƒ ๊ฐ™์•„์š”. ์ด๊ฒƒ์€ ๊ธฐ๋Šฅ/์ˆ˜์ •์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค: https://github.com/kubernetes/features/issues/27

1.5.x์˜ ๋ฒ ํƒ€ ๋ฒ„์ „์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰