[Kubernetes] ๐ฆ ์ฟ ๋ฒ๋คํฐ์ค ํธ๋ํฝ ๊ตฌ์กฐ: ๋ก๋๋ฐธ๋ฐ์๋ ์ด๋์ ๋ค์ด๊ฐ๊น
์ฟ ๋ฒ๋คํฐ์ค์์ ๋ก๋๋ฐธ๋ฐ์๊ฐ ๋ค์ด๊ฐ๋ ๋ ์๋ฆฌ(๋ง์คํฐ ์, ์ฑ ์)๋ฅผ ๊ตฌ๋ถํ๊ณ , ์ฑ ์์ฒญ์ด ๋ง์คํฐ๋ฅผ ๊ฑฐ์น์ง ์๋ ์ปจํธ๋กค ํ๋ ์ธ vs ๋ฐ์ดํฐ ํ๋ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค์์ ๋ก๋๋ฐธ๋ฐ์๊ฐ ์ ํํ ์ด๋์ ๋ค์ด๊ฐ๋์ง ํท๊ฐ๋ฆฌ๋ฉด ํธ๋ํฝ ๊ตฌ์กฐ ์ ์ฒด๊ฐ ์ ๊ทธ๋ ค์ง๋๋ค. ์ด ๊ธ์์๋ LB๊ฐ ๋ค์ด๊ฐ ๋ ์๋ฆฌ(๋ง์คํฐ API ์๋ฒ ์, ์ฑ ์ธ๊ทธ๋ ์ค ์)๋ฅผ ๊ตฌ๋ถํ๊ณ , โ๋ง์คํฐ๊ฐ ์ฌ๋ฌ ๋๋ฉด LB๊ฐ ํ์ ์๋คโ๋ ํํ ์คํด๋ฅผ ์ ์ ํ๋ฉฐ, ์ฑ ์์ฒญ์ ๋ง์คํฐ๋ฅผ ๊ฑฐ์น์ง ์๋๋ค๋ ์ปจํธ๋กค ํ๋ ์ธ vs ๋ฐ์ดํฐ ํ๋ ์ธ์ ํต์ฌ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
์ด ์๋ฆฌ์ฆ๋ ์ฟ ๋ฒ๋คํฐ์ค gRPC ์ฝ์ง์์ ์ถ๋ฐํด HTTP/2ยทTLSยท๋ก๋๋ฐธ๋ฐ์ยทGateway APIยท์ธ์ฆ์๊น์ง ํ์ด๊ฐ๋ ๊ธฐ๋ก์ ๋๋ค. ์ด๋ฒ 4ํธ์ ์ฟ ๋ฒ๋คํฐ์ค ํธ๋ํฝ ๊ตฌ์กฐ ํธ์ ๋๋ค. ์์ 1ํธ(๋ฌธ์ ์ ํด๊ฒฐ), 2ํธ(h2 vs h2c), 3ํธ(L4 vs L7)์ ๋จผ์ ๋ณด๋ฉด ์ข์ต๋๋ค.
๐ ๋ก๋๋ฐธ๋ฐ์๊ฐ ๋ค์ด๊ฐ ๋ ์๋ฆฌ
์ฟ ๋ฒ๋คํฐ์ค์์ ๋ก๋๋ฐธ๋ฐ์๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ๋ ๋ ๊ตฐ๋ฐ์ ๋๋ค. ์ด ๋์ ๋ถ๋ฆฌํ๋ ๊ฒ ์ด๋ฒ ํธ์ ์ ๋ถ์ ๋๋ค.
| ์๋ฆฌ | ์์น | ๋ค๋ฃจ๋ ํธ๋ํฝ | ์ฌ์ฉ LB |
|---|---|---|---|
| ์๋ฆฌ โ | ๋ง์คํฐ(API ์๋ฒ) ์ | ๊ด๋ฆฌ ํธ๋ํฝ (kubectlยท์์ปค๋ ธ๋ โ ๋ง์คํฐ) | ์ธ๋ถ L4 (HAProxy, kube-vip) |
| ์๋ฆฌ โก | ์ฑ(์ธ๊ทธ๋ ์ค) ์ | ์๋น์ค ํธ๋ํฝ (์ธ๋ถ ์ฌ์ฉ์ โ Pod) | ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ L7 (nginx, Contour) |
์ด ๋์ ๋ชฉ์ ๋, ์์น๋, ๋ค๋ฃจ๋ ํธ๋ํฝ๋ ์์ ํ ๋ค๋ฆ ๋๋ค.
๐ช ์๋ฆฌ โก: ์ธ๊ทธ๋ ์ค โ nginxยทContourยทHAProxy๋ ์๋ก ๋์
์ฑ ํธ๋ํฝ์ด ๋ค์ด์ค๋ ์ ๊ตฌ์ด๋ฉฐ, 3ํธ์์ ๋ณธ L7 ๋ก๋๋ฐธ๋ฐ์๊ฐ ์ฌ๊ธฐ ๋ค์ด๊ฐ๋๋ค.
nginxยทContourยทHAProxy(์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ)ยทEnvoy Gateway ๋ฑ์ ๊ฐ์ ์๋ฆฌ๋ฅผ ๋๊ณ ๊ฒฝ์ํ๋ ๋์๋ค์ ๋๋ค. ์๋ก ์๋ ๊ฒ ์๋๋ผ ํ๋๋ง ๊ณ ๋ฅด๋ฉด ๋ฉ๋๋ค. nginx๋ Contour๋ฅผ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ก ์ฐ๋ฉด, ๊ทธ ์ญํ ์์ HAProxy๋ ๋ฐ๋ก ํ์ ์์ต๋๋ค.
๐งญ ์๋ฆฌ โ : ๋ง์คํฐ ์ LB โ ํํ ์คํด
โ ํํ ์คํด: โ๋ง์คํฐ๊ฐ ์ฌ๋ฌ ๋๋ฉด ์์์ ๋ถ์ฐํ๋๊น, LB๋ ํ์ ์๋ ๊ฑฐ ์๋?โ
์ฌ์ค์ ์ ๋ฐ๋์ ๋๋ค. ๋ง์คํฐ๊ฐ ์ฌ๋ฌ ๋์ธ ๊ฒ์ด ๊ณง LB๊ฐ ํ์ํ ์ด์ ์ ๋๋ค.
API ์๋ฒ๋ค์ ์๋ก ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋๋ ์ฃผ์ง ์์ต๋๋ค. ๋ง์คํฐ 3๋ = ๋ ๋ฆฝ์ ์ผ๋ก ๋๋ API ์๋ฒ 3๊ฐ์ด๊ณ , โ๋ํ ์ฐฝ๊ตฌโ๊ฐ ๋ด์ฅ๋ผ ์์ง ์์ต๋๋ค. LB๊ฐ ์์ผ๋ฉด kubectl์ด ๋ง์คํฐ ํ ๋์ IP๋ฅผ ์ฝ ์ฐ์ด์ผ ํ๊ณ , ๊ทธ ๋ง์คํฐ๊ฐ ์ฃฝ์ผ๋ฉด ๋๋จธ์ง๊ฐ ๋ฉ์ฉกํด๋ ์ ์์ด ๋๊น๋๋ค. HA(๊ณ ๊ฐ์ฉ์ฑ)์ ์๋ฏธ๊ฐ ์ฌ๋ผ์ง๋๋ค.
1
2
3
kubectl โโโถ LB โโโฌโ master1 (API์๋ฒ)
โโ master2 (API์๋ฒ) โ ํ ๋ ์ฃฝ์ด๋ LB๊ฐ ๋ค๋ฅธ ๋ฐ๋ก
โโ master3 (API์๋ฒ)
์ด ์๋ฆฌ์ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ(nginx/Contour)๋ฅผ ๋ชป ์๋๋ค. ๊ทธ๋ค์ ํด๋ฌ์คํฐ ์์์ Pod๋ก ๋๋๋ฐ, ๋ง์คํฐ ์ LB๋ ํด๋ฌ์คํฐ๊ฐ ๋ ์๊ธฐ ์ ์ ๋ฐ๊นฅ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค(๋ญ-๋ฌ๊ฑ ๋ฌธ์ ). ๊ทธ๋์ ์๋ฆฌ โ ์ HAProxyยทkube-vip ๊ฐ์ ์ธ๋ถ L4 LB๊ฐ ํ์ํฉ๋๋ค.
Tip: ๋ง์คํฐ๊ฐ 1๋์ธ ๋ณดํต์ ํ ์คํธ/ํ๋ฉ ๊ตฌ์ฑ์ด๋ฉด ์ด ์๋ฆฌ๋ ์์ ํ์ ์์ต๋๋ค.
๐ ๊ทธ๋ผ ๋ง์คํฐ๋ค๋ผ๋ฆฌ โ์์์โ ํ๋ ๊ฑด ๋ญ๊น
๋ง์คํฐ๋ค์ด ํ์กฐํ๊ธด ํ์ง๋ง, ๊ทธ ํ์กฐ๋ ์ํ ๊ณต์ ์ด์ง ์์ฒญ ๋ถ๋ฐฐ๊ฐ ์๋๋๋ค. ์คํด์ ๋ฟ๋ฆฌ๊ฐ ์ฌ๊ธฐ ์์ต๋๋ค.
- etcd๋ผ๋ ๊ณต๋ ์ ์ฅ์์ ํด๋ฌ์คํฐ ์ํ๋ฅผ ํจ๊ป ๋ณด๊ดํ๊ณ , ๋ด๋ถ์ ์ผ๋ก ๋ฆฌ๋๋ฅผ ๋ฝ์ ๋๊ธฐํํฉ๋๋ค.
- ์ผ๋ถ ์ปดํฌ๋ํธ(์ค์ผ์ค๋ฌ, ์ปจํธ๋กค๋ฌ ๋งค๋์ ๋ฑ)๋ ๋ฆฌ๋๋ฅผ ์ ์ถํด ํ๋๋ง ๋์ํฉ๋๋ค(leader election).
ํ์ง๋ง ์ด๊ฑด ์ ๋ถ โ๋ฐ์ดํฐ๋ฅผ ๋ง์ถ๋โ ์๊ธฐ์ ๋๋ค. โ๋ค์ด์จ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฐฝ๊ตฌ์์ ๋๋ ์ฃผ๋โ ์ผ์ ์๋๋๋ค. ๊ทธ ์ฐฝ๊ตฌ ๋ถ๋ฐฐ๊ฐ ๋ฐ๋ก LB์ ๋ชซ์ ๋๋ค.
๐ง ์ปจํธ๋กค ํ๋ ์ธ vs ๋ฐ์ดํฐ ํ๋ ์ธ โ ์ฑ ์์ฒญ์ ๋ง์คํฐ๋ฅผ ์ ๊ฑฐ์น๋ค
๊ฐ์ฅ ์ค์ํ ๊ตฌ์กฐ์ ์ฌ์ค์ ์ฑ ์์ฒญ์ด ๋ง์คํฐ ์๋ฒ๋ฅผ ํต๊ณผํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค์ ๋ถ๋ฆฌ๋ ๋ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค.
1
2
3
4
5
[๊ด๋ฆฌ ๊ฒฝ๋ก โ ๋ง์คํฐ ์ฌ์ฉ (์ปจํธ๋กค ํ๋ ์ธ)]
kubectl / kubelet โโโถ ๋ง์คํฐ(API์๋ฒ)
[์ฑ ์์ฒญ ๊ฒฝ๋ก โ ๋ง์คํฐ ์ ๊ฑฐ์นจ (๋ฐ์ดํฐ ํ๋ ์ธ)]
ํด๋ผ์ด์ธํธ โโโถ ์ธ๊ทธ๋ ์ค(nginx/Contour) โโโถ Service โโโถ Pod
๋ง์คํฐ๋ โ์ด๋ค Pod๊ฐ ์๋์งโ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ ์ธ๊ทธ๋ ์คยท๋ ธ๋์ ๋ฏธ๋ฆฌ ๋ฟ๋ ค๋ ๋ฟ, ์์ฒญ์ ์ง์ ๋ฐ์ ์ ๋ฌํ์ง ์์ต๋๋ค.
๊ฑด๋ฌผ ๊ด๋ฆฌ์ค ๋น์
- ๋ง์คํฐ = ๊ฑด๋ฌผ ๊ด๋ฆฌ์ค. ๋๊ฐ ๋ช ํธ์ ์ฌ๋์ง ๋ช ๋ถ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ ์ฃผ์๊ฐ ์ค๊ณ ๊ฐ๋ฉด(Pod ์์ฑยท์ญ์ ) ๋ช ๋ถ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
- ์ธ๊ทธ๋ ์ค = ๋ก๋น์ ์๋ด ํ์งํ. ๊ด๋ฆฌ์ค์ด ๊ฐฑ์ ํด๋ ์ ๋ณด๋ก ์ฑ์์ ธ ์์ต๋๋ค.
- ๋ฐฉ๋ฌธ์(์์ฒญ) ๋ ๊ด๋ฆฌ์ค์ ๋ค๋ฅด์ง ์์ต๋๋ค. ํ์งํ๋ง ๋ณด๊ณ ๊ณง์ฅ ํด๋น ํธ์ค(Pod)๋ก ๊ฐ๋๋ค.
๊ทธ๋์ ๋ง์คํฐ๊ฐ ์ ๊น ๋ฐ๋น ๋, ์ด๋ฏธ ๋ ์๋ ์ฑ๋ค์ ๋ฉ์ฉกํ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ง์คํฐ๋ โ์ ๋ณด๋ฅผ ๋๋ ์ฃผ๋ ๋๋โ์ด์ง โ์์ฒญ์ ๋๋ ์ฃผ๋ ์ฐฝ๊ตฌโ๊ฐ ์๋๋๋ค.
๐ 1ํธ์์
port-forward๋ก ์ฑ์ ๊ฒฉ๋ฆฌ ํ ์คํธํ๋๋ฐ, ์ด๊ฑด ์์ธ์ ๋๋ค. port-forward ๊ฐ์ ๋๋ฒ๊ทธ ํต๋ก๋ ๊ด๋ฆฌ ๊ฒฝ๋ก(API ์๋ฒ)๋ฅผ ๊ฑฐ์น๋ ํน์ ์ผ์ด์ค์ ๋๋ค. ์ผ๋ฐ ์๋น์ค ํธ๋ํฝ์ด ๋ง์คํฐ๋ฅผ ์ ๊ฑฐ์น๋ค๋ ๋ป์ ๋๋ค.
โ๏ธ ๋ค: Ingress์ Egress
๊ฐ์ ๋งฅ๋ฝ์์ ์์ฃผ ๋์ค๋ ์ง์ด Ingress / Egress์ด๋ฉฐ, ํธ๋ํฝ์ ๋ฐฉํฅ์ ๊ฐ๋ฆฌํต๋๋ค.
| ๊ตฌ๋ถ | ๋ฐฉํฅ | ์์ | ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ |
|---|---|---|---|
| Ingress | ์ธ๋ถ โ ํด๋ฌ์คํฐ ์ | ์ฌ์ฉ์๊ฐ ์ฑ์ ์ ์ | Ingress ๊ฐ์ฒด, Gateway API |
| Egress | ํด๋ฌ์คํฐ ์ โ ์ธ๋ถ | Pod๊ฐ ์ธ๋ถ APIยทDB ํธ์ถ | NetworkPolicy egress, Egress Gateway |
Ingress๋ ์ ์ ๊ฐ์ฒด๊ฐ ์์ง๋ง Egress๋ผ๋ ๋จ์ผ ๊ฐ์ฒด๋ ์๊ณ , NetworkPolicy์ egress ๊ท์น์ด๋ Egress Gateway๋ก ๋ค๋ฃน๋๋ค. ํ๋ฉ ํ
์คํธ ์์ค์์ ๋ณดํต egress๋ฅผ ๋ฐ๋ก ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋ฉ๋๋ค(Pod๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ถ๋ก ์์ ๋กญ๊ฒ ๋๊ฐ๋๋ค).
๐ ํ ์ค ์์ฝ
- LB๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ๋ ๋ โ ๋ง์คํฐ ์(๊ด๋ฆฌ์ฉ, ์ธ๋ถ L4) ๊ณผ ์ฑ ์(์๋น์ค์ฉ, ์ธ๊ทธ๋ ์ค L7)์ ๋๋ค.
- ๋ง์คํฐ๊ฐ ์ฌ๋ฌ ๋๋ฉด LB๊ฐ ๋ ํ์ํ๊ณ (์คํด ์ ์ ), ์ฑ ์์ฒญ์ ๋ง์คํฐ๋ฅผ ๊ฑฐ์น์ง ์์ต๋๋ค(์ปจํธ๋กค ํ๋ ์ธ โ ๋ฐ์ดํฐ ํ๋ ์ธ).
โ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Q. ๋ง์คํฐ๊ฐ 3๋๋ฉด ๋ก๋๋ฐธ๋ฐ์ ์์ด๋ HA๊ฐ ๋๋์?
์ ๋ฉ๋๋ค. API ์๋ฒ๋ ์๋ก ์์ฒญ์ ๋ถ๋ฐฐํ์ง ์์ผ๋ฏ๋ก kubectlยท์์ปค๋ ธ๋๊ฐ ์ ์ํ โ๋ํ ์ฐฝ๊ตฌโ์ธ LB๊ฐ ํ์ํฉ๋๋ค. LB๊ฐ ์์ผ๋ฉด ํน์ ๋ง์คํฐ IP์ ๋ฌถ์ฌ ๊ทธ ๋ง์คํฐ๊ฐ ์ฃฝ์ ๋ ์ ์์ด ๋๊น๋๋ค.
Q. ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง์คํฐ ์ LB๋ก ์ธ ์ ์๋์?
์์ต๋๋ค. ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ํด๋ฌ์คํฐ ์์์ Pod๋ก ๋์ํ๋ฏ๋ก, ํด๋ฌ์คํฐ๊ฐ ๋จ๊ธฐ ์ ยท๋ฐ๊นฅ์ ์์ด์ผ ํ๋ ๋ง์คํฐ ์ LB ์ญํ ์ ๋ชป ํฉ๋๋ค. ๊ทธ ์๋ฆฌ์ HAProxyยทkube-vip ๊ฐ์ ์ธ๋ถ L4 LB๊ฐ ํ์ํฉ๋๋ค.
Q. ์ฑ ์์ฒญ์ด ๋๋ ค์ง๋ฉด ๋ง์คํฐ(API ์๋ฒ) ๋ถํ๊ฐ ์์ธ์ธ๊ฐ์?
๋๋ถ๋ถ ์๋๋๋ค. ์ผ๋ฐ ์๋น์ค ํธ๋ํฝ์ ์ธ๊ทธ๋ ์ค โ Service โ Pod ๊ฒฝ๋ก๋ก ํ๋ฅด๋ฉฐ ๋ง์คํฐ๋ฅผ ๊ฑฐ์น์ง ์์ต๋๋ค. ๋ง์คํฐ๋ ๊ด๋ฆฌ(์ปจํธ๋กค ํ๋ ์ธ) ํธ๋ํฝ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
Q. nginx, Contour, HAProxy ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ฅผ ๋์์ ์จ์ผ ํ๋์?
์๋๋๋ค. ๊ฐ์ ์๋ฆฌ(์ฑ ์)๋ฅผ ๋๊ณ ๊ฒฝ์ํ๋ ๋์์ด๋ผ ํ๋๋ง ๊ณ ๋ฅด๋ฉด ๋ฉ๋๋ค.
๐ ์ฐธ๊ณ
- Kubernetes Docs - Kubernetes Components(Control Plane / Node)
- Kubernetes Docs - Creating Highly Available Clusters with kubeadm
- Kubernetes Docs - Ingress
- kube-vip - Kubernetes Control Plane LB
- ๊ด๋ จ ๊ธ: L4 vs L7 ๋ก๋๋ฐธ๋ฐ์ (3ํธ) ยท HTTP/2๋ TLS๊ฐ ์๋๋ค (2ํธ)
</content>