์ด ๊ธ์ Kubernetes Best Practice๋ฅผ ์ฝ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๊ณผ ์ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์์ฑํ ๊ธ์ ๋๋ค. ๋ชจ๋ ๋ด์ฉ์ ์ฑ ์ ํฌํจ๋์ด ์๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฑ ์ ๊ตฌ๋งคํด์ ์ฝ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ต๊ทผ ์๋น์ค ๋ฉ์์ ๋ํด ์์๋ณด๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๊ณ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ค์๋ ์๊ฐ์ ์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ธ๊ฐ? ๋ผ๋ ์๊ฐ์ด์์ต๋๋ค. ์ด์ ๋ํ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋ ๋งํ ์ฑ ์ ๋ฐ๊ฒฌํด์ ์ฝ์ด๋ณด๊ณ ์ ํฉ๋๋ค.
๊ฐ๋ฐ๋จ๊ณ์์ ์ฟ ๋ฒ๋คํฐ์ค ํ์ฉ
Kubernetes๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ ์ธก๋ฉด์์ ๋ง์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. Controller๋ฅผ ํตํ Reconcile ๋ก์ง ์ํ, Deployment๋ฅผ ํตํ Rollout๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ์ด์ ํด๋นํฉ๋๋ค. ํ์ง๋ง ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ์ ์ฅ์์๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋์ ํจ์ผ๋ก์จ ์ด์ ์ ์ป์ผ๋ ค๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ด์ ๋จ๊ณ์์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ ๊ฐ๋ฐ ๋จ๊ณ์์์ ํธ์์ฑ์ ์ํด์๋ ํ์ฉํด์ผ ํฉ๋๋ค.
๊ฐ๋ฐ ๊ณผ์ ์์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ ๊ณ ๋ คํ ๋ถ๋ถ์ ๋ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๋ถ๋ถ๋ค์ ์ธ๊ธํ๊ณ ์์ต๋๋ค.
- ํด๋ฌ์คํฐ์ ์์ฑํ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ํ ์คํธํ ์ ์์ด์ผ ํฉ๋๋ค.
- merge ์ ๋ชจ๋ ํ ์คํธ๊ฐ ์๋์ผ๋ก ์ํ๋์ด์ผ ํฉ๋๋ค.
- ํด๋ฌ์คํฐ ํ๊ฒฝ ๋ฌธ์ ๋ก ์ธํด ํ ์คํธ๊ฐ ์คํจํ์ง ์์์ผ ํฉ๋๋ค.
๊ฐ๋ฐ์ฉ ํด๋ฌ์คํฐ ๊ตฌ์ถ
๊ฐ๋ฐ์ฉ ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํ๋ณ(ํน์ธ ๊ฐ์ธ๋ณ)๋ก ํด๋ฌ์คํฐ๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ๊ณผ ๋จ์ผ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ๋ค์์คํ์ด์ค๋ฅผ ํตํด ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค. ์ธํด์ ์งํํ๋ ๊ณณ์์๋ ํ์์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์๊ณ ๋น์ ์ด์ ์ ๋ํด ๊ถ๊ธํ์๋๋ฐ... ๊ฐ ๋ฐฉ๋ฒ์ ์ฅ๋จ์ ์ ํ์
ํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ๊ฐ๋ณ์ ์ธ ํด๋ฌ์คํฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ํฐ ๋จ์ ์ ๋น์ฉ๊ณผ ๊ด๋ฆฌํด์ผํ ๋์์ด ๋ง์์ง๋ค๋ ์ ์ ๋๋ค. ๋ํ ํด๋ฌ์คํฐ์ ์ฌ์ฉ๋ฅ ์ด ๋นํจ์จ์ ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์์ง ์ ์์ต๋๋ค. (๊ธฐ๋ณธ์ผ๋ก ํ ๋น๋ ํด๋ฌ์คํฐ์ ์คํ์ด ์ค๋ฒ์คํ์ด ๋ ์๋..) ํ์ง๋ง, ํด๋ฌ์คํฐ๊ฐ ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ์ ๊ฐ์ญ์ด ์๋ค๋ ์ฅ์ ์ด ์กด์ฌํฉ๋๋ค.
๋ค์์ผ๋ก ๋จ์ผ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ๋ค์์คํ์ด์ค๋ฅผ ํตํด ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ญ์ ๋น์ฉ์
๋๋ค. ๊ฐ์ ์ธ์์ด๋ผ๊ณ ํ ๊ฒฝ์ฐ์ ๋ ์์ ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ํด๋ฌ์คํฐ ์ด์ ๋น์ฉ์ด ๊ฐ์ํ๊ฒ ๋ฉ๋๋(๋ํ ์ฑ
์์๋ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ๊ฐ๋ฐ์์๊ฒ ํ์ํ ์์คํ
์ ์ค์นํ๊ธฐ๊ฐ ์ฉ์ดํ๋ค๊ณ ํ๋๋ฐ ์ด์ ๊ฐ ์ดํด๋์ง ์์์ ์ผ๋จ ๋ณด๋ฅ). ํ์ง๋ง, ์ฌ์ฉ์ ๊ฐ ๊ฐ์ญ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์์ค ๊ด๋ฆฌ ๋ฐ RBAC๋ฅผ ํตํ ๊ถํ ์ ์ด๊ฐ ํ์ํฉ๋๋ค.
์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ ํ์๋ก ์ด๋ฅผ ๋์ ํจ์ ์์ด ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๋ ์จ๋ณด๋ฉ ๊ณผ์ ๊ณผ ์ฌ์ฉ์ ๊ถํ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ๋ญ๋น๋๊ณ ์๋ ๋ฆฌ์์ค๊ฐ ์๋์ง ๊ด๋ฆฌํ๋ ์์ ์ ์๊ฐ์ ํฌ์ํด์ผ ํฉ๋๋ค.
๋ค์์ผ๋ก๋ ๊ณต์ฉ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ค์์คํ์ด์ค๋ฅผ ํ ๋นํ๋ ๊ณผ์ ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์์ฝํ ๋ด์ฉ์ ๋๋ค.
์จ๋ณด๋ฉ ํ๋ก์ธ์ค
์ฌ์ฉ์๊ฐ ๋ค์์คํ์ด์ค๋ฅผ ํ ๋น ๋ฐ๊ธฐ ์ํด์๋ ๋จผ์ ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. ๊ถํ์ ๋ถ์ฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋กญ๊ฒ ์์ฑํ kubeconfig ํ์ผ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ AWS IAM๊ณผ ๊ฐ์ ์ธ๋ถ ์ ์ ์์คํ ์ ํตํด ์ ๊ทผ ๊ถํ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ์ ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์ธก๋ฉด์์ ์ธ๋ถ ์ ์ ์์คํ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชจ๋ฒ ์ฌ๋ก์ด์ง๋ง, ์ ํ๋๋ ๊ฒฝ์ฐ ์ ์์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ฑ ์์๋ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์ํ pemํ์ผ๊ณผ csr ํ์ผ์ ์์ฑํ๊ณ ์ด๋ฅผ ํตํด ์๋ก์ด ์ฆ๋ช ์ ์์ฑ, ๋ค์ด๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์๊ฐํฉ๋๋ค. ์๋ก์ด ์ฌ์ฉ์๋ Kubernetes์์ ๋ฐ๊ธํ ์ธ์ฆ์๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผํ๊ณ , ์ด ์ธ์ฆ์๋ฅผ API ํธ์ถ์ Certificate Header๋ก ์ ๊ณตํ๊ฑฐ๋ kubectl์ ํตํด ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ฌ์ฉ์ ์ฆ๋ช ์์ฑ
๊ฐ์ฅ ๋จผ์ ํด์ผํ๋ ์์ ์ private key์ CSR์ ๋ฐ๊ธ๋ฐ๋ ์์ ์ ๋๋ค. ๋ค์ํ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ๋ฐ๋ก ๋ค๋ฃจ์ง ์์ง๋ง ๋ค์ ์์ ์ ์ํํ๊ธฐ ์ํด์๋ key.pem ํ์ผ๊ณผ csr ํ์ผ์ด ์กด์ฌํด์ผ ํฉ๋๋ค.
๋ค์์ผ๋ก ์ ์ ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ Kubernetes์ ์ธ์ฆ์ ๋ฐ๊ธ์ ์์ฒญํ๋ CertificateSigningRequest ๋ฆฌ์์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค(์ฑ ์์ ์ฌ์ฉํ api ๋ฒ์ ์ v1beta1์ด์ง๋ง ๋ฌธ์๋ฅผ ๋ณด๋ฉด v1์ ์ฌ์ฉํ๊ณ ์๊ณ , v1 ๋ฒ์ ์์๋ signerName ํ๋๊ฐ ํ์๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค).
cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: ${csr_name}
spec:
groups:
- system:authenticated
request: $(cat ${csr} | base64 | tr -d '\n')
signerName: kubernetes.io/kube-apiserver-client
usages:
- digital signature
- key encipherment
- client auth
EOF
๋ค์์ผ๋ก kubectl์ ํตํด CSR์ ์์ฑํ๊ณ ์ด๋ฅผ ์น์ธํด์ผํฉ๋๋ค. ์น์ธ ์์ ์ด ์๋ฃ๋์์ผ๋ฉด csr์ ํตํด crt ํ์ผ์ ์์ฑํฉ๋๋ค.
> kubectl certificate approve <csr_name>
> kubectl get csr/<csr_name> -o jsonpath='{.status.certificate}' \
| base 64 --decode > <csr_name>.crt
๋ง์ง๋ง์ผ๋ก crtํ์ผ๊ณผ pem ํ์ผ์ kubeconfig์ ์ถ๊ฐํจ์ผ๋ก์จ ์๋ก์ด ์ ์ ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
kubectl config set-credentials <user_name> \
--client-key=<key-file> \
--client-certificate=<crt=file> \
--embed-certs=true
์ฐธ๊ณ ๊ธ : kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/
Namespace ์ ๊ทผ ๊ถํ ๋ถ์ฌ
์์ ๊ณผ์ ์ ํตํด์ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ํ์ฑํ ํ ์ ์์ง๋ง ๋ค์์คํ์ด์ค์ ๋ํ ๊ถํ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. ํน์ ์ฌ์ฉ์์๊ฒ๋ง ๋ค์์คํ์ด์ค ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๊ธฐ ์ํด RoleBinding์ ์ฌ์ฉํฉ๋๋ค.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: user-role-binding
namespace: my-namespace
roleRef:
apiGroup: rbac.authorization.k8s.io/v1
kind: ClusterRole
name: edit
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: myuser
์ฌ๊ธฐ์ ์ ClusterRole๊ณผ ๋ฐ์ธ๋ฉํ๋์ง ๊ฐ์ธ์ ์ผ๋ก ๊ถ๊ธํด์ ์๊ฐํด๋ดค๋๋ฐ ์ ์๋ Role์ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด์ ์กด์ฌํ๋ clusterRole์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ด๋ ๊ฒ ์์ฑํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ClusterRole์ RoleBinding์ ํตํด ๋ฐ์ธ๋ฉ ํ๋ ๊ฒฝ์ฐ ์ง์ ํ ๋ค์์คํ์ด์ค ์์์ ClusterRole์ ๊ถํ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๊ถํ์ ๋ถ์ฌํ ๋ ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ์์ ์ ๋ณด๊ธฐ ์ํด ์ ์ฒด ํด๋ฌ์คํฐ์ ์ฝ๊ธฐ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ด ์ค์ฉ์ ์ด๋ผ๊ณ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ํฌ๋ฆฟ ๋ฆฌ์์ค์ ๋ํด์๋ ์ฝ๊ธฐ ๊ถํ์ ์ ์ธ์์ผ ํด์ผํ๋ค๋ ์ ์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
๋ฆฌ์์ค ์ฌ์ฉ๋ ์ ํ
ํน์ ๋ค์์คํ์ด์ค๊ฐ ํด๋ฌ์คํฐ ์ ์ฒด์ ๋ฆฌ์์ค์ ์ํฅ์ ์ฃผ์ง ์๊ฒ ํ๊ธฐ ์ํด์ ๋ค์์คํ์ด์ค ๋ณ๋ก ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ ํํด์ผ ํฉ๋๋ค. Kubernetes์์๋ ResourceQuota๋ฅผ ํตํด ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ค์์คํ์ด์ค ๊ด๋ฆฌ
ํน์ ์ฌ์ฉ์์๊ฒ ๋ค์์คํ์ด์ค๋ฅผ ํ ๋นํ ๋ ์์ฑ ๊ณผ์ ์์ ๋ฐ๋ก ํ ๋นํด์ฃผ๋ ๋ฐฉ๋ฒ์ ๋ค์์คํ์ด์ค๊ฐ ์๊ตฌ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ ๋ฆฌ์์ค๋ฅผ ํ์ ํ๊ณ ํ์์๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ด์ ๋ํ ๋์์ผ๋ก๋ TTL์ ์ง๋ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑ, ํ ๋นํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ฌ์คํฐ์ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. TTL์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์์คํ์ด์ค๋ฅผ ์์ฑ ๋ฐ ํ ๋นํ ๋ ๋ค์์คํ์ด์ค์ TTL์ ๋น๋กฏํ ๊ฐ๋ฐ์, ๋ฆฌ์์ค ์ ๋ณด์ ๊ฐ์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ํฌํจ์์ผ ์ดํ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ๋ํ ์ถ์ ์ ๋ณด๋ค ์ฉ์ดํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ฑ
์์๋ ๋์ ์ผ๋ก ์๋ก์ด ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ ์ ์๋ CRD๋ฅผ ๊ตฌํํด๋ณด๋ ๋ฐฉ๋ฒ์ ๋ํด ์ธ๊ธํ๊ณ ์๋ค. ๋ค์ ๊ธ์์๋ ์ด ๋ถ๋ถ์ ๋ํด ๋ค๋ค๋ณด๋ ๊ฑธ๋ก ํด์ผ๊ฒ ๋ค.
ํด๋ฌ์คํฐ ์์ค์ ์๋น์ค ์ ๊ณต
ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์ ํธ์์ฑ๊ณผ ์์ฐ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด์๋ ๋ก๊น , ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ์ธํ๋ผ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ๋ ๊ณ ๋ฏผํ ํ์๊ฐ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ธํด์ ์งํํ๋ ๊ณณ์์๋ prometheus ๋ฐ grafana๋ฅผ ํตํ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋๊ฐ ์ ๊ณต๋์๋๋ฐ ๋๋ถ์ ์ฅ์ ๋ฐ์ ์ ์์ธ์ ํ์ ํ๊ธฐ ์์ํ๋ ๊ฒฝํ์ด ์์ต๋๋ค.
์ง๊ธ๊น์ง ๋จ์ํ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ์ ๊ณตํด์ฃผ๋ ๊ตฌ์ถ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ง ์ฌ์ฉํ์๋๋ฐ, ์ค์ ๊ฐ๋ฐ์์๊ฒ ์ ๊ณตํ๊ธฐ ์ํด ์ด๋ค ๊ณผ์ ์ด ํ์ํ๊ณ ์ด๋ค ๊ฒ๋ค์ ๊ณ ๋ คํด์ผ ํ๋์ง ์กฐ๊ธ์ ์ ์ ์๊ฒ ๋์๋ ํํธ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
'๐ Book Review > ๐ Kubernetes Best Practice' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kubernetes Best Practice] 6. ๋ฒ์ , ๋ฆด๋ฆฌ์ค, ๋กค์์ (0) | 2021.03.01 |
---|---|
[Kubernetes Best Practice] 5. ์ง์์ ํตํฉ, ํ ์คํธ, ๋ฐฐํฌ (0) | 2021.02.25 |
[Kubernetes Best Practice] 4. ์ค์ , ์ํฌ๋ฆฟ, RBAC (0) | 2021.02.22 |
[Kubernetes Best Practice] 3. ๋ชจ๋ํฐ๋ง๊ณผ ๋ก๊น (0) | 2021.02.14 |
[Kubernetes Best Practice] 1. ๊ธฐ๋ณธ ์๋น์ค ์ค์น (0) | 2021.01.30 |
๋๊ธ