๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Book Review/๐Ÿ“˜ Kubernetes Best Practice

[Kubernetes Best Practice] 10. ํŒŒ๋“œ์™€ ์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ

by Seongpyo Hong 2021. 3. 23.

์ด ๊ธ€์€ 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์— ๋ฐ”์ธ๋”ฉํ•จ์œผ๋กœ์จ ์ œํ•œ๋œ ์ •์ฑ…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Service Account ์ƒ์„ฑ
ClusterRole & RoleBinding

์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๋‹น ์„œ๋น„์Šค ์–ด์นด์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜์—ฌ Pod์˜ ํŠน๊ถŒ๋ชจ๋“œ๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์—†์œผ๋ฉฐ Volume ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ EmptyDir๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋Š” ์ •์ฑ…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

Demo


PodSecurityPolicy๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ด€๋ฆฌ์ž๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์ˆ˜์ค€์˜ ์›Œํฌ๋กœ๋“œ๋ฅผ API๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋ฅผ ์ ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋†’๊ณ  ์ •์ฑ…์ด ์›Œํฌ๋กœ๋“œ์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ๋Œ€๋กœ ์ œ์–ดํ•˜๋Š”์ง€ ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ณผ์ •์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 

์ฑ…์—์„œ ์ œ์‹œํ•˜๋Š” podSecurityPolicy ๋ชจ๋ฒ”์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • PodSecurityPolicy๋Š” RBAC์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ RBAC์™€ PodSecurityPolicy์˜ ์ƒ์„ฑ, ์œ ์ง€, ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์ž๋™ํ™”๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์ฑ…์˜ ๋ฒ”์œ„๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์—ฌ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌ๋กœ๋“œ ๊ฒฉ๋ฆฌ์™€ ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค

์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›Œํฌ๋กœ๋“œ๊ฐ€ ๊ฒฉ๋ฆฌ๋œ VM๋ณด๋‹ค ๋ณด์•ˆ์ƒ ์ทจ์•ฝ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CRI๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด ๋“ฑ์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. gVisor, Kata Container์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์€ ์ค‘์ฒฉ๋œ ๊ฐ€์ƒํ™”๋‚˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ์›Œํฌ๋กœ๋“œ์˜ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. 

๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ๋„ ์ด๋Ÿฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. RuntimeClassName ํ•„๋“œ๋ฅผ ํ†ตํ•ด ํŠน์ • ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค ์ •์˜
  2. ๋Ÿฐํƒ€์ธ ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„ํ•  CRI๋กœ ์ „๋‹ฌ๋˜๋Š” RuntimeHandler๋ฅผ ์ง€์ •
  3. ์›ํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ๋…ธ๋“œ์— ์›Œํฌ๋กœ๋“œ ๋ฐฐ์น˜

๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค๋Š” ์›Œํฌ๋กœ๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ kubernetes API๋ฅผ ํ†ตํ•œ ์•…์˜์  ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค๋งˆ๋‹ค ์›Œํฌ๋กœ๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด์‹ ๊ณผ์ •์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•  ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ผ ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฐœ๋ณ„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


PodSecurityPolicy์™€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค ์ด์™ธ์—๋„ ๋Ÿฐํƒ€์ž„ ๋‚ด๋ถ€์—์„œ ์ •์ฑ…์„ ํ™•์ธํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ ค๋ฉด ์‹œ์Šคํ…œ ์ฝœ์„ ๊ฐ์‹œํ•˜๊ฑฐ๋‚˜ BPF๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค๋กœ CNCF์˜ Falco๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.)

๋Œ“๊ธ€