์ด ๊ธ์ Kubernetes Best Practice๋ฅผ ์ฝ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๊ณผ ์ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์์ฑํ ๊ธ์ ๋๋ค. ๋ชจ๋ ๋ด์ฉ์ ์ฑ ์ ํฌํจ๋์ด ์๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฑ ์ ๊ตฌ๋งคํด์ ์ฝ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ต๊ทผ ์๋น์ค ๋ฉ์์ ๋ํด ์์๋ณด๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๊ณ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ค์๋ ์๊ฐ์ ์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ธ๊ฐ? ๋ผ๋ ์๊ฐ์ด์์ต๋๋ค. ์ด์ ๋ํ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋ ๋งํ ์ฑ ์ ๋ฐ๊ฒฌํด์ ์ฝ์ด๋ณด๊ณ ์ ํฉ๋๋ค.
ConfigMap & Secret
์ปจํ ์ด๋์ ๋์ ์ด์์ฑ์ ๋ท๋ฐ์นจํ๋ ํน์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๊ฒฝ์ ๋ถ๋ฆฌ ์ฆ, ๋ฐํ์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ํ๊ฒฝ ๋ณ์๋ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ํตํด ์ฃผ์ ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ฆฌ์์ค๋ก ConfigMap๊ณผ Secret์ ์ ๊ณตํฉ๋๋ค. ConfigMap๊ณผ Secret์ด ์ํํ๋ ์ญํ ์ ๋์ผํ์ง๋ง ์ค์ํ ์ฐจ์ด์ ์ Pod์ด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์๊ณผ ๋ฐ์ดํฐ etcd์ ์ ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค.
Secret์ base64 ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉ๋์ด ํํ๋ฉ๋๋ค. ํ์ง๋ง ์ํธํ๊ฐ ์๋ ์ธ์ฝ๋ฉ์ด๊ธฐ ๋๋ฌธ์ Pod์ ์ฃผ์
๋ ์๊ฐ ์ผ๋ฐ ํ
์คํธ ํํ๋ก ๋ณด์ฌ์ง๊ฒ ๋ฉ๋๋ค. (ConfigMap๊ณผ ๋์ผํ๊ฒ ์ํธํ๋ฅผ ์ง์ํ์ง ์๋๋ค๋ฉด ์ Secret์ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น?๋ผ๋ ๊ถ๊ธ์ฆ์ด ์๊ฒผ๋๋ฐ ์กฐ๋ํ๋์ ๊ธ์ ์ฐธ๊ณ ํ๋ฉด SSL ์ธ์ฆ์์ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๊ฒฝ์ฐ์๋ ๋ฌธ์์ด๋ก ์ ์ฅ์ด ๋ถ๊ฐ๋ฅ ํ๊ธฐ ๋๋ฌธ์ ์ธ์ฝ๋ฉํ์ฌ ์ ์ฅํ ์ ์๋๋ก ์ง์ํ๊ธฐ ์ํจ์ด๋ผ๊ณ ํฉ๋๋ค.)
Secret์ด ์ง์ํ๋ ํ์ ์ผ๋ก๋ ์ผ๋ฐ ํ์ผ์ด๋ ๋ฌธ์์ด ์์๋ก ์์ฑ๋๋ generic ๊ณผ docker registry ์ธ์ฆ์ ํ์ํ ์ ์์ธ docker-registry, public/private key๋ก ์์ฑ๋๋ TLS Secret์ด ์กด์ฌํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ ์๋ Secret์ ์ด๋ฅผ ์ฌ์ฉํ๋ Pod๊ฐ ๋ ์๋ Node์ tmpfs์ ๋ง์ดํธ๋๊ณ Pod์ด ์ข ๋ฃ๋๋ฉด ํด๋น Secret์ ์ญ์ ๋ฉ๋๋ค. ํ์ง๋ง etcd์๋ ํ๋ฌธ์ผ๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ํด์๋ etcd ๋ ธ๋๊ฐ mTLS ๋ฐ ๋ฐ์ดํฐ ์ ์ฅ ์ ์ํธํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ ๋ฑ์ ๋ณ๋์ ๋ฐฉ์์ด๋ Hasicorp Valut์ ๊ฐ์ KMS Solution์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
ConfigMap & Secret ๋ณ๊ฒฝ
ConfigMap ๋ฐ Secret์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค. ๋ ๋ฐฉ๋ฒ์ ์ค์ ์ด ๋ณ๊ฒฝ๋์์ ๋ ๋์ํ๋ ๋ฐฉ์์ ์์ด ์ฐจ์ด์ ์ด ์กด์ฌํฉ๋๋ค.
Volume Mount
๋จผ์ ๋ณผ๋ฅจ์ผ๋ก ๋ง์ดํธ ํ๋ ๋ฐฉ์์
๋๋ค. ConfigMap/Secret์ ์์ฑ ์ด๋ฆ์ ๋ง์ดํธ ๋ ๋ณผ๋ฅจ์ ํ์ผ๋ช
์ด ๋๊ณ , ๊ฐ์ ํ์ผ ๋ด์ฉ์ด ๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ค์ ์ด ๋ณ๊ฒฝ ๋์ ๋ ์๋ก์ด ๋ฒ์ ์ Pod์ ๋ค์ ๋ฐฐํฌํ์ง ์์๋ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ ์
๋ฐ์ดํธ๋ฉ๋๋ค. ๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด kubelet์ ํตํด ๋๊ธฐํ ์์
์ด ์ํ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.(๋ฌผ๋ก ์ดํ๋ฆฌ์ผ์ด์
์์์ ์ฌ์์์ด ํ์ํ ์๋ ์์ต๋๋ค.)
์ด ๋ฐฉ๋ฒ์ผ๋ก Pod์ด ๋ฐฐํฌ๋๊ธฐ ์ ์ ๋์ผํ ๋ค์์คํ์ด์ค ์์ ConfigMap/Secret์ด ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ Pod์ด ์คํ๋์ง ์์ง๋ง `Optional` ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์กด์ฌํ์ง ์๋๋ผ๋ Pod์ด ์์๋๋๋ก ํ ์ ์์ต๋๋ค.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
- name: OPTIONAL_ENV
valueFrom:
configMapKeyRef:
name: test-cm
key: optional.key
optional: true
Admission Controller๋ฅผ ์ฌ์ฉํด์ ํน์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ฐฐํฌ๋ฅผ ๋ง์ ์๋ ์์ต๋๋ค.
(Admission Controller๋ Kubernetes API๋ฅผ ํธ์ถํ์ ๋ ํด๋น ์์ฒญ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ฒ์ฆํ๋ ํ๋ฌ๊ทธ์ธ์ ์งํฉ์ผ๋ก Istio์ Envoy Proxy Injection, ResourceQuota ๋ฑ์ด ์กด์ฌํฉ๋๋ค. Admission Controller์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์๋ alice_k106๋์ ๋ธ๋ก๊ทธ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.).
๋ง์ฝ Admission Controller๋ฅผ ์ ์ํ๋ ๊ฒ์ด ์ ํ๋๋ค๋ฉด LifeCycle Hook์ ํตํด ConfigMap/Secret์ ๋ฐฐํฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํฉ๋๋ค.
Environment Variable
๋ค์์ ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์
๋๋ค. envFrom์ ํตํด ConfigMap/Secret ๋ด ๋ชจ๋ ๊ฐ๋ค์ ํ๊ฒฝ๋ณ์๋ก ์ค์ ํ ์ ์๊ณ configMapKeyRef / secretKeyRef๋ฅผ ํตํด ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ๋ ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ConfigMap/Secret์ด ๋ฐฐํฌ๋์ง ์์ ๊ฒฝ์ฐ Pod์ ์์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง envFrom์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ถ์ ํฉํ ๊ฐ์ ๋ํด InvalidVariableName์ด๋ผ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ํด๋น ๊ฐ์ ๊ฑด๋๋ด ์ฑ๋ก Pod์ด ์์๋ฉ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ ๋ณผ๋ฅจ ๋ง์ดํธ์๋ ๋ค๋ฅด๊ฒ ConfigMap/Secret์ ์ ๋ฐ์ดํธ ํ๋ ๊ฒฝ์ฐ Pod ์์ ๊ฐ์ ์ ๋ฐ์ดํธ ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Pod์ ์ญ์ ํ ์ฌ์์์ด๋ Deployment์ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์ฌ์์ํ๋ ์ ๋ต์ด ํ์ํฉ๋๋ค. ์ฑ ์์ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ ConfigMap/Secret์ ์ด๋ฆ๊ณผ deployment์์ ์ฐธ์กฐํ๊ณ ์๋ ConfigMap์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ์๋์ผ๋ก Deployment๊ฐ ์ ๋ฐ์ดํธ ๋๋๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ฆฌ์์ค ์ ๊ทผ ์ ํ ์ ๋ต
์ฟ ๋ฒ๋คํฐ์ค์์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ์ ํ์ ์ํ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
User Account, Service Account๋ฅผ ํตํด ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ๊ด๋ฆฌ - ์ธ์ฆ
RBAC๋ฅผ ํตํด ์ธ์ฆ๋ ์ฌ์ฉ์์๊ฒ ์ฌ๋ฌ API์ ๋ํ ๊ถํ์ ๋ถ์ฌ - ์ธ๊ฐ
RBAC
RBAC๋ ๊ท์น ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ๋จํ ๋งํ๋ฉด ๋์์ ํ์ฉํ ๊ท์น์ ์ ์ํจ์ผ๋ก์จ ์ ๊ทผ ๊ถํ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. RBAC์ ๋ํ ์์ธํ ์ค๋ช ์ ๋ฐ๋ก ๋ค๋ฃจ์ง๋ ์๊ฒ ์ต๋๋ค. ๋ด์ฉ์ด ๊ถ๊ธํ์ ๋ถ๋ค์ ๊ณต์ ๋ฌธ์์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
RBAC๋ฅผ ์ ์ฉํ๋ฉด ์ฃผ์ํด์ผํ ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Kubernetes API์ ์ ๊ทผํ๊ณ ์ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค๋ฉด ์๋ก์ด Service Account๋ฅผ ๋ง๋ค๊ณ ์ต์ํ์ ๊ถํ๋ง์ ๊ฐ์ง๋ Role์ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- CI/CD Tool์ ์ฌ์ฉํ ๋์๋ ์ด๋ฅผ ์ํ ์๋น์ค ๊ณ์ ์ ์ฌ์ฉํด์ ์ค๋ธ์ ํธ์ ๋ฐฐํฌ ๋ฐ ์ญ์ ์ ๋ํ ๊ฐ์ํด์ผ ํฉ๋๋ค.
์ด์ธ์๋ ๋ช๊ฐ์ง ๊ถ์ฅ ์ฌํญ์ด ์กด์ฌํ์ง๋ง ํ์ฌ๋ ์ดํดํ ์ ์๋ ๋ถ๋ถ์ด์ฌ์ ์ดํด๋๋ ๋ถ๋ถ๋ง ์์ฑํ์์ต๋๋ค.
'๐ Book Review > ๐ Kubernetes Best Practice' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kubernetes Best Practice] 6. ๋ฒ์ , ๋ฆด๋ฆฌ์ค, ๋กค์์ (0) | 2021.03.01 |
---|---|
[Kubernetes Best Practice] 5. ์ง์์ ํตํฉ, ํ ์คํธ, ๋ฐฐํฌ (0) | 2021.02.25 |
[Kubernetes Best Practice] 3. ๋ชจ๋ํฐ๋ง๊ณผ ๋ก๊น (0) | 2021.02.14 |
[Kubernetes Best Practice] 2. ๊ฐ๋ฐ์ ์ํฌํ๋ก (0) | 2021.01.31 |
[Kubernetes Best Practice] 1. ๊ธฐ๋ณธ ์๋น์ค ์ค์น (0) | 2021.01.30 |
๋๊ธ