๐ CKA 14์ผ์ฐจ
๐ Udemy-Certified Kubernetes Administrator (CKA) with Practice Tests 163-173
clusterroles์ clusterrolebindings ๊ฐ์ ์ธ๊ธฐ
clusterroles๋ cluster wide(ํด๋ฌ์คํฐ ์ ์ฒด) ๋ฒ์์ ํด๋นํ๊ธฐ ๋๋ฌธ์ namespace๋ฅผ ๊ฐ์ง ์๋๋ค.
์ฃผ์ํ ์ !
kubectl get clusterrolebinding
๋ช ๋ น์ด๋ ํ ๋น๋ user์ ๋ํ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ์ง ์๋๋ค.
user์ ๋ํ ์ ๋ณด๋ฅผ ์๊ธฐ ์ํด์๋kubectl describe
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๋ช
๋ น์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ clusterrole๊ณผ clusterrolebinding ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
Service Account์ ๊ฐ๋ ์ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ค๋ฅธ ๋ณด์ ๊ด๋ จ ๊ฐ๋ ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค ๊ณ์ ์๋ ๋ ๊ฐ์ง ์ ํ์ด ์๋ค.
์ฌ์ฉ์ ๊ณ์ ์ ์ฌ๋์ด ์ฌ์ฉํ๊ณ ์๋น์ค ๊ณ์ ์ ์ปดํจํฐ๊ฐ ์ฌ์ฉํ๋ค.
์ฌ์ฉ์ ๊ณ์ ์ ์์) ๊ด๋ฆฌ ์์ ์ ์ํํ๊ธฐ ์ํด ํด๋ฌ์คํฐ์ ์ ๊ทผํ๋ Admin์ด ๋ ์ ์๊ณ ์์ฉ ํ๋ก๊ทธ๋จ ๋ฐฐํฌ ๋ฑ์ ์ํด ๊ฐ๋ฐ์๊ฐ ํด๋ฌ์คํฐ์ ์ ๊ทผํ๋ Developer๊ฐ ์๋ค.
์๋น์ค ๊ณ์ ์ ์์) ํ๋ก๋ฉํ ์ฐ์ค ๊ฐ์ ๋ชจ๋ํฐ๋ง ์ดํ๋ฆฌ์ผ์ด์ ์ ํตํด ์ฟ ๋ฒ๋คํฐ์ค API์ ์ฑ๋ฅ์ ๋ฝ์๋ด๋ Prometheus, ์ ํจ์ค ๊ฐ์ ์๋ํ๋ ๋น๋ ํด์ ์ด์ฉํด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌํ๋ Jenkins
์์ฉ ํ๋ก๊ทธ๋จ์ด ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ฉด ์ธ์ฆ์ด ๋์ด์ผ ํ๋ค. ๊ทธ๋์ ์๋น์ค ๊ณ์ ์ ์ฌ์ฉํ๋ค.
์๋น์ค ๊ณ์ ์ ์์ฑํ๊ณ ์กฐํํ๋ ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
์๋น์ค ๊ณ์ ์ด ์์ฑ๋๋ฉด ํ ํฐ๋ ์๋์ผ๋ก ์์ฑ๋๋ค. ์๋น์ค ๊ณ์ ํ ํฐ์ ์ฟ ๋ฒ๋คํฐ์ค API์ ์ธ์ฆํ๋ ๋์ ์ธ๋ถ ์ฑ์ด ๋ฐ๋์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ด๋ค.
์๋์ผ๋ก ์์ฑ๋ ํ ํฐ์ Secret ๊ฐ์ฒด๋ก ์ ์ฅ๋๋ค. Service Account๊ฐ ์์ฑ๋๋ฉด ๋จผ์ Service Account๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ทธ ๋ค์ Service Account๋ฅผ ์ํ ํ ํฐ์ ์์ฑํ๋ค. ๊ทธ๋ฐ ๋ค์ Secret์ ๋ง๋ค์ด ๊ทธ ์์ ํ ํฐ์ ์ ์ฅํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค API์ ๋ํ ์ธ์ฆ์ด ํ์ํ ํ์ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ, ํ์ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ํธ์คํ
ํ๋ ํ๋ ๋ด๋ถ์ Service Account์ Secret ํ ํฐ์ ๋ณผ๋ฅจ์ผ๋ก ์๋ ๋ง์ดํธํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค์ ๋ชจ๋ ๋ค์์คํ์ด์ค์๋ default๋ผ๊ณ ๋ช
๋ช
๋ Service Account๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค.
๋ฐ๋ผ์, ๊ฐ ๋ค์์คํ์ด์ค์๋ ์๋์ผ๋ก ์์ฑ๋ default Service Account๊ฐ ์๊ณ ํ๋๊ฐ ์์ฑ๋ ๋๋ง๋ค default Service Account๊ณผ ํ ํฐ์ด ์๋์ผ๋ก ํด๋น ํ๋๋ก ๋ณผ๋ฅจ ๋ง์ดํธ๋๋ค.
ํ๋ ์ ์ ํ์ผ์ ํ์ธํด๋ณด๋ฉด ์ด๋ ํ Secret์ด๋ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ๋ช
์ํ์ง ์์๋ค.
ํ์ง๋ง kubectl describe
๋ช
๋ น์ด๋ก ํ๋์ ์์ธ ์ฌํญ์ ์ดํด๋ณด๋ฉด default-token์ด๋ผ๋ Secret์ผ๋ก๋ถํฐ ๋ณผ๋ฅจ์ด ์๋์ผ๋ก ์์ฑ๋์์์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ default-token Secret์ Service Account๋ฅผ ์ํ ํ ํฐ์ ํฌํจํ๋ Secret์ด๋ค.
default-token Secret์ ์์น๊ฐ '/var/run/secrets/kubernetes.io/serviceaccount'์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํ๋ ๋ด๋ถ์์ ls ๋ช
๋ น์ ์คํํด์ ํด๋น ๋๋ ํ ๋ฆฌ์ ์กด์ฌํ๋ 3๊ฐ์ ํ์ผ๋ก ๋ง์ดํธ๋ secret์ ํ์ธํ ์ ์๋ค. ์ค์ ํ ํฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ token์ด๋ผ๋ ํ์ผ์ด๋ค. ํด๋น ํ์ผ ๋ด์ฉ์ ๋ณด๋ฉด kubernetes API ์ ๊ทผ์ ์ฌ์ฉ๋๋ ํ ํฐ์ ํ์ธํ ์ ์๋ค.
default Service Account๋ ๊ธฐ๋ณธ ์ฟ ๋ฒ๋คํฐ์ค API ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ถํ๋ง ๊ฐ๋๋ก ์ ํ๋๋ค.
๋ค๋ฅธ Service Account๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ํ๋ ์ ์ ํ์ผ์ ์์ ํด์ serviceAccountName ํ๋๊ฐ ์๋ก์ด Service Account์ ์ด๋ฆ์ ์ฐธ์กฐํ๋๋ก ํด์ผํ๋ค.
๊ธฐ์กด ํ๋์ Service Account๋ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ๋ง๋ค์ด์ผ ํ๋ค.
ํ์ง๋ง deployment์ ๊ฒฝ์ฐ, ํ๋ ์ ์ ํ์ผ์ ๋ณํ๊ฐ ์๊ธฐ๋ฉด ์๋์ผ๋ก deployment๋ฅผ ์ํด rolloutํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด Service Account์ผ๋ก ์ ํ๋๋ฅผ ์ญ์ ํ๊ณ ์ฌ์์ฑํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค์์ ์๋ฌด๊ฒ๋ ๋ช
์ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก default Service Account๋ฅผ ๋ง์ดํธํ๋ค๋ ๊ฒ์ ๋ช
์ฌํด๋ผ!!
automountServiceAccountToken ํ๋๋ฅผ false๋ก ์ค์ ํ๋ฉด Service Account๋ฅผ ์๋์ผ๋ก ๋ง์ดํธํ์ง ์๋๋ค.
๋ฆด๋ฆฌ์ฆ๋ฒ์ 1.22, 1.24์์ Service Account์ ๊ด๋ จํด ๋ณ๊ฒฝ๋ ์ฌํญ๋ค์ ํ์ธํด๋ณด์!
๋ชจ๋ ๋ค์์คํ์ด์ค์๋ default Service Account์ด ์๊ณ ๊ทธ Service Account์๋ ๊ด๋ จ๋ token์ด ์๋ Secret์ด ์๋ค. ํ๋๊ฐ ์์ฑ๋๋ฉด ์๋์ผ๋ก Service Account์ ํ๋๋ฅผ ์ฐ๊ฒฐํ๊ณ ํ๋ ๋ด ์ ์๋ ค์ง ์์น๋ก ํ ํฐ์ ๋ง์ดํธํ๋ค.
์ด ๊ฒฝ์ฐ์ 'var/run/secrets/kubernetes.io/serviceaccount'์ด๋ค.
ํ ํฐ์ jwt ์น์ฌ์ดํธ์์ ํด๋
ํด๋ณผ ์ ์๋ค.
ํด๋
ํด๋ดค๋ฏ์ด ํ ํฐ์ ๋ง๋ฃ์ผ์๊ฐ ์๋ค. ๊ทธ๋์ ์๋น์ค ๊ณ์ ์ด ์กด์ฌํ๋ ํ ํ ํฐ์ ์ ํจํ๋ค.
๋๊ตฌ๋ ๊ฐ JWT๋ ์๋น์ค ๋น ๊ฐ๋ณ Secret ๊ฐ์ฒด๋ฅผ ์๊ตฌํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ํ์ฅ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฒ์ 1.22์์ TokenRequestAPI๋ ์ฟ ๋ฒ๋คํฐ์ค ๊ฐ์ ์ ์์1205์ ์ผ๋ถ๋ก API๋ฅผ ํตํด ๋ ์์ ํ๊ณ ํ์ฅ์ฑ ์๊ฒ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ๊ณ์ ํ ํฐ์ ํ๋ก๋น์ ๋ํ๋ ๋ฉ์ปค๋์ฆ์ ๋์
ํ๋ค.
TokenRequestAPI์์ ์์ฑ๋ ํ ํฐ์ Audience Bound, Time Bound, Object Bound๋ก ์ธํด ๋ ์์ ํ๋ค.
๋ฒ์ 1.22 ์ดํ๋ก ์๋ก์ด ํ๋๊ฐ ์์ฑ๋๋ฉด ๋ ์ด์ Service Account์ Secret token์ ์์กดํ์ง ์๋๋ค.
๋์ TokenRequestAPI๋ฅผ ํตํด ์ ํด์ง ๋ง๋ฃ์ผ์๋ฅผ ๊ฐ์ง ํ ํฐ์ด ์์ฑ๋๊ณ ํ๋์ volume์ผ๋ก ํ์ฌ๋๋ค.
๋ฒ์ 1.24์์๋ ๋ ์ด์ ์๋์ผ๋ก Secret์ด๋ Secret Token์ด ์์ฑ๋์ง ์๋๋ก ๋ณ๊ฒฝ๋์๋ค.
๋ฐ๋ผ์, kubectl create
๋ช
๋ น์ด๋ก ํ์ํ ํ ํฐ์ ์์ฑํด์ผ ํ๋ค. ์ด๋, ์๋น์ค ๊ณ์ ์ด๋ฆ์ ์
๋ ฅํด ํ์ํ ์๋น์ค ๊ณ์ ์ ์ํ ํ ํฐ์ ์์ฑํ๋๋ก ํด์ผ ํ๋ค.
์์ฑํ ํ ํฐ์ ํด๋ ํด๋ณด๋ฉด ์๊ฐ 'exp' ๋ง๋ฃ ๋ ์ง๊ฐ ์ ์๋์ด ์๋ค. ์๊ฐ ์ ํ์ ๋ช ์ํ์ง ์์๋ค๋ฉด ๋ณดํต 1์๊ฐ์ผ๋ก ์ ํํ๋ค. ๋ช ๋ น์ ์ถ๊ฐ ์ต์ ์ ์ ๋ฌํด ํ ํฐ์ ๋ง๋ฃ ๊ธฐ๊ฐ์ ๋๋ฆด ์๋ ์๋ค.
๋ฒ์ 1.24์์ ์๋ ๋ฐฉ์์ผ๋ก Secret token์ ์ด์ฉํ service account๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด Secret ์ ์ ํ์ผ์ ํตํด ๋ง๋ค ์ ์๋ค. kind ํ๋๋ฅผ 'kubernetes.io/service-account-token'์ผ๋ก ์ง์ ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ metadata ์์ญ์ kubernetes.io/service-account.name ํ๋์ service account์ ์ด๋ฆ์ ๋ช
์ํด์ผ ํ๋ค.
์๋น์ค ๊ณ์ ์ ๋จผ์ ์์ฑํ๊ณ ๊ทธ ๋ค์์ Secret์ ์์ฑํ๊ธฐ ๋๋ฌธ์ secret ๊ฐ์ฒด๊ฐ ํน์ service account์ ์ฐ๊ฒฐ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋์ service-account-token ํ์
์ผ๋ก secret์ ๋ง๋ค๋ฉด service account์ ๊ด๋ จ๋ secret ๊ฐ์ฒด์ ๋ง๋ฃ๋์ง ์๋ ํ ํฐ์ ์์ฑํ ๊ฒ์ด๋ค.
๊ณต์ ๋ฌธ์์ ๋ช
์๋ Service account token Secrets์ ๋ํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
pod์ service account๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง
ํ๋ ์ ์ ํ์ผ์์ ์ปจํ
์ด๋ ์ด๋ฏธ์ง ์ด๋ฆ์ Docker์ ์ด๋ฏธ์ง ๋ช
๋ช
๊ท์น์ ๋ฐ๋ฅธ ๊ฒ์ด๋ค.
nginx๋ ์ด๋ฏธ์ง ํน์ ์ ์ฅ์ ์ด๋ฆ์ด๋ค.
์ด๋ฏธ์ง ์ด๋ฆ์ ์ ๋ถ๋ถ์ ์ฌ์ฉ์ ๋๋ ๊ณ์ ์ด๋ฆ์ด๋ค. ๊ทธ๋์ ์ฌ์ฉ์๋ ๊ณ์ ์ด๋ฆ์ ์ ๊ณตํ์ง ์์ผ๋ฉด library๋ผ๊ณ ์ธ์ํ๋ค. library๋ docker์ ๊ณต์ ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋๋ ๊ธฐ๋ณธ ๊ณ์ ์ ์ด๋ฆ์ด๋ค.
์ฌ์ฉ์ ์ด๋ฆ์ ์ ๋ถ๋ถ์ ๋ ์ง์คํธ๋ฆฌ ์ด๋ฆ์ด๋ค. ๋ ์ง์คํธ๋ฆฌ ์ด๋ฆ์ด ์ง์ ๋์ง ์์๋ค๋ฉด Docker์ ๊ธฐ๋ณธ๊ฐ ๋ ์ง์คํธ๋ฆฌ์ธ Docker Hub๋ก ์ถ์ ๋๋ค.
Docker Hub์ DNS ์ด๋ฆ์ docker.io์ด๋ค.
๋ ์ง์คํธ๋ฆฌ๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๊ณณ์ด๋ค.
์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ฑฐ๋ ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธํ ๋๋ง๋ค ๋ ์ง์คํธ๋ฆฌ์ ํธ์(push)ํ๋ฉด ๋๊ตฐ๊ฐ ์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌํ ๋๋ง๋ค ๋ ์ง์คํธ๋ฆฌ์์ ๋์ด์จ๋ค(pull).
Docker hub ์ด ์ธ์๋ ๊ตฌ๊ธ์ gcr ๋ฑ ์ ๋ช ํ ๋ ์ง์คํธ๋ฆฌ๋ค์ด ๋ง๋ค.
์ผ๋ฐ์ธ์๊ฒ ๊ณต๊ฐ๋์ด์๋ ์๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ ๊ฒฝ์ฐ private registry๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
private registry์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์๊ฒฉ ์ฆ๋ช
์ด ํ์ํ๋ค.
ํ๋ ์ ์ ํ์ผ์์ ๊ฐ์ธ ๋ ์ง์คํธ๋ฆฌ์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ, ๊ฐ์ธ ๋ ์ง์คํธ๋ฆฌ์ ์ ๊ทผํ๊ธฐ ์ํ ์๊ฒฉ ์ฆ๋ช
์ ํฌํจํ๋ Secret ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํ๋ ์ ์ ํ์ผ์์ imagePullSecrets ํ๋๋ก Secret ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ํจ์ผ๋ก์จ ์ธ์ฆ๊ณผ์ ์ ํด๊ฒฐํ ์ ์๋ค.
kubectl create secret docker-registry
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ private registry์ ๋ํ secret์ ์์ฑํ ์ ์๋ค. ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด '-h' ์ต์
์ ์ฌ์ฉํ์!
imagePullSecret์ pod ์ ์ ํ์ผ์ ๋ช
์ํ๊ธฐ
docker์ ์ค์น๋ ํธ์คํธ์๋ ๋ค์์ ์ด์ ์ฒด์ ํ๋ก์ธ์ค๋ deamon, ssh ์๋ฒ ๋ฑ์ผ๋ก ์คํ๋๋ ํ๋ก์ธ์ค์ ์งํฉ์ ๊ฐ์ง๊ณ ์๋ค. ๊ฐ์๋จธ์ ๊ณผ ๋ฌ๋ฆฌ ์ปจํ
์ด๋๋ ํธ์คํธ๋ก๋ถํฐ ์์ ํ ๊ฒฉ๋ฆฌ๋์ด ์์ง ์๋ค. ๊ทธ๋์ ์ปจํ
์ด๋์ ํธ์คํธ๊ฐ ๊ฐ์ ์ปค๋์ ๊ณต์ ํ๋ค.
์ปจํ
์ด๋๋ ๋ฆฌ๋
์ค์์ namespace๋ฅผ ์ด์ฉํด ๊ฒฉ๋ฆฌ๋๋ค. ์ปจํ
์ด๋์ ์ํด ์คํ๋๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ ํธ์คํธ ์์ฒด์์ ์คํ๋์ง๋ง ๊ณ ์ ์ ๋ค์์คํ์ด์ค์์ ์คํ๋๋ค.
๊ณ ์ ์ ๋ค์์คํ์ด์ค์ ์์ด ๊ณ ์ ์ ํ๋ก์ธ์ค๋ง ๋ณผ ์ ์๋ค. ๋ฐ๊นฅ์ด๋ ๋ค๋ฅธ ๋ค์์คํ์ด์ค์์๋ ๋ณผ ์ ์๋ค.
sleep 3600
๋ช
๋ น์ด๋ฅผ ์ํํ๋ docker conatainer ๋ด์์ ps aux
๋ช
๋ น์ด๋ก docker contaner ๋ด์ ํ๋ก์ธ์ค๋ฅผ ๋์ดํ๋ฉด PID 1๋ก sleep 3600
ํ๋ก์ธ์ค๋ฅผ ๋ณผ ์ ์๋ค.
ํธ์คํธ์์ ps aux
๋ช
๋ น์ด๋ก ํธ์คํธ ๋ด์ ํ๋ก์ธ์ค๋ฅผ ๋์ดํ๋ฉด sleep 3600
๋ฅผ ์คํ ์ค์ธ ๋ค๋ฅธ PID๋ฅผ ํ์ธํ ์ ์๋ค.
์ด๋ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ๋ค์์คํ์ด์ค์์ ๋ค๋ฅธ PID๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๊ฒ์ด docker๊ฐ ์์คํ
๋ด์์ ์ปจํ
์ด๋๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
docker ํธ์คํธ๋ ๋ฃจํธ ์ ์ ํ ๋ช
๊ณผ ๋ค์์ ๋น๋ฃจํธ ์ ์ ๋ก ์ด๋ฃจ์ด์ง ์ฌ์ฉ์ ์งํฉ์ ๊ฐ๊ณ ์๋ค.
๊ธฐ๋ณธ๊ฐ์ผ๋ก docker๋ ๋ฃจํธ ์ฌ์ฉ์๋ก์ ์ปจํ
์ด๋ ๋ด์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค. ์ปจํ
์ด๋ ์๊ณผ ๋ฐ์ ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋ฃจํธ ์ฌ์ฉ์๋ก ์คํ๋๋ค.
์ปจํ
์ด๋ ๋ด์ ํ๋ก์ธ์ค๊ฐ ๋ฃจํธ ์ฌ์ฉ์๋ก ์คํ๋๊ธธ ์ํ์ง ์๋๋ค๋ฉด docker run
๋ช
๋ น ์์์ '--user' ์ต์
์ ์ฌ์ฉํด ์ฌ์ฉ์๋ฅผ ์ค์ ํ๊ณ ์ ์ฌ์ฉ์ ID๋ฅผ ๋ช
์ํ๋ฉด ๋๋ค. ๋ช
์๋ USER ID๋ก ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ์ฉ์ ๋ณด์์ ์คํํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ Dockerfile์์ USER๋ฅผ ์ง์ ํ๋ ๊ฒ์ด๋ค.
docker๋ ์ปจํ
์ด๋ ๋ด ๋ฃจํธ ์ฌ์ฉ์์ ๋ฅ๋ ฅ์ ์ ํํ๋ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ปจํ
์ด๋ ์์ ๋ฃจํธ ์ฌ์ฉ์๋ ํธ์คํธ์ ๋ฃจํธ ์ฌ์ฉ์์๋ ๋ค๋ฅด๋ค.
docker๋ ์ด๊ฒ์ ๊ตฌํํ๊ธฐ ์ํด ๋ฆฌ๋
์ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
๋ฃจํธ ์ฌ์ฉ์๋ ์์คํ
์์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ฌ์ฉ์์ด๋ค. ๋ฃจํธ ์ฌ์ฉ์๋ ๋ญ๋ ํ ์ ์๊ณ ๋ฃจํธ ์ฌ์ฉ์์ ์ํ ํ๋ก์ธ์ค๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์คํ
์ ์ ํ ์์ด ์ ๊ทผํ ์ ์๋ค. '/usr/include/linux/capability.h'์์ ๋ฃจํธ ์ฌ์ฉ์๊ฐ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ฆฌ์คํธ๋ฅผ ํ์ธํ ์ ์๋ค.
๊ธฐ๋ณธ๊ฐ์ผ๋ก docker๋ ์ปจํ
์ด๋์ ๊ธฐ๋ฅ์ ์ ํํ๋ค.
ํธ์คํธ๋ฅผ ์ฌ๋ถํ
ํ๊ฑฐ๋ ๊ฐ์ ํธ์คํธ์์ ์คํ๋๋ ํธ์คํธ๋ ๋ค๋ฅธ ์ปจํ
์ด๋๋ฅผ ๋ฐฉํดํ ์ ์๋ค.
์ด ๋์์ ์ฌ์ ์ํ๊ณ ์ถ๊ฐ์ ์ธ ํน๊ถ์ ์ ๊ณตํ๊ณ ์ถ๋ค๋ฉด docker run ๋ช
๋ น์ '--cap-add [์ถ๊ฐํ ๊ถํ]' ์ต์
์ ์ถ๊ฐํ๋ฉด ๋๋ค.
๋๋กญ ํน๊ถ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด '--cap-drop [์ ๊ฑฐํ ๊ถํ]' ์ต์
์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ชจ๋ ๊ถํ์ด ํ์ฑํ๋ ์ปจํ
์ด๋๋ฅผ ์คํํ๊ณ ์ถ๋ค๋ฉด '--previleged' ์ต์
์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ง๋ ๊ฐ์์์ ๋ดค๋ฏ์ด docker ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ ๋ณด์ ํ์ค ์งํฉ์ ์ ์ํ ์ต์
์ด ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค์์๋ ์ค์ ํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค์์๋ ์ปจํ
์ด๋๋ฅผ ํ๋์ ๋ฃ์ด ๋ณด๊ดํ๋ค. ๊ทธ๋์ ์ปจํ
์ด๋ ์์ค์ด๋ ํ๋ ์์ค์์ ๋ณด์ ์ค์ ์ ์ ํํ ์ ์๋ค.
ํ๋ ์์ค์ผ๋ก ์ค์ ํ๋ฉด ํ๋ ๋ด ๋ชจ๋ ์ปจํ
์ด๋์ ์ค์ ๊ฐ์ด ์ ๋ฌ๋๋ค.
ํ๋ ์ ์ ํ์ผ์์ securityContext ์์ญ์ ํตํด ํ๋ ์์ค์ ๋ณด์ ์ค์ ์ ํ ์ ์๋ค.
runAsUser ํ๋์ผ๋ก ํ๋ ์ฌ์ฉ์ ID๋ฅผ ์ค์ ํ๋ค.
์ปจํ
์ด๋ ์์ค์์ ๋ณด์์ ์ค์ ํ๋ ค๋ฉด containers ์์ญ์ securityContext ์์ญ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ capabilities ์์ญ์ ์ถ๊ฐํ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋ช
์ํ๋ฉด ๋๋ค. capabilities ์์ญ์ ์ปจํ
์ด๋ ์์ค์์๋ง ์ง์ ๊ฐ๋ฅํ๋ค!
ํ๋ ์์ค์์ ๋ณด์ ์ค์ ์ ํด์ผํ์ง ์๋...? ์ ์ปจํ
์ด๋ ์์ค์์ ๋ณด์ ์ค์ ์ ํ๋ ๊ฑฐ์ง...?๐
๊ทธ๋ฆฌ๊ณ ์ ํ๋ ์์ค์์ ์ค์ ํ๋ฉด edit๋์ง ์์๊น???
ํ๋ ์คํ์๋ฅผ ์ง์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋์ ์คํ์๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ ํ๋๋ฅผ ์ญ์ ํ๊ณ ์ฌ์์ฑํด์ผ ํ๋ค.
ํ๋ ๋ ๋ฒจ๊ณผ ์ปจํ
์ด๋ ๋ ๋ฒจ ๋ณด์ ์ค์ ์์