์ด ๊ธ์ Kubernetes Best Practice๋ฅผ ์ฝ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๊ณผ ์ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์์ฑํ ๊ธ์ ๋๋ค.๋ชจ๋ ๋ด์ฉ์ ์ฑ ์ ํฌํจ๋์ด ์๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฑ ์ ๊ตฌ๋งคํด์ ์ฝ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ต๊ทผ ์๋น์ค ๋ฉ์์ ๋ํด ์์๋ณด๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๊ณ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ค์๋ ์๊ฐ์ ์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ธ๊ฐ? ๋ผ๋ ์๊ฐ์ด์์ต๋๋ค. ์ด์ ๋ํ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋ ๋งํ ์ฑ ์ ๋ฐ๊ฒฌํด์ ์ฝ์ด๋ณด๊ณ ์ ํฉ๋๋ค.
Pod์ ๋ณด์์ ๊ฐํํ ์ ์๋ ์ฟ ๋ฒ๋คํฐ์ค API์๋ PodSecurityPolicy์ RuntimeClass๋ผ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค.
PodSecurityPolicy
PodSecurityPolicy๋ ํด๋ฌ์คํฐ ์์ค์ ๋ฆฌ์์ค๋ก ํด๋ฌ์คํฐ์์ ์คํํ ์ ์๋ ๊ถํ ์์ค์ ์ ํํด ๋ณด์ ์ทจ์ฝ ๋ถ๋ถ์ ์ค์ผ ์ ์๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
PodSecurityPolicy ํ์ฑํ
PodSecurityPolicy๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ PodSecurityPolicy API๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ kubectl get psp ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก๋ PodSecurityPolicy์ ๋ํ Admission Controller๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค. ํด๋ผ์ฐ๋ ํ๋ก๋ฐ์ด๋์์ ํด๋น ํ์ฑํ๊ฐ ๋ํดํธ๋ก ์ ์ฉ๋์ง๋ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก๋ ์ ํ ์ต์ ์ผ๋ก ์กด์ฌํฉ๋๋ค.
PodSecurityPolicy ์์ฑ ๋ฐ ๊ถํ ๋ถ์ฌ
๋จผ์ ์ ํ๋ ์ ์ฑ
์ ๊ฐ์ง PodSecurityPolicy๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. ํด๋น PodSecurityPolicy๋ pod์ด privileged ๋ชจ๋๋ก ์คํ๋๋ ๊ฒ์ ์ ํํ๋ฉฐ, volume ํ๋ฌ๊ทธ์ธ ์ค emptyDir์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํํ๋ ์ ์ฑ
์
๋๋ค. (๋๋จธ์ง ๋ถ๋ถ๋ค์ required ํ๋์ด๊ธฐ ๋๋ฌธ์ ์์์ ๊ฐ์ผ๋ก ์ค์ ํ์์ต๋๋ค.)
๋ค์์ผ๋ก๋ ํด๋น PodSecurityPolicy์ ๋ํ use ๊ถํ์ ๊ฐ์ง ClusterRole์ ์์ฑํ๊ณ ์ด๋ฅผ ํ ์คํธ์ ์ฌ์ฉํ ServiceAccount์ ๋ฐ์ธ๋ฉํจ์ผ๋ก์จ ์ ํ๋ ์ ์ฑ ์ ์ ์ฉํฉ๋๋ค.
์๋์ ๊ฐ์ด ํด๋น ์๋น์ค ์ด์นด์ดํธ๋ฅผ ์ฌ์ฉํ๊ฒ ํ์ฌ Pod์ ํน๊ถ๋ชจ๋๊ฐ ์ ์ฉ๋ ์ ์์ผ๋ฉฐ Volume ํ๋ฌ๊ทธ์ธ์ผ๋ก EmptyDir๊ฐ ์ฌ์ฉ๋ ์ ์๋ ์ ์ฑ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
PodSecurityPolicy๋ ํด๋ฌ์คํฐ์ ๊ด๋ฆฌ์๋ ์ฌ์ฉ์๊ฐ ํน์ ์์ค์ ์ํฌ๋ก๋๋ฅผ API๋ฅผ ํตํด ์์ฝ๊ฒ ์ ์ดํ ์ ์๋ค๋ ์ฅ์ ์ด ์กด์ฌํฉ๋๋ค. ํ์ง๋ง, ์ด๋ฅผ ์ ์ฉํ๋ ๊ณผ์ ์์ ๋ฌ๋ ์ปค๋ธ๊ฐ ๋๊ณ ์ ์ฑ ์ด ์ํฌ๋ก๋์ ๋ํด ์ํ๋ ๋๋ก ์ ์ดํ๋์ง ๋๋ฒ๊น ํ๋ ๊ณผ์ ์ด ๋ฒ๊ฑฐ๋กญ๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
์ฑ ์์ ์ ์ํ๋ podSecurityPolicy ๋ชจ๋ฒ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PodSecurityPolicy๋ RBAC์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. ๋ฐ๋ผ์ RBAC์ PodSecurityPolicy์ ์์ฑ, ์ ์ง, ๊ด๋ฆฌ์ ๋ํด ์๋ํ๊ฐ ์ค์ํฉ๋๋ค.
- ์ ์ฑ ์ ๋ฒ์๋ฅผ ์ ํํ๊ฒ ํ์ ํ์ฌ ํฉ๋๋ค. ๋ฒ์๋ ํด๋ฌ์คํฐ ์ ์ฒด๊ฐ ๋ ์๋ ์์ผ๋ฉฐ ํน์ ๋ค์์คํ์ด์ค ๋ฐ ์ํฌ๋ก๋๊ฐ ๋ ์๋ ์์ต๋๋ค.
์ํฌ๋ก๋ ๊ฒฉ๋ฆฌ์ ๋ฐํ์ ํด๋์ค
์ผ๋ฐ์ ์ผ๋ก ์ปจํ ์ด๋๋ ํธ์คํธ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ํฌ๋ก๋๊ฐ ๊ฒฉ๋ฆฌ๋ VM๋ณด๋ค ๋ณด์์ ์ทจ์ฝ์ ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋งํฉ๋๋ค. ์ด๋ฐ ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด CRI๋ฅผ ๊ตฌํํ ๋ค์ํ ์ปจํ ์ด๋ ๋ฐํ์์ด ๋ฑ์ฅํ์์ต๋๋ค. gVisor, Kata Container์ ๊ฐ์ ์ปจํ ์ด๋ ๋ฐํ์์ ์ค์ฒฉ๋ ๊ฐ์ํ๋ ์์คํ ํธ์ถ์ ํํฐ๋งํ๋ ๋ฐฉ์์ ์ฌ์ฉํด ์ํฌ๋ก๋์ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
๋์ผํ ํด๋ฌ์คํฐ ๋ด์์๋ ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ค์ํ ์ปจํ ์ด๋ ๋ฐํ์์ ์ ํํ ์ ์์ต๋๋ค. ๋ฐํ์ ํด๋์ค๋ฅผ ์ ํํ๋ ๊ณผ์ ์ ๊ฐ๋จํ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- RuntimeClassName ํ๋๋ฅผ ํตํด ํน์ ๋ฐํ์ ํด๋์ค ์ ์
- ๋ฐํ์ธ ํด๋์ค๊ฐ ๊ตฌํํ CRI๋ก ์ ๋ฌ๋๋ RuntimeHandler๋ฅผ ์ง์
- ์ํ๋ ๋ฐํ์ ํด๋์ค๋ฅผ ์ง์ํ๋ ๋ ธ๋์ ์ํฌ๋ก๋ ๋ฐฐ์น
๋ฐํ์ ํด๋์ค๋ ์ํฌ๋ก๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ์ง๋ง ์ฌ์ ํ kubernetes API๋ฅผ ํตํ ์ ์์ ์์ ์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ ๊ธฐ์ตํด์ผํฉ๋๋ค. ๋ํ, ๋จ์ผ ํด๋ฌ์คํฐ์์ ์ฌ๋ฌ ๋ฐํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐํ์ ํด๋์ค๋ง๋ค ์ํฌ๋ก๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ด์ ๊ณผ์ ์์ ์์์น ๋ชปํ ๋ฌธ์ ๋ฅผ ๋ง์ฃผํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ๋ฐ๋ผ์ ๋จ์ผ ์ํฌ๋ก๋๋ฅผ ๊ฐ๋ ๊ฐ๋ณ ํด๋ฌ์คํฐ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
PodSecurityPolicy์ ์ปจํ ์ด๋ ๋ฐํ์ ํด๋์ค ์ด์ธ์๋ ๋ฐํ์ ๋ด๋ถ์์ ์ ์ฑ ์ ํ์ธํ๊ณ ์คํํ๋ ค๋ฉด ์์คํ ์ฝ์ ๊ฐ์ํ๊ฑฐ๋ BPF๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. (์ด๋ฅผ ์ํํ๋ ์คํ์์ค๋ก CNCF์ Falco๊ฐ ์กด์ฌํฉ๋๋ค.)
๋๊ธ