์ ๋ ์ด์ 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
๋ฉ์๋! ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ํ์คํ ๋ณํฉํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ณ๋์ ๋ฉ๋ชจ์์, ํ๋ก์๊ฐ ๊ณผ๋ถํ ์ํ์์ ์ฝ์ด์ ~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 ์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด ์๋๋๊น? ์๋๋ฉด ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
@ํ ํจ
์ฌ์ฉ์ ๊ณต๊ฐ ํ๋ก์ ์ฌ์ฉ
๊ฐ์ 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) {
์ค์ ๋ก ๊ทธ๋ณด๋ค ์ค๋๋ ํธ์คํธ๋ฅผ ๋ณผ ์ ์์ต๋๊น?
ํ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ์คํ ์๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์คํ ์ค์ธ 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-
์ฐ๋ฆฌ๋ 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 -OTHROUGHPUT,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๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด ํ์ฌ ์๊ฐ์ ํฌ๋์ ์ก์ธ์ค ์ ์ฑ ์ ๋ค์ ์ค ํ๋๋ก ์ง์ ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ 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 . ๊ทธ๋ฆฌ๊ณ ๋ค, ์ ๋ง ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค :-)
์๋ํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๊ฒ์...
์ด๋ฐ ์์ผ๋ก ์ค๋ฒํค๋๋ ์ ์ฐ๊ฒฐ๋น 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: 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 ๋ฒ์์ ์ํฅ์ ๋ฏธ์น๋ ์ ๊ทผ ๋ฐฉ์์ ์๋ํ๊ณ ์์ต๋๋ค.
๋ผ์ฐํ
ํญ๋ชฉ์ ์๋ฅผ ์ค์ด์ญ์์ค.
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)์ ์กฐ๊ฑด์ ์ผ๋ฐ์ ์ผ๋ก ๋ผ์ฐํ
๋ ์ก์ธ์ค ๋คํธ์ํฌ ์ค๊ณ์์ ์ํธํฉ๋๋ค.
(๋ด๊ฐ ์๊ฐํ ์์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋์์ธ).
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง
๊ทธ ๋ค์์,
(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.0.1.1 -> 1.0.2.1" ํจํท์ด ํ์๋ฉ๋๋ค.- ํจํท์ด "1.0.1.1 ->์ด ๋๋๋ก ์๋ํฌ์ธํธ(ํฌ๋)์ DNAT๋ฅผ ์ง์ ํฉ๋๋ค.
ํด๋ฌ์คํฐ ๋คํธ์ํฌ์์ 1.0.3.1";- ํฌ๋๋ "1.0.3.1 -> 1.0.1.1" ํจํท์ผ๋ก ์๋ตํฉ๋๋ค.
- ํจํท์ ๋ผ์ฐํฐ/๋ฐฉํ๋ฒฝ/๋ก๋ ๋ฐธ๋ฐ์/ํธ์คํธ/๋ฌด์์ด๋ ํต๊ณผํฉ๋๋ค.
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์ ๋ฒ ํ ๋ฒ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.