์๋ ํ์ธ์ ๊ตฌ๋ ์๋, ์ต์ DevOps ์์์ ์ ๋ฆฌํด์ ๊ณต์ ํด๋๋ฆฌ๋ DevOps ์ฌํ์ ์ํ ์์์ง์ ๋๋ค.
์ด๋ฒ ์์์ง์์ Kubernetes ํด๋ฌ์คํฐ์์ ํํ ๋งํ๋ ์ ์ฑ ์ํ(Admission Control)์ ๋ํด ์์๋ณด๊ณ , Kubernetes ์ ์ฉ ์ ์ฑ ์์ง์ธ Kyverno์ ๋ํด ์๊ฐํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
โ Kubernetes์์ ์ธ๋ถ ์ ๊ทผ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ
Kubernetes ํด๋ฌ์คํฐ์๋ ์ค์ ์๋น์คํ๋ App๋ฟ๋ง ์๋๋ผ ๋ค์ํ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ์ ๊ทผ์ ์ ์ดํ๋ ํ๋ก์ธ์ค๊ฐ ์ค๋น๋์ด ์์ต๋๋ค. ์ด 3๋จ๊ณ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ฐ ๋จ๊ณ๋ ์๋์ ๊ฐ์ต๋๋ค.
- ์ธ์ฆ(Authentication, Authn): ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง, ์ ๊ทผ ๊ฐ๋ฅํ ์ ๋ถ์ธ์ง ํ์ธํ๋ ๋จ๊ณ์ ๋๋ค.
- ์ธ๊ฐ(Authorization, Authz): ํด๋น ์ฌ์ฉ์์ ์์ฒญ ๋ด์ฉ์ ๋ํด ์ด๋ค ๋ฆฌ์์ค์ ๋ํด ์ด๋ค ํ๋์ ํ ์ ์๋์ง ํ์ธํ๋ ๋จ๊ณ์ ๋๋ค. (ex: Pod ๋ฆฌ์์ค์ ๋ํด Create ๊ถํ์ด ์๋์ง)
- Admission Control: ์ธ์ฆ๊ณผ ์ธ๊ฐ๊น์ง ๊ฑฐ์น ์ฌ์ฉ์์ ์์ฒญ ๋ด์ฉ์ ๋ํด ๋ฏธ๋ฆฌ ์ ์๋ ์ ์ฑ ์ ๋ฐ๋ผ ๊ฒ์ฆ ๋๋ ๋ณ๊ฒฝํ๋ ๋จ๊ณ์ ๋๋ค.
๐Admission Controller๋?
Admission Controller๋ ์์์ ์ดํด๋ดค๋ Admission Control์ ์ํํ๋ ํ๋ฌ๊ทธ์ธ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด k8s ํด๋ฌ์คํฐ์์ ์ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization) ๊ณผ์ ์ธ๋ก๋ Admission Control ๊ณผ์ ์ ๋์์๊น์?
์ฒซ ๋ฒ์งธ๋ก ๋ณด์์ฑ ์ธก๋ฉด์์ ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ๊ฑฐ์น ์์ฒญ์ ๋ํด ์ฌ์ ์ ์ํ ์ ์ฑ ์ ํ ๋ฒ ๋ ์ ์ฉํ๋ฏ๋ก ์์น ์๋ ๋์์ ์ฌ์ ์ ์๋ฐฉํ์ฌ ๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ๋ก ์ ์ด์ฑ ์ธก๋ฉด์์๋ Admission Control์ด ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์ธ๋ฐ์. ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ๋ App์ ์ ์ ํ Label์ ์๋์ผ๋ก ๊ธฐ์ ํ๊ฑฐ๋ App์ด ์ฌ์ฉํ Memory๋ CPU์ ๊ท๋ชจ๋ฅผ ๋ฏธ๋ฆฌ ์ ํํ๋ ๋ฑ ํด๋ฌ์คํฐ ๋ด ๋ฆฌ์์ค๋ฅผ ๋์ฑ ํจ๊ณผ์ ์ผ๋ก ์ ์ดํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ฃ .
Admission Control์ 2๋จ๊ณ๋ก ๋๋ ๋์๋ฉ๋๋ค.
๊ฐ์ฅ ๋จผ์ ๋ณ๊ฒฝ(Mutate) ๋จ๊ณ๊ฐ ์งํ๋๋๋ฐ์. k8s API ์๋ฒ๋ก ๋ค์ด์จ ์์ฒญ๊ณผ ๋งค์นญ๋๋ ์ ์ฑ ์ด ํด๋น ์์ฒญ์ ์ผ๋ถ ๊ฐ์ ๋ณ๊ฒฝํ๋ Mutate ์ ์ฑ ์ผ ๊ฒฝ์ฐ, ํด๋น ์์ฒญ์์ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๋ถ๋ถ์ ์๋ ค์ฃผ๋ ๊ฐ์ k8s API ์๋ฒ๋ก ๋ฐํํฉ๋๋ค.
๊ทธ ๋ค์ ์งํ๋๋ ๊ฒ์ฆ(Validate) ๋จ๊ณ์์ ํด๋น ์์ฒญ๊ณผ ๋งค์นญ๋๋ ์ ์ฑ ์ด ์์ฒญ์ ํ์ฉ/๊ฑฐ๋ถํ๋ Validate ์ ์ฑ ์ผ ๊ฒฝ์ฐ, ํด๋น ์์ฒญ์ด ์ ์ฑ ์ ๋ถํฉํ๋์ง์ ๋ํด true/false ๊ฐ์ ๋ฐํํฉ๋๋ค.
Admission Controller๋ฅผ ์ฌ์ฉํ ๋ ์ป์ ์ ์๋ ์ด์ ๊ณผ ๋์ ๋ฐฉ์์ ๋ํด ์์๋ดค๋๋ฐ, ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์๊น์?
๊ธฐ๋ณธ์ ์ผ๋ก k8s ํด๋ฌ์คํฐ์๋ Pod์ด๋ ์ธ์ฆ์ ๋ฑ์ ๊ดํ ๋ค์ํ Admission Controller๊ฐ ์ค๋น๋์ด ์์ต๋๋ค. ์ด๋ k8s API ์๋ฒ์์ ๋ฐ๋ก ์ค์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์๋๋ฉด Admission Controller๋ฅผ ์ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค. ์์์ ์๋ฒ๋ฅผ ๊ตฌํํ ๋ค์ k8s API ์๋ฒ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ๋๋ก ์ค์ ํ๊ณ , ํด๋น ์์ฒญ์ ๋ํด ํน์ ์ ์ฑ ๋ก์ง์ ๊ตฌํํ ๋ค์ k8s API ์๋ฒ๊ฐ Admission Control ๊ฒฐ๊ณผ๋ผ๊ณ ์ธ์งํ ์ ์๋ ์์์ ๊ฒฐ๊ณผ๊ฐ์ ๋ด์ ๋ณํํ๋ ๋ฐฉ์์ด์ฃ .
์๋ํํฐ ํด์ ์ฌ์ฉํ๋ ์ ํ์ง๋ ์์ต๋๋ค. ์๋์์ ์๊ฐํ Kyverno๋ k8s ํด๋ฌ์คํฐ์์ ์ฌ์ฉ๋๋๋ก ๊ฐ๋ฐ๋ ์ ์ฑ ์์ง์ ๋๋ค.
๐กKubernetes๋ฅผ ์ํ ์ ์ฑ ์์ง, Kyverno
์์์ Kyverno๊ฐ Admission Controller๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ํํฐ ํด์ด๋ผ๊ณ ํ๋๋ฐ์. k8s ํด๋ฌ์คํฐ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ Admission Controller ๋ง๊ณ Kyverno๋ฅผ ์ฌ์ฉํ์ ๋ ์ป์ ์ ์๋ ์ด์ ์ ์๋์ ๊ฐ์ต๋๋ค.
- ํด๋ฌ์คํฐ ์ ์ฑ ์ k8s ๋ฆฌ์์ค๋ก ์์ฑ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ์ธ์ด๋ฅผ ํ์ตํ์ง ์๊ณ ๋ ์ ์ฑ ์ ์ ๊ฐ๋ฅ
- ์ ์ฑ ์ ํตํด์ ๊ฒ์ฆ(Validate)๊ณผ ๋ณ๊ฒฝ(Mutate)๋ฟ๋ง ์๋๋ผ ๋ฆฌ์์ค ์์ฑ(Generate) ๋๋ ์ ๊ฑฐ(Cleanup)๋ ๊ฐ๋ฅ
- ์ถ๊ฐ๋ก ์ ๊ณต๋๋ Kyverno CLI๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์ ์ฑ ์ ํด๋ฌ์คํฐ์ ์ ์ฉํ๊ธฐ ์ ์ ํ ์คํธ ๊ฐ๋ฅ
Kyverno๋ Helm ๋๋ ๋งค๋ํ์คํธ ํ์ผ(YAML ํ์ผ)๋ก ํด๋ฌ์คํฐ ๋ด์ ์ค์นํฉ๋๋ค. ํด๋ฌ์คํฐ ๋ด ํน์ Namespace(kyverno) ์์ Kyverno ๋์์ ํ์ํ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ์ค์น๋๋ ๋ฐฉ์์ธ๋ฐ์. ๊ฐ ๊ตฌ์ฑ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
- Admission Controller
- k8s API ์๋ฒ๋ก๋ถํฐ Admission Control ์์ฒญ์ ๋ฐ๋ ์ญํ ์ํ
- Validate, Mutate ๋ฑ์ ์ ์ฑ ์ํ
- Reports Controller
- ์ ์ฑ ์ ๋ํ ๋ฆฌํฌํธ๋ฅผ ์์ฑํ๋ ์ญํ ์ํ
- Background Controller
- ์ ์ฑ ์ถ๊ฐ, ์ ๋ฐ์ดํธ, ์ญ์ ๋ด๋น
- Cleanup Controller
- Cleanup ์ ์ฑ ์ํ
๐ญ๋ง์น๋ฉฐ...
์ด๋ฒ ์์์ง์์ Kubernetes์์ ์กฐ๊ธ์ ๊น์ ๋ด์ฉ์ธ Admission Control๊ณผ ๊ด๋ จ ์๋ํํฐ ํด์ ๋ํด ๋ค๋ค๋ดค์ต๋๋ค. ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธด ์ด๋ ค์ธ ์ ์๋ ๊ฐ๋ ์ด์ง๋ง k8s์์ ์ค์ํ ๋ถ๋ถ์ด๋ ํ ๋ฒ์ฏค ์ง์ด๊ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์ด๋ฒ ์ฃผ์ ๋ก ์ก์๋ดค์ต๋๋ค.๐ค
ํน์ ์ด๋ฒ ๋ด์ฉ ๊ด๋ จํด์ ๋ ๊ถ๊ธํ ์ ์ด ์์ผ์๋ค๋ฉด ์๋ ๋ฉ์ผ๋ฆฌ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์.๐
๊ทธ๋ผ, ๋ค์ ์์์ง์์ ๋ณด๋ค ์์ฐจ๊ณ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๐บ
๐References
Admission Controllers Reference
A Guide to Kubernetes Admission Controllers
Cloud Native Live: Kyverno 1.12 and beyond!
https://main.kyverno.io/docs/introduction/
์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์