
CEL๋ง ์๋ฉด ๋๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ์ ์ฑ ์ ๋ฌธ๊ฐ!
CEL๋ง ์๋ฉด ๋๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ์ ์ฑ ์ ๋ฌธ๊ฐ! ๊ด๋ จ
์ฟ ๋ฒ๋คํฐ์ค๋ ์ง๊ธ๋ ๋ฐ์ ํ๊ณ ์์ต๋๋ค.

<์ถ์ฒ: ๋ฐ์ด๋ผ์ธ ๋คํธ์ํฌ, ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ์ ํ์ฌ์ ๋ฏธ๋>
์ด๋ฌํ ๋ฐ์ ๊ณผ์ ๊ฐ์ด๋ฐ v1.30์์ CEL(Common Expression Language)์ ๋ฐํ์ผ๋ก Admission Control์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด GA(General Availability) ๋์์ต๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค์ ๊ธฐ๋ฅ์ ์ํ, ๋ฒ ํ, ๊ทธ๋ฆฌ๊ณ GA ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์ถ์๋ฉ๋๋ค. ๊ฐ ๋จ๊ณ๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ํ: ๋ฒ๊ทธ๊ฐ ์์ ์ ์์ผ๋ฉฐ, ๊ฐ์๊ธฐ ์ค๋จ๋ ์ ์์ต๋๋ค. ๊ฐ๋จํ ํ ์คํธ ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉํ ๊ฒ์ ๊ถ๊ณ ํฉ๋๋ค.
- ๋ฒ ํ: ์ฝ๋๊ฐ ์ ํ ์คํธ๋๋ฉฐ, ๊ฐ์๊ธฐ ์ค๋จ๋์ง ์์ต๋๋ค. ํ๋ก๋์ ์ฌ์ฉ์ ๊ถ๊ณ ํ์ง ์์ผ๋, ์ถํ ๋ฐ๋ ์ ์์ต๋๋ค.
- GA: ํ๋ก๋์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ ์ธํ์ง ์์ต๋๋ค.
Note
๊ฐ ๋จ๊ณ๋ฅผ ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ธ์.

๊ทธ๋ฌ๋ฏ๋ก ์ด๋ฒ์ GA๋ CEL ๊ธฐ๋ฐ ๊ธฐ๋ฅ์ ์ค์ ์ ๋ฌด์๋ ์ฌ์ฉํ ๋งํผ ์ฑ์ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ด์ ๋ถํฐ ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ์ ์ฑ ์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค. ์งํ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- CEL์ ๋ํ ์ดํด
- Admission Control์ด๋?
- ์ค์ ์ ์ฉ ์์
- ์ฟ ๋ฒ๋คํฐ์ค์ ๋ณด์ ์ ์ฑ ์ ๋ํ ํฅํ ์ ๋ง
CEL์ ๋ํ ์ดํด*
CEL์ ๊ต์ฅํ ๊ฐ๊ฒฐํ๊ฒ, ๊ฐ๋ฐ์๊ฐ ํํํ๊ณ ์ ํ๋ ๋ด์ฉ์ ๋ด์ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ข ๋ ์์ฌ์ด ์ดํด๋ฅผ ์ํด ์์ ๋ฅผ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.

<์ถ์ฒ: CEL-SPEC ๊นํ๋ธ (
google/cel-spec
)>์ฝ๋ ํ๋จ์ ๋ณด๊ฒ ์ต๋๋ค.
// Object construction
์ฆ, ์ค๋ธ์ ํธ์ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ ์ฝ์ด๋ค์ผ ์ ์์ต๋๋ค. YAML์ ๊ฐ๊น๊ฒ ํํํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
common
- GeoPoint
- latitude: 10.0
- longitude: -5.5
์ด๋ ๊ฒ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก // Condition
์ ๋ฃ์ด์ ํ๋จํฉ๋๋ค. ๊ฒฐ๊ณผ๊ฐ์ ๋งค์ฐ ๊ฐ๊ฒฐํ๊ฒ True
๋๋ False
, ์ด์ง์ผ๋ก ์ถ๋ ฅํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ฐ๊ฒฐํจ์ ์ฟ ๋ฒ๋คํฐ์ค์ ๋
น์ฌ๋ด๋ฉด ์์ฝ๊ฒ ๋ณด์ ์ ์ฑ
์ ์ ์ฉํ ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋(pod)์ hostNetwork
์ฌ์ฉ ๋ถ๋ถ์ ๊ฒ์ถํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
// Condition
"!has (object.spec.hostNetwork) || object.spec.hostNetwork != true"
์ฝ๋ ์ค๊ฐ์ || ๋ or์ ์ญํ ์ ๋ด๋นํฉ๋๋ค. ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์(!has(object.spec.hostNetwork))๊ณผ ๋ค(object.spec.hostNetwork != true)๋ ๋ชจ๋ ๋์ผํ ๋ชฉ์ ์ผ๋ก ์ฐ์ ๋๋ค. ๋ค๋ง ์์์ ์กด์ฌ๋ฅผ ์ฒดํฌํ๊ณ , ๋ค์์๋ ๊ตฌ์ฒด์ ์ธ ์กฐ๊ฑด์ ํํํ๋ ํธ์ ๋๋ค. ๋ฌผ๋ก hostNetwork์ ๊ฒฝ์ฐ์๋ ๊ฐ์ด True์ False 2๊ฐ ๋ฐ์ ์กด์ฌํ์ง ์์ ํ๋๋ง ์จ๋ ์ถฉ๋ถํ๊ธด ํฉ๋๋ค.
์ด๋ ๊ฒ hostNetowrk ์ฌ์ฉ ๋ถ๋ถ์ ๊ฒ์ถํ๊ณ ๋ ๋ค์, ์ด๋ป๊ฒ ๋ณด์ ์ ์ฑ ์ ์ ์ฉํ๊ฒ ๋๋ ๊ฑธ๊น์?
์ฌ์ค ์ด ์์ ์ ์ด๋ฏธ ์ค๋ ์ ๋ถํฐ ์กด์ฌํ์์ต๋๋ค. Admission Control์ด๋ผ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ง์ด์ฃ .
Note
CEL์ด ์ฟ ๋ฒ๋คํฐ์ค ์ ์ฉ๋๋ ๊ณผ์ ์ ๋ํ Change History๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Admission Control์ด๋?
Admission Control์ ์ง๋ 2019๋ ๋ ์ฟ ๋ฒ๋คํฐ์ค ๊ณต์ ๋ธ๋ก๊ทธ์ ๊ณต๊ฐ๋ ๋ด์ฉ์ ๋๋ค. Admission์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ Mutating admission๊ณผ Validating admission์ด ๋ณด์ ์ ์ฑ ์ ๋ด๋นํ์ต๋๋ค. ํ์ง๋ง ๋น์์๋ ์นํ ์ ํตํด์๋ง ์ง์์ด ๋์์ผ๋ฉฐ, ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ถ๊ฐ๋ก CRD๋ฅผ ์ค์นํ๋ OPA๋ Kyverno์ ๊ฐ์ ํ๋ก์ ํธ๊ฐ ๋์์ต๋๋ค.

<์ถ์ฒ: ์ฟ ๋ฒ๋คํฐ์ค ๋ธ๋ก๊ทธ>
์ด๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค์ ์ง์ ๋ น์ฌ๋ด๊ธฐ ์ํ ์๊ตฌ ์ฌํญ๋ค์ด ์์๊ณ , v1.23๋ถํฐ ์ด๋ฅผ ๊ตฌํํ๊ณ ์ ํ๋ ๋ ธ๋ ฅ์ด ์์์ต๋๋ค. ๊ฒฐ๊ตญ v1.30๋ถํฐ Validating์ ๋ํ ๊ตฌํ๊ณผ ์ ์ฉ์ด ์๋ฃ๋ ๊ฒ์ ๋๋ค. v1.30์์๋ ์ด์ ๋ฉ์ถ์ง ์๊ณ Mutating์ ๋ํ ๊ตฌํ์ ์ถ๊ฐ๋ก ์์ํ์ต๋๋ค. ์ด๋ฅผ ๊ทธ๋ํ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

<์ถ์ฒ: ์๊ฐ>
๊ทธ๋ผ ์ค์ ์ ์ฉ ์์ ๋ฅผ ์ดํด๋ณด๊ธฐ ์ , ๊ฐ Admission์ ๋ํด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Validating Admission Policy
์ผ์ข
์ ์ฒดํฌ๋ฆฌ์คํธ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด object.spec.hostNetwork != true
๊ฐ์ ๋ด์ฉ์ ์ค๋ธ์ ํธ์ ์คํ์ ์๋ hostNetwork
๊ฐ true
๊ฐ ์๋๋ผ๋ฉด, okay(true) ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ ๊ฒฝ์ฐ๋ false
์ด๊ฒ ์ฃ . ์ด๋ฅผ ํตํด validation, ์ฆ, ๊ฒ์ฆ์ ํ ์ ์์ต๋๋ค.
Mutating Admission Policy*
์ผ์ข ์ ์ฌ์ (๊ฐ์ ) ์กฐ์น๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. NK ์ธํฌ ํน์ ๋ฉด์ญ ์ธํฌ๋ก ๋ด๋ ๋งค์ฐ ์ ์ฌํ ๋ฏํฉ๋๋ค. ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๋ถ๋ถ์ ์ฐพ์ ์กฐ์นํ๋ค๋ ์ ์์ ๊ทธ๋ฌํฉ๋๋ค. ์ด ๋ถ๋ถ์ ๊ตฌํ ์ด์ ์ด๋ฏ๋ก, Kyverno์ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- (image): "*:latest"โ
imagePullPolicy: "IfNotPresent"
๋ง์ฝ ์ด๋ฏธ์ง์ ์ต์ (latest
) ํ๊ทธ๊ฐ ๋ถ์ด ์๋ค๋ฉด, ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ๋ ์ ์ฑ
(imagePullPolicy
)์ด ํ์ฌ ์กด์ฌํ์ง ์์ ๋๋ง(ifNotPresent
) ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๊ฒ์
๋๋ค. ์ด Admission
์ผ๋ก ํด๋น ๊ท์น์ ๊ฐ์ ๋ก ์ฃผ์
(๋ณ๊ฒฝ)์ํค๋ ๊ฒ์
๋๋ค.
์ค์ ์ ์ฉ ์์
์ค์ ์์ ๋ฅผ ๋ณด๋ฉฐ ์ด ๋ถ๋ถ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ์ฌ ํ ์คํธ๋ ๋ฐ๋๋ผ ์ฟ ๋ฒ๋คํฐ์ค ๋๋ ํน๋ณํ ๋ณ๊ฒฝ์ด ์๋ ๋ฐฐํฌ ํ์ ๊ธฐ์ค์ผ๋ก ๋ง๋ค์ด ์ก์ต๋๋ค. ๋ฐ๋ผ์ ํ๊ฒฝ์ ๋ฐ๋ผ ์ด์ ๊ฐ์ด ๋์ํ์ง ์์ ์ ์์ต๋๋ค. ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ด๋ จํด์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ต๋๋ค. ๋ํ, ์ฟ ๋ฒ๋คํฐ์ค v1.30 ์ด์ ํ๊ฒฝ์์ ํ ์คํธํ ์ ์์ผ๋ฏ๋ก ๋ฒ์ ์ ํ์ธํ๊ธฐ ๋ฐ๋๋๋ค.
1. ์ฝ๋๋ฅผ ๋ด๋ ค๋ฐ๊ณ , ์ค์ต ํ์ผ์ด ์๋ ๊ณณ์ผ๋ก ์ด๋
์ค์ต ์ฝ๋๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑ๋ ๊ฒํ๋ธ ์์ค (sysnet4admin/_Lecture_k8s_learning.kit
)๋ฅผ ๋ด๋ ค๋ฐ์ต๋๋ค. ๊ทธ ํ์ ์ค์ต์ ์งํํ B/B.009๋ก ์ด๋ํฉ๋๋ค.

2. ์ค์ต ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ํ์ธ
B.009์๋ ๋ค์ํ ์ค์ต ์์ค๊ฐ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ k8s(Admission Policy ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ)์ธ์ OPA์ Kyverno ๋ชจ๋ ๋น๊ตํ ์ ์๋ ์์ค๊ฐ ์ค๋น๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ์ค k8s_native-{{CEL}}
๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํด, ํด๋น ๋๋ ํฐ๋ฆฌ์ ๋ด์ฉ์ ํ์ธํฉ๋๋ค.

3. hostNetwork ์ ํ ์ ์ฑ ํ์ผ ํ์ธ
hostNetwork
๋ฅผ ์ ํํ ๋ชฉ์ ์ผ๋ก ์์ฑ๋ CEL-ValidatingAdmissionPolicy-NoHostNetwork.yaml
ํ์ผ์ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค. RBAC์ ์์ฃผ ์ ์ฌํ ํํ๋ก ๊ตฌ์กฐํ๋์ด ์์ผ๋ฉฐ, vadalidations ์ดํ expression ํญ๋ชฉ์ ์์ ์ค๋ช
ํ ๋ด์ฉ๋ค์ด ์์์ ์ ์ ์์ต๋๋ค.

4. hostNetwork
์ ํ ์ค์ ์ ์ค์ ๋ก ์ ์ฉ
1.CEL-ValidatingAdmissionPolicy-NoHostNetwork.yaml
์ ์ค์ ๋ก ์ ์ฉํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค.
5. hostNetwork
์ ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ
hostNetwork
์ค์ ์ด ํฌํจ๋์ด ์๋ ์ํ ์ฑ์ ๋ฐฐํฌํด ๋ณด๊ณ , validating ๊ด๋ จ admission์ด ์ ์ฉ๋๋์ง ํ์ธํฉ๋๋ค. ๊ณง์ด์ด ../sample-apps/hostNetwork
๋ก ์ด๋ํ๋ฉฐ ํด๋น ๋๋ ํฐ๋ฆฌ์ ๋ด์ฉ์ ํ์ธํฉ๋๋ค.
yes๋ hostNetwork
๊ฐ ํฌํจ๋์ด ์๋ yaml ํ์ผ์
๋๋ค. ๋ฐ๋ฉด no๋ hostNetwork
๊ฐ ํฌํจ๋์ด ์์ง ์์ yaml ํ์ผ์
๋๋ค. ๊ฐ yaml ํ์ผ์ ์ ์ฉํด ๋ณด๊ณ admission์ ๋์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.

6. ๋ฐฐํฌ ๋ด์ฉ ๋ชจ๋ ์ญ์
๋ง์ง๋ง ์กฐ์น์ ๋๋ค. admission policy๋ ํด๋ฌ์คํฐ์ ์ํฅ์ ์ฃผ๋ ์ค์ ์ด๋ฏ๋ก, ์ด๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ๋ฐฐํฌํ๋ ๋ชจ๋ ๋ด์ฉ์ ์ญ์ ํฉ๋๋ค.

์ค์ต์ ํ์ฉํ B.009์๋ ๋ค์ํ ํญ๋ชฉ์ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ก ์ ๋ฆฌํด ๋์์ต๋๋ค. ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ณด์ ์ ์ฑ ๋๊ตฌ๋ ์ฌ์ฉํ๋ฉฐ ๋น๊ตํด ๋ณด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
๋ง์น๋ฉฐ: ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ์ ์ฑ ์ ๋ํ ์ ๋ง
์ฟ ๋ฒ๋คํฐ์ค๋ CEL์ ํ์ฉํด ์ฐ์ Validation์ ๋ํ Admission Control์ ๊ฐํํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ , 2025๋ ๋ด์ ์๋ง Mutation ๋ถ๋ถ ๋ํ ์๊ฒฐ์ง์ ๊ฒ์ผ๋ก ์์ธก๋ฉ๋๋ค.
๋ฌผ๋ก ๊ทธ๋ ๋ค๊ณ ๊ธฐ์กด์ ๋ณด์ ์ ์ฑ ์ ๋ด๋นํ๋ OPA์ Kyverno๊ฐ ๋น์ฅ ์ธ๋ชจ ์์ด์ง๋ ๊ฒ์ ์๋๋๋ค. ์นํ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒฝ์ฐ์๋ ๊พธ์คํ ํ์ํ ๊ฒ์ด๋ฉฐ, Mutation ์ญ์ ์์ง ๊ตฌํ ์ค์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์๊ฐ์ ๋๊ณ ์กฐ์ง์ ๋ฐ๋ผ ์ฒ์ฒํ ๋ณด์ ์ ์ฑ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.

<์ถ์ฒ: ์๊ฐ>
์ฟ ๋ฒ๋คํฐ์ค๋ CEL ์ด์ธ์๋ ํ์ํ ๊ฒ์ ๋ด์ฌํํ๊ณ , ๋ฒค๋ ์ค๋ฆฝ์ฑ์ ์งํค๊ธฐ ์ํ ์ฝ๋๋ ์ ๊ฑฐํ๋ ๋ฑ ๊พธ์คํ ๊ฐ์ ํ๋ฉฐ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ ๋งํผ ๊ฐ๊ธ์ ์ต์ ๋ฒ์ ์ ๋ง์ถ์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ํ์ฌ ๊ธฐ์ ์ ์ ํฉํ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์ ์๊ฒ ์ต๋๋ค.
Note
์ด๋ฒ ๊ธ์์ ์๊ฐํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก KubeCon India 2024์์ ๋ฐํํ๊ธฐ๋ ํ์ต๋๋ค. ๋ค์ ๋งํฌ์ ๋ฐํ ์๊ฐ์ ์์์ด ๊ณต๊ฐ๋๋ ์ดํด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.