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
  1. ํด๋Ÿฌ์Šคํ„ฐ์— ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    kubectl apply -f https://k8s.io/examples/pods/user-namespaces-stateless.yaml
    
  2. ์ปจํ…Œ์ด๋„ˆ์— ์—ฐ๊ฒฐํ•˜๊ณ  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 ์›น์‚ฌ์ดํŠธ ๊ฐ€์ด๋“œ๋ผ์ธ์—์„œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์จ๋“œํŒŒํ‹ฐ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜๊ธฐ ์ „์—, ์ปจํ…์ธ  ๊ฐ€์ด๋“œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ข… ์ˆ˜์ • September 17, 2022 at 1:09 PM PST: Translate user-namespaces file into Korean (6e6e700a12)