Skip to main content

CEL๋งŒ ์•Œ๋ฉด ๋‚˜๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์ •์ฑ… ์ „๋ฌธ๊ฐ€!

์กฐํ›ˆ(Hoon Jo)2025๋…„ 1์›” 8์ผAbout 2 minDevOpsKubernetesArticle(s)blogyozm.wishket.comdevopsk8skubernetes

CEL๋งŒ ์•Œ๋ฉด ๋‚˜๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์ •์ฑ… ์ „๋ฌธ๊ฐ€! ๊ด€๋ จ

Kubernetes > Article(s)

Article(s)

CEL๋งŒ ์•Œ๋ฉด ๋‚˜๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์ •์ฑ… ์ „๋ฌธ๊ฐ€!
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ง€๊ธˆ๋„ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” CEL์„ ํ™œ์šฉํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์ •์ฑ…์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ง€๊ธˆ๋„ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ์„œ๋ฒ„์˜ ๋ฒ„์ „๋ณ„ ์šฉ๋Ÿ‰ ๋ณ€ํ™”<br/><์ถœ์ฒ˜: ๋ฐ”์ด๋ผ์ธ ๋„คํŠธ์›Œํฌ, <FontIcon icon="fas fa-globe"/>ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ์˜ ํ˜„์žฌ์™€ ๋ฏธ๋ž˜>
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ์„œ๋ฒ„์˜ ๋ฒ„์ „๋ณ„ ์šฉ๋Ÿ‰ ๋ณ€ํ™”
<์ถœ์ฒ˜: ๋ฐ”์ด๋ผ์ธ ๋„คํŠธ์›Œํฌ, ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ์˜ ํ˜„์žฌ์™€ ๋ฏธ๋ž˜>

์ด๋Ÿฌํ•œ ๋ฐœ์ „ ๊ณผ์ • ๊ฐ€์šด๋ฐ v1.30์—์„œ CEL(Common Expression Language)์„ ๋ฐ”ํƒ•์œผ๋กœ Admission Control์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด GA(General Availability) ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ธฐ๋Šฅ์€ ์•ŒํŒŒ, ๋ฒ ํƒ€, ๊ทธ๋ฆฌ๊ณ  GA ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Note

๊ฐ ๋‹จ๊ณ„๋ฅผ ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

API Overview
This section provides reference information for the Kubernetes API. The REST API is the fundamental fabric of Kubernetes. All operations and communications between components, and external user commands are REST API calls that the API Server handles. Consequently, everything in the Kubernetes platform is treated as an API object and has a corresponding entry in the API. The Kubernetes API reference lists the API for Kubernetes version v1.32. For general background information, read The Kubernetes API.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด๋ฒˆ์— GA๋œ CEL ๊ธฐ๋ฐ˜ ๊ธฐ๋Šฅ์€ ์‹ค์ œ ์—…๋ฌด์—๋„ ์‚ฌ์šฉํ•  ๋งŒํผ ์„ฑ์ˆ™ํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ๋ถ€ํ„ฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์ •์ฑ…์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. CEL์— ๋Œ€ํ•œ ์ดํ•ด
  2. Admission Control์ด๋ž€?
  3. ์‹ค์ œ ์ ์šฉ ์˜ˆ์ œ
  4. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ณด์•ˆ ์ •์ฑ…์— ๋Œ€ํ•œ ํ–ฅํ›„ ์ „๋ง

CEL์— ๋Œ€ํ•œ ์ดํ•ด*

CEL์€ ๊ต‰์žฅํžˆ ๊ฐ„๊ฒฐํ•˜๊ฒŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋‚ด์šฉ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ์†์‰ฌ์šด ์ดํ•ด๋ฅผ ์œ„ํ•ด ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

CEL-SPEC<br/><์ถœ์ฒ˜: CEL-SPEC ๊นƒํ—ˆ๋ธŒ (<FontIcon icon="iconfont icon-github"/>)>
CEL-SPEC
<์ถœ์ฒ˜: 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๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

[KubeCon Inida 2024] History of CEL into the Kubernetes
v1.23 Announcement Expression language validation for CRD is alpha Expression language validation for CRD is in alpha starting in 1.23. If the CustomResourceValidationExpressions feature gate is enabled, custom resources will be validated by validation rules using the Common Expression Language ...

Admission Control์ด๋ž€?

Admission Control์€ ์ง€๋‚œ 2019๋…„๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹ ๋ธ”๋กœ๊ทธ์— ๊ณต๊ฐœ๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. Admission์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” Mutating admission๊ณผ Validating admission์ด ๋ณด์•ˆ ์ •์ฑ…์„ ๋‹ด๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น์‹œ์—๋Š” ์›นํ›…์„ ํ†ตํ•ด์„œ๋งŒ ์ง€์›์ด ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋กœ CRD๋ฅผ ์„ค์น˜ํ•˜๋Š” OPA๋‚˜ Kyverno์™€ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Admission Controller ๊ฐ€์ด๋“œ<br/><์ถœ์ฒ˜: <FontIcon icon="iconfont icon-k8s"/>์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ธ”๋กœ๊ทธ>
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Admission Controller ๊ฐ€์ด๋“œ
<์ถœ์ฒ˜: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ธ”๋กœ๊ทธ>

์ด๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์ง์ ‘ ๋…น์—ฌ๋‚ด๊ธฐ ์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ๋“ค์ด ์žˆ์—ˆ๊ณ , v1.23๋ถ€ํ„ฐ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋…ธ๋ ฅ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ v1.30๋ถ€ํ„ฐ Validating์— ๋Œ€ํ•œ ๊ตฌํ˜„๊ณผ ์ ์šฉ์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. v1.30์—์„œ๋Š” ์ด์— ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  Mutating์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ์ถ”๊ฐ€๋กœ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Admission ๊ด€๋ จ API์— ๋Œ€ํ•œ ๋ฒ„์ „๋ณ„ ์„ฑ์ˆ™๋„<br/><์ถœ์ฒ˜: ์ž‘๊ฐ€>
Admission ๊ด€๋ จ API์— ๋Œ€ํ•œ ๋ฒ„์ „๋ณ„ ์„ฑ์ˆ™๋„
<์ถœ์ฒ˜: ์ž‘๊ฐ€>

๊ทธ๋Ÿผ ์‹ค์ œ ์ ์šฉ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์ „, ๊ฐ 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 ์—ญ์‹œ ์•„์ง ๊ตฌํ˜„ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„์„ ๋‘๊ณ  ์กฐ์ง์— ๋”ฐ๋ผ ์ฒœ์ฒœํžˆ ๋ณด์•ˆ ์ •์ฑ… ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, OPA(Gatekeeper), Kyverno ๋น„๊ต<br/><์ถœ์ฒ˜: ์ž‘๊ฐ€>
๋„ค์ดํ‹ฐ๋ธŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, OPA(Gatekeeper), Kyverno ๋น„๊ต
<์ถœ์ฒ˜: ์ž‘๊ฐ€>

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” CEL ์ด์™ธ์—๋„ ํ•„์š”ํ•œ ๊ฒƒ์€ ๋‚ด์žฌํ™”ํ•˜๊ณ , ๋ฒค๋” ์ค‘๋ฆฝ์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋Š” ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ ๊พธ์ค€ํžˆ ๊ฐœ์„ ํ•˜๋ฉฐ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋งŒํผ ๊ฐ€๊ธ‰์  ์ตœ์‹  ๋ฒ„์ „์— ๋งž์ถ”์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ํ˜„์žฌ ๊ธฐ์ˆ ์— ์ ํ•ฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

Note

์ด๋ฒˆ ๊ธ€์—์„œ ์†Œ๊ฐœํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ KubeCon India 2024์—์„œ ๋ฐœํ‘œํ•˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋งํฌ์— ๋ฐœํ‘œ ์†Œ๊ฐœ์™€ ์˜์ƒ์ด ๊ณต๊ฐœ๋˜๋‹ˆ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CEL๋งŒ ์•Œ๋ฉด ๋‚˜๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์ •์ฑ… ์ „๋ฌธ๊ฐ€!

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ง€๊ธˆ๋„ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” CEL์„ ํ™œ์šฉํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์ •์ฑ…์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.