CKA-13์ผ์ฐจ

YeJi Kimยท2023๋…„ 3์›” 1์ผ
1

CKA

๋ชฉ๋ก ๋ณด๊ธฐ
13/15

๐Ÿ“ CKA 13์ผ์ฐจ
๐Ÿ“ Udemy-Certified Kubernetes Administrator (CKA) with Practice Tests 153-162




153. KubeConfig

kubectl ๋„๊ตฌ๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ '$HOME/.kube/config' ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. ์ด๊ฒƒ์ด ์ง€๊ธˆ๊นŒ์ง€ kubectl ๋ช…๋ น์— ๋Œ€ํ•œ ์˜ต์…˜์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ ์ด์œ ์ด๋‹ค.

kubeconfig ํŒŒ์ผ์—๋Š” Clusters, Contexts, Users ์ด๋ ‡๊ฒŒ ์„ธ ๊ฐ€์ง€ ์˜์—ญ์ด ์žˆ๋‹ค.
Clusters๋Š” ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Development, Production, Google ๋“ฑ์ด ์žˆ๋‹ค.
Users๋Š” ์ด๋Ÿฐ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ •์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Admin, Dev User, Prod User ๋“ฑ์ด ์žˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ Contexts๋Š” ์–ด๋–ค ์‚ฌ์šฉ์ž ๊ณ„์ •์ด ์–ด๋–ค ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š”์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค.

'--server', '--certificate-authority' ์‚ฌ์–‘์€ Clusters ์˜์—ญ์œผ๋กœ ๊ฐ„๋‹ค.
'--client-key', '--client-certificate' ์‚ฌ์–‘์€ Users ์˜์—ญ์œผ๋กœ ๊ฐ„๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ Context๋ฅผ ์ƒ์„ฑํ•ด User๋ฅผ ์ด์šฉํ•ด Cluster์— ์ ‘๊ทผํ•˜๋Š” ์ง€์ • ์‚ฌํ•ญ์„ ์ง€์ •ํ•œ๋‹ค.

์ด์ œ kubeConfig ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์„ ์‚ดํŽด๋ณด์ž.
clusters, contexts, users ์„ธ ์˜์—ญ์ด ์žˆ๊ณ  ๊ฐ๊ฐ ๋ฐฐ์—ด ํ˜•์‹์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์ค‘์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์ค‘ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์ผ ์ ‘๊ทผํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์™€ ์‚ฌ์šฉ์ž๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŒŒ์ผ์ด ์ค€๋น„๋˜๋ฉด ์–ด๋–ค ๊ฐœ์ฒด๋„ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
ํŒŒ์ผ์€ ์ด๋Œ€๋กœ ๋‘๊ณ  kubectl ๋ช…๋ น์— ์˜ํ•ด kubeconfig ํŒŒ์ผ ์„ค์ •๊ฐ’์ด ์ฝํžŒ๋‹ค.
kubeconfig ํŒŒ์ผ์— current-context ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ธฐ๋ณธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ ์ค‘์ธ ํ˜„์žฌ ํŒŒ์ผ์„ ๋ณด๋ ค๋ฉด kubectl config view ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
์•ž์„œ ๋งํ–ˆ๋“ฏ์ด ์–ด๋–ค kubeconfig ํŒŒ์ผ์„ ์‚ฌ์šฉํ• ์ง€ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํด๋”์— ์œ„์น˜ํ•œ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ธฐ๋ณธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

๋‹ค๋ฅธ kubeconfig ํŒŒ์ผ์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์˜ต์…˜์œผ๋กœ ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด kubectl config use-context ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

kubectl config ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒŒ์ผ์—์„œ ๋‹ค๋ฅธ ์ˆ˜์ •์„ ํ•˜๊ฑฐ๋‚˜ ์•„์ดํ…œ์„ ์‚ญ์ œํ•˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

kubeconfig ํŒŒ์ผ์˜ context ์˜์—ญ์€ namespace๋ผ๋Š” ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
namespace ํ•„๋“œ๋ฅผ ๋ช…์‹œํ•˜๋ฉด, ํŠน์ • ์ปจํ…์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

kubeconfig ํŒŒ์ผ์—์„œ ์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ๋•Œ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•˜๋Š” ๋Œ€์‹  ์ธ์ฆ์„œ ์ž์ฒด์˜ ์ปจํ…์ธ ๋ฅผ ์ธ์ฝ”๋”ฉํ•ด์„œ ๋ช…์‹œํ•  ์ˆ˜๋„ ์žˆ๋‹ค.




155. Solution - KubeConfig


my-kube-config ํŒŒ์ผ์„ default kubeconfig ํŒŒ์ผ๋กœ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.




157. API Groups

ํด๋Ÿฌ์Šคํ„ฐ์™€ ๊ด€๋ จํ•ด kubectl ๋ช…๋ น์–ด๋‚˜ REST API๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์ž‘์—…์„ ํ–ˆ๋“  kube-api server์™€ ์ƒํ˜ธ์ž‘์šฉํ•ด์™”๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋Š” ๋ชฉ์ ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, /metrics, /healthz, /version, /api, /apis, /logs ๋“ฑ์ด ์žˆ๋‹ค.

/version API๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฒ„์ „์„ ๋ณด๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.
/metrics์™€ /healthz API๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
/logs๋Š” ํƒ€์‚ฌ ๋กœ๊ทธ์™€ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

์ด๋ฒˆ ๊ฐ•์˜์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๊ธฐ๋Šฅ์„ ์ฑ…์ž„์ง€๋Š” API์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค.
์ด API๋Š” core ๊ทธ๋ฃน๊ณผ named ๊ทธ๋ฃน ์ด๋ ‡๊ฒŒ 2๊ฐ€์ง€๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋ชจ๋‘ core ๊ทธ๋ฃน์— ์žˆ๋‹ค.

named ๊ทธ๋ฃน API๋Š” ์ข€ ๋” ์กฐ์งํ™”๋˜์–ด ์žˆ๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
๋งจ ์œ„์— ์žˆ๋Š” ๊ฑด API Groups์ด๊ณ  ๋งจ ๋ฐ‘์— ์žˆ๋Š” ๊ฑด ํ•ด๋‹น ๊ทธ๋ฃน์˜ Resources์ด๋‹ค.
๊ฐ ๋ฆฌ์†Œ์Šค๋Š” ๊ด€๋ จ ๋™์ž‘ ๋ชจ์Œ(Verbs)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ์ฐธ์กฐ ํŽ˜์ด์ง€๋Š” ๊ฐ ๊ฐœ์ฒด์— ๋Œ€ํ•œ API ๊ทธ๋ฃน์„ ์•Œ๋ ค์ค€๋‹ค.

kube-api server์— ์•„๋ฌด ๊ฒฝ๋กœ ํ…์ŠคํŠธ์—†์ด ์ ‘๊ทผํ•˜๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ API ๊ทธ๋ฃน ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‚˜์˜จ๋‹ค.
/apis API์— ์ ‘๊ทผํ•ด์„œ named API ๊ทธ๋ฃน ๋‚ด์—์„œ ์ง–์›๋˜๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

curl ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด API์— ์ง์ ‘ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ, apiVersion๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.(Failure, forbidden)
๋ชจ๋“  ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠน์ • ์ธ์ฆ ๋งค์ปค๋‹ˆ์ฆ˜(๊ฐœ์ธํ‚ค, ์ธ์ฆ์„œ, ca)์„ ์ง€์ •ํ•ด์„œ ์ธ์ฆ์„œ ํŒŒ์ผ์„ ์ด์šฉํ•ด API์— ์ธ์ฆํ•ด์•ผ ํ•œ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ kubectl proxy ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
kubectl proxy ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์„œ 127.0.0.1:8001์—์„œ ๋™์ž‘ํ•˜๋Š” ํ”„๋ก์‹œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ ์ ‘๊ทผ์„ ์œ„ํ•ด kubeconfig ํŒŒ์ผ์˜ ์ž๊ฒฉ ์ฆ๋ช…๊ณผ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— curl ๋ช…๋ น์–ด์— ์ธ์ฆ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
curl localhost:8001 ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด kubectl proxy ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. kubectl proxy๋Š” kubeconfig ํŒŒ์ผ์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ด์šฉํ•ด kube-api server๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค. ๋ฃจํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  API๋ฅผ ๋‚˜์—ดํ•œ๋‹ค.

kube proxy๋Š” kubectl proxy๊ฐ€ ์•„๋‹ˆ๋‹ค.
kube-proxy๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋‹ค์–‘ํ•œ ๋…ธ๋“œ์— ๊ฑธ์ณ ํŒŒ๋“œ์™€ ์„œ๋น„์Šค ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
๋ฐ˜๋ฉด์—, kubectl proxy๋Š” HTTPS ํ”„๋ก์‹œ ์„œ๋น„์Šค๋กœ kubectl ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ kube-api server์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ๊ฒƒ์ด๋‹ค.


์š”์•ฝํ•˜์ž๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋Š” ๋‹ค๋ฅธ API ๊ทธ๋ฃน์œผ๋กœ ๊ทธ๋ฃนํ™”๋˜์–ด ์žˆ๋‹ค.
์ƒ๋‹จ ๋ ˆ๋ฒจ์—๋Š” cored API ๊ทธ๋ฃน๊ณผ named API ๊ทธ๋ฃน์ด ์žˆ๋‹ค.
named API ๊ทธ๋ฃน ์•„๋ž˜์—๋Š” ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๊ณ  ๊ฐ ๋ฆฌ์†Œ์Šค์—” verbs๋ผ๋Š” ๊ด€๋ จ ์ž‘์—… ๋ชจ์Œ์ด ์žˆ๋‹ค.




158. Authorization

์ ‘์†ํ•ด์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๊ฐ€ Authorization์˜ ์ •์˜์ด๋‹ค.
์šฐ๋ฆฌ๋Š” ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์ ‘๊ทผ๋งŒ ์ œ๊ณตํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ์กฐ์ง์ด๋‚˜ ํŒ€์œผ๋กœ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด namespace๋ฅผ ์ด์šฉํ•ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ Authorization(๊ถŒํ•œ ๋ถ€์—ฌ)๋Š” ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ง€์›ํ•˜๋Š” Authorization ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋‹ค์–‘ํ•˜๋‹ค.
Node, ABAC(Attribute-Based Access Control), RBAC(Role-Based Access Control), Webhook์ด ์žˆ๋‹ค.


kube-api server๋Š” ๊ด€๋ฆฌ ๋ชฉ์ ์œผ๋กœ ์šฐ๋ฆฌ์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋…ธ๋“œ์˜ kubelet์— ์˜ํ•ด ์ ‘๊ทผ๋œ๋‹ค.
kubelet์€ kube-api server์— ์ ‘๊ทผํ•˜์—ฌ Services, Endpoints, Nodes, Pods์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ฝ๊ณ  Node status, Pod status, events์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด๊ณ ํ•œ๋‹ค.
์ด๋Ÿฌํ•œ kubelet์˜ ์š”์ฒญ์€ ํŠน๋ณ„ํ•œ ์Šน์ธ์ž(Node Authorizer)์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค.
์ด์ „ ๊ฐ•์˜์—์„œ ์ธ์ฆ์„œ์— ๊ด€ํ•ด ์ด์•ผ๊ธฐ ํ•  ๋•Œ, kubelet์€ system:node ๊ทธ๋ฃน์˜ ์ผ๋ถ€์ด๋ฉฐ ์ด๋ฆ„ ์•ž์— 'system:node'๋ฅผ ๋ถ™์—ฌ์•ผ ํ–ˆ๋‹ค. system:node ๊ทธ๋ฃน์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๋ฉด Node Authorizer์— ์˜ํ•ด ์Šน์ธ๋˜๊ณ  kubelet์€ ํŠน๊ถŒ์„ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค.
์ด ๊ฒƒ์ด ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


kube-api server์˜ ์™ธ๋ถ€ ์ ‘๊ทผ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด์ž.
ABAC(Attribute-Based Access Control, ํŠน์„ฑ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด)๋ž€ ์‚ฌ์šฉ์ž๋‚˜ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์„ ๊ถŒํ•œ ๋ชจ์Œ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ๋ฐœ์ž(dev-user)๋Š” pod๋ฅผ ๋ณด๊ณ  ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ์ธ์ ‘ํ˜•์‹์œผ๋กœ ์ •์˜๋œ Policy ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  kube-api server์— ์ด ํŒŒ์ผ์„ ๋„˜๊ฒจ์•ผ ํ•œ๋‹ค.
๊ฐ๊ฐ์˜ ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน์— ๋Œ€ํ•œ policy ์ •์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๋ณด์•ˆ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ๋งˆ๋‹ค policy ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•˜๊ณ  kube-api server๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ABAC๋Š” ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค.


๋‹ค์Œ์œผ๋กœ RBAC(Role-Based Access Control, ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด)์ด๋‹ค.
RBAC๋Š” ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน์„ ๊ถŒํ•œ ์ง‘ํ•ฉ(policy)๋กœ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋Š” ๋Œ€์‹  ์—ญํ• ์„ ์ •์˜ํ•œ๋‹ค.
์š”๊ตฌ๋˜๋Š” ๊ถŒํ•œ ์ง‘ํ•ฉ์œผ๋กœ ์—ญํ• ์„ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ์—ญํ• ์ด ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ทธ ์—ญํ• ์„ ์—ฐ๊ฒฐํ•œ๋‹ค.
์•ž์œผ๋กœ๋Š” ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ ๊ถŒํ•œ์— ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์—ญํ• ์„ ์ˆ˜์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฆ‰์‹œ ๋ฐ˜์˜๋œ๋‹ค.
RBAC๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ์— ์ข€ ๋” ํ‘œ์ค€์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.


๋‚ด์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค.
๊ฐ€๋ น, Open Policy Agent๋Š” ์ž…์žฅ ํ†ต์ œ์™€ ์Šน์ธ์„ ๋„์šฐ๋ฉฐ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•œ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์‚ฌ์šฉ์ž์— ๊ด€ํ•œ ์ •๋ณด์™€ ์š”๊ตฌ ์‚ฌํ•ญ ์ ‘๊ทผ ์ •๋ณด์™€ ํ•จ๊ป˜ Open Policy Agent์— API ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. Open Policy Agent๊ฐ€ ์‚ฌ์šฉ์ž์˜ ํ—ˆ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Open Policy Agent์˜ ์‘๋‹ต์— ๊ทผ๊ฑฐํ•ด ์‚ฌ์šฉ์ž๋Š” ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค.


๊ทธ ์™ธ์—๋„ AlwaysAllow์™€ AlwaysDeny ๋ชจ๋“œ๊ฐ€ ์žˆ๋‹ค.
AlwaysAllow๋Š” ์–ด๋–ค ์Šน์ธ ํ™•์ธ๋„ ์—†์ด ๋ชจ๋“  ์š”์ฒญ์„ ํ—ˆ์šฉํ•œ๋‹ค.
AlwaysDeny๋Š” ํ•ญ์ƒ ๋ชจ๋“  ์š”์ฒญ์„ ๊ฑฐ์ ˆํ•œ๋‹ค.

kube-api ์„œ๋ฒ„์˜ '--authorization-mode' ์˜ต์…˜์„ ํ†ตํ•ด Authorization mode๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์˜ต์…˜์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ AlwaysAllow๊ฐ€ ์„ค์ •๋œ๋‹ค.

๋‹ค์–‘ํ•œ ๋ชจ๋“œ ๋ชฉ๋ก์„ ์‰ผํ‘œ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค์–‘ํ•œ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•œ ๊ฒฝ์šฐ, ์ง€์ •๋œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ๊ฐ์˜ ์š”์ฒญ์„ ์‚ฌ์šฉํ•  ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋œ๋‹ค.
๋ชจ๋“ˆ์˜ ์š”์ฒญ์ด ๊ฑฐ๋ถ€๋  ๋•Œ๋งˆ๋‹ค ์ฒด์ธ์˜ ๋‹ค์Œ ๋ชจ๋“ˆ๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋ชจ๋“ˆ์ด ์š”์ฒญ์„ ์Šน์ธํ•˜๋Š” ์ˆœ๊ฐ„ ๋”๋Š” ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์Šน์ธ์„ ๋ฐ›๋Š”๋‹ค.




159. Role Based Access Controls

์ด๋ฒˆ ๊ฐ•์˜์—์„œ๋Š” RBAC(Role-Based Access Control, ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด)์„ ์ƒ์„ธํžˆ ์‚ดํŽด๋ณด์ž.
Role ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Role ์ •์˜ ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
Role ์ •์˜ ํŒŒ์ผ์—๋Š” rules ์˜์—ญ์ด ์žˆ๋‹ค. rules ์˜์—ญ์€ apiGroups, resources, verbs ์ด๋ ‡๊ฒŒ ์„ธ ๊ฐœ์˜ ์„น์…˜์œผ๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.
์ด์ „ ๊ฐ•์˜์—์„œ ๋ฐฐ์› ๋“ฏ์ด core ๊ทธ๋ฃน์€ apiGroups ํ•„๋“œ๋ฅผ ๋น„์›Œ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.
์—ญํ•  ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ทธ ์—ญํ• ์— ๋งํฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Rolebinding ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ์ž ๊ฐœ์ฒด๋ฅผ Role์— ์—ฐ๊ฒฐํ•œ๋‹ค.
subjects ์˜์—ญ์€ ์‚ฌ์šฉ์ž์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
roleRef ์˜์—ญ์€ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  Role์˜ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ œ๊ณตํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
kubectl create ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด RoleBinding ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.
Role๊ณผ RoleBinding์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ฒ”์œ„ ์•„๋ž˜์— ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” namespace๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์—์„œ dev-user๋Š” pod ๋ฐ configMap์— ์ ๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
๋งŒ์•ฝ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์—ญํ• ์„ ์ œํ•œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Role๊ณผ RoleBinding ์ •์˜ ํŒŒ์ผ์˜ metadata ์˜์—ญ์˜ namespace ํ•„๋“œ๋ฅผ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ƒ์„ฑ๋œ Role, RoleBinding์„ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
๋งŒ์•ฝ ๊ด€๋ฆฌ์ž๋ผ๋ฉด '--as' ์˜ต์…˜์„ ์ง€์ •ํ•˜์—ฌ ๋‹ค๋ฅธ ์œ ์ €๋ฅผ ์‚ฌ์นญํ•ด ๋‹ค๋ฅธ ์œ ์ €์˜ ๊ถŒํ•œ์„ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
๋ช…๋ น์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•œ ๋‹จ๊ณ„ ๋” ๋‚ด๋ ค๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์—๋งŒ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
Role ์ •์˜ ํŒŒ์ผ์˜ rules ์˜์—ญ์— resourceName ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค.
์•„๋ž˜ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๋Š” rules์— resourceName ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ blue, orange ํŒŒ๋“œ์—๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•˜์˜€๋‹ค.




161. Solution - Role Based Access Controls

ํด๋Ÿฌ์Šคํ„ฐ์˜ Authorization Mode๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” /etc/kubernetes/manifests/kube-apiserver.yaml ํŒŒ์ผ์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.


wc -l ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊ฐœ์ˆ˜๋ฅผ ์…€ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ๋งจ ์œ„์˜ ํ—ค๋”๋„ ํฌํ•จํ•˜์—ฌ ์นด์šดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์— 1์„ ๋นผ์ค˜์•ผ ํ•œ๋‹ค.

๋˜๋Š” ํ—ค๋”๋ฅผ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด '--no-headers' ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ž.


ํŠน์ • ์œ ์ €๊ฐ€ ์ž‘์—… ๊ถŒํ•œ์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด kubectl auth can-i ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ
์ด์ฒ˜๋Ÿผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ '--as ํŠน์ •์œ ์ €' ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.


๋ช…๋ น์ ์ธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ๋„ role์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ช…๋ น์ ์ธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ๋„ rolebinding์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.




162. Cluster Roles and Role Bindings

Role๊ณผ RoleBinding์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์— ์ƒ์„ฑ๋œ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด default ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๋…ธ๋“œ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์˜ํ•ด ๊ทธ๋ฃนํ™”, ๊ฒฉ๋ฆฌ๋  ์ˆ˜ ์—†๋‹ค. ๋…ธ๋“œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์™€์ด๋“œ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ด๋‹ค.
๊ทธ๋ž˜์„œ ๋ฆฌ์†Œ์Šค๋Š” Namespace๋‚˜ Cluster Scope์— ์˜ํ•ด ๋ถ„๋ฅ˜๋œ๋‹ค.
Cluster Scope์˜ ๋ฆฌ์†Œ์Šค๋Š” ์ƒ์„ฑ ์‹œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.(Cluster Scope๋Š” ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์•„์šฐ๋ฅด๋Š” ์˜์—ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๋“ฏ?๐Ÿค”)

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์„ ๋ณด๋ ค๋ฉด kubectl api-resources --namespaced=true ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
๋น„๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์„ ๋ณด๋ ค๋ฉด kubectl api-resources --namespaced=false ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.


  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ์šฐ, Authorization์„ ์œ„ํ•ด role๊ณผ rolebinding์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ๋น„๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ์šฐ, Authrization์„ ์œ„ํ•ด clusterrole๊ณผ clusterrolebinding์„ ์‚ฌ์šฉํ•œ๋‹ค.

clusterrole์€ resource์˜ ๋ฒ”์œ„๊ฐ€ cluster scope์ธ ๊ฒƒ๋งŒ ์ œ์™ธํ•˜๋ฉด role๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
clusterrole ์ •์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  rules ์˜์—ญ์— apiGroups, resources, verbs ํ•„๋“œ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

clusterrolebinding ๊ฐœ์ฒด๋Š” ์‚ฌ์šฉ์ž์™€ cluster role์„ ์—ฐ๊ฒฐํ•œ๋‹ค.
subjects ์˜์—ญ์— ์‚ฌ์šฉ์ž ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ง€์ •ํ•œ๋‹ค. roleRef ์˜์—ญ์—๋Š” cluster role์— ๋Œ€ํ•ด ์ง€์ •ํ•œ๋‹ค.

cluserrole๊ณผ clusterrolebinding์€ cluster scope์˜ ๋ฆฌ์†Œ์Šค์— ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ namespace ๋ฆฌ์†Œ์Šค์—๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค.
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ฒ˜์Œ ์„ค์ •๋˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ clusterrole์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ ๋‹ค.

profile
์ด์ „์˜ ๊ธฐ๋ก๋“ค ๐Ÿ‘‰ https://blog.naver.com/reviewerkyj

0๊ฐœ์˜ ๋Œ“๊ธ€