Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Use a User Namespace With a Pod
ํ๋์ ์ ์ ๋ค์์คํ์ด์ค ์ฌ์ฉํ๊ธฐ
Kubernetes v1.25 [alpha]
์ด ํ์ด์ง๋ ์คํ ์ดํธ๋ฆฌ์ค(stateless) ํ๋์ ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃฌ๋ค. ์ด๋ฅผ ํตํด ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ ์ค์ธ ์ ์ ๋ฅผ ํธ์คํธ์ ์ ์ ๋ก๋ถํฐ ๋ถ๋ฆฌํ ์ ์๋ค.
์ปจํ ์ด๋์์ ๋ฃจํธ๋ก ์คํ๋๋ ํ๋ก์ธ์ค๋ ํธ์คํธ์์ ๋ค๋ฅธ(๋ฃจํธ๊ฐ ์๋) ์ ์ ๋ก ์คํํ ์ ์๋ค. ์ฆ, ํ๋ก์ธ์ค๋ ์ ์ ๋ค์์คํ์ด์ค ๋ด๋ถ์ ์์ ์ ๋ํ ๋ชจ๋ ๊ถํ์ ๊ฐ์ง๋ง ๋ค์์คํ์ด์ค ์ธ๋ถ์ ์์ ์ ๋ํด์๋ ๊ถํ์ด ์๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์์๋ ์ปจํ ์ด๋๊ฐ ํธ์คํธ ๋๋ ๋์ผํ ๋ ธ๋์ ๋ค๋ฅธ ํ๋์ ๋ฏธ์น ํผํด๋ฅผ ์ค์ผ ์ ์๋ค. ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ด์ฉํ๋ฉด, HIGH ๋๋ CRITICAL ๋ก ๋ถ๋ฅ๋๋ ์ฌ๋ฌ ๋ณด์ ์ทจ์ฝ์ ์ ๋ณด์ํ ์ ์๋ค. ์ ์ ๋ค์์คํ์ด์ค๋ ํฅํ ๋ฐ์ํ ์ ์๋ ์ฌ๋ฌ ์ทจ์ฝ์ ๋ ์ํ์ํฌ ๊ฒ์ผ๋ก ์์๋๋ค.
์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฃจํธ๋ก ์คํํ๋ ์ปจํ ์ด๋๋ ์ปจํ ์ด๋ ๋ธ๋ ์ดํฌ์์(breakout)์ด ๋ฐ์ํ๋ฉด ๋ ธ๋์ ๋ฃจํธ ๊ถํ์ ๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋์ ์ด๋ค ๊ธฐ๋ฅ์ด ๋ถ์ฌ๋์ด ์๋ค๋ฉด ํด๋น ๊ธฐ๋ฅ์ ํธ์คํธ์์๋ ์ ํจํ๋ค. ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ด์ฉํ๋ค๋ฉด ์ ํ ํด๋น๋์ง ์๋ ๋ด์ฉ์ด๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์๋ฒ์ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ๊ฑฐ๋ ๋ ๋์์ผ ํจ. ๋ฒ์ : v1.25.๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
- ๋ ธ๋์ ์ด์์ฒด์ ๋ ๋ฆฌ๋ ์ค๋ฅผ ์ฌ์ฉํ๋ค.
- ํธ์คํธ์์ ์ปค๋งจ๋๋ฅผ exec ํ ์ ์์ด์ผ ํ๋ค.
- ํ๋ ๋ด๋ถ๋ก exec ํ ์ ์์ด์ผ ํ๋ค.
- ๊ธฐ๋ฅ ๊ฒ์ดํธ 'UserNamespacesStatelessPodsSupport'๋ฅผ ํ์ฑํํด์ผ ํ๋ค.
์ถ๊ฐ์ ์ผ๋ก, ์ฟ ๋ฒ๋คํฐ์ค ์คํ ์ดํธ๋ฆฌ์ค(stateless) ํ๋์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ปจํ ์ด๋ ๋ฐํ์์์ ์ง์์ด ํ์ํ๋ค.
- CRI-O: v1.25๋ ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ํ๋ค.
์ปจํ
์ด๋ ๋ฐํ์์ด ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ํ์ง ์์ผ๋ฉด,
์ pod.spec
ํ๋๋ ๋ณ๋ค๋ฅธ ๊ฒฝ๊ณ ์์ด ๋ฌด์๋๊ณ ํ๋๋ ์ ์ ๋ค์์คํ์ด์ค ์์ด ์์ฑ๋๋ค ๋
์ฌ์ค์ ๋ช
์ฌํ๋ค.
์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํ๋๋ฅผ ๋์์ํค๊ธฐ
์คํ
์ดํธ๋ฆฌ์ค ํ๋์ ์ ์ ๋ค์์คํ์ด์ค๋ .spec
์ hostUsers
ํ๋๋ฅผ
false
๋ก ์ค์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ๋ค์์ ์์์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: userns
spec:
hostUsers: false
containers:
- name: shell
command: ["sleep", "infinity"]
image: debian
ํด๋ฌ์คํฐ์ ํ๋๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/pods/user-namespaces-stateless.yaml
์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๊ณ
readlink /proc/self/ns/user
๋ฅผ ์คํํ๋ค.kubectl attach -it userns bash
๊ทธ๋ฆฌ๊ณ ๋ช ๋ น์ ์คํํ๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ์ ์ฌํ๋ค.
readlink /proc/self/ns/user
user:[4026531837]
cat /proc/self/uid_map
0 0 4294967295
๊ทธ๋ฐ ๋ค์ ํธ์คํธ์์ ์ ธ์ ์ด๊ณ ๋์ผํ ๋ช ๋ น์ ์คํํ๋ค.
๊ฒฐ๊ณผ๋ ๋ถ๋ช ๋ค๋ฅผ ๊ฒ์ด๋ค. ์ด๋ ํธ์คํธ์ ํ๋๊ฐ ๋ค๋ฅธ ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์์ ์๋ฏธํ๋ค. ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ง ์์ผ๋ฉด ํธ์คํธ์ ํ๋๋ ๋์ผํ ์ ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
์ ์ ๋ค์์คํ์ด์ค ๋ด์์ kubelet์ ์คํํ๊ณ ์๋ค๋ฉด, ํ๋์์ ์คํํ ๋ช ๋ น์ ๊ฒฐ๊ณผ์ ํธ์คํธ์์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๋ค.
readlink /proc/$pid/ns/user
user:[4026534732]
$pid
์ kubelet์ PID๋ก ๋์ฒดํ๋ค.
์ด ํ์ด์ง๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํ์๋ก ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์จ๋ํํฐ ํ๋ก์ ํธ ๋๋ ์ ํ์ ๋ํด ์ธ๊ธํ๊ณ ์์ต๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํ๋ก์ ํธ ์ ์๋ค์ ์ด๋ฌํ ์จ๋ํํฐ ํ๋ก์ ํธ ๋๋ ์ ํ์ ๋ํด ์ฑ ์์ง์ง ์์ต๋๋ค. CNCF ์น์ฌ์ดํธ ๊ฐ์ด๋๋ผ์ธ์์ ๋ ์์ธํ ๋ด์ฉ์ ํ์ธํฉ๋๋ค.
๋ค๋ฅธ ์จ๋ํํฐ ๋งํฌ๋ฅผ ์ถ๊ฐํ๋ ๋ณ๊ฒฝ์ ์ ์ํ๊ธฐ ์ ์, ์ปจํ ์ธ ๊ฐ์ด๋๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.