K8s Secret
kube apiserver ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ ์ํ ์ ์๋ ์ต์ด ๋ฐฉ์ด์ ์ด๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ํด๋ฌ์คํฐ์ ์ ์ํ๋ ๊ฒ์ ๋ํด 2๊ฐ์ง์ ๋ํ ๊ฒฐ์ ์ ํด์ผํ๋ค. ๋๊ฐ ์ ๊ทผํ ์ ์๊ณ , ์ ๊ทผํด์๋ ๋ฌด์ผ ํ ์ ์๋์ง
๊ธฐ๋ณธ์ ์ผ๋ก ํฌ๋๋ค ์ฌ์ด์์ ์๋ก ๋คํธ์ํฌ ํต์ ์ ํ ์ ์๋ค. network policy๋ฅผ ์ธ์๋๋ฉด, ํฌ๋๋ค ๊ฐ์ ๋คํธ์ํฌ ํต์ ์ ๋ํ ๊ท์น์ ์์ํ ์ ์๋ค.
Authentication
kubernetes๋ kube apiserver๋ฅผ ์ด์ฉํด์ service account ๋ฅผ ์์ฑํ ์ ์๋ค. ์ฌ๊ธฐ์ service account ๋ ์ธ๋ถ ํ๋ก์ธ์ค, ๋ด, ์๋ํํฐ ๋ชจ๋ ๊ฐ์ ๊ฒ๋ค์ ์๋ฏธํ๋ค. kubectl create serveraccount [service account name]
์ ์ ๋ค์ ๋ํ ๊ด๋ฆฌ๋ ์ด๋ป๊ฒํ๋๊ฐ? ์ฌ๊ธฐ์ ์ ์ ๋ผํจ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ด๋ฆฌ์, ๋๋ ๊ฐ๋ฐ์๋ฅผ ์๋ฏธํ๋ค. ์ ์ ๋ค์ kube apiserver ๋ฅผ ํตํด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์์ฒญ์ ํ ์ ์๋ค. ์ด ๋ ํน์ ์ ์ ๋ฅผ ํ๋ณํ๊ธฐ ์ํด ์ฒซ๋ฒ์ฌ๋ก ์ ์ ๋ฅผ ์ธ์ฆํ๊ณ , ๊ทธ ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
์ด๋ป๊ฒ ์ ์ ๋ฅผ ์ธ์ฆํ๋์ง?
- static password file
- static token file
- certificates
- ldap ๊ฐ์ ํ์ฌ ์ธ์ฆ ํ๋ก์ธ์ค
์ฒซ๋ฒ์ฌ๋ก static password file์ ์ฌ์ฉํ๊ธฐ ์ํด์ , kubeapi server๋ฅผ ์ค์นํ ๋ basic-auth-file ์ต์ ์ ๋๊ฒจ์ค๋ค. ์ด๋ basic-auth-file์ ๊ฐ์ csvํ์ผ์ธ๋ฐ, ํจ์ค์๋, id, ์ ์ id ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ ์ต์ ์ ์ง์ ํ๊ณ kubeapi server๋ฅผ ์ค์น ๋๋ ์ฌ์ค์นํ๊ฒ ๋๋ฉด, ๋ค์๊ณผ ๊ฐ์ด kubeapi server๋ก ์ ์ ๋ฅผ ์ธ์ฆํ ์ ์๋ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
curl -v -k https://master-node-ip:6443/api/v1/pods -u “user1:12341234”
๋ ๋ฒ์งธ๋ก static token file ์ ์ฌ์ฉํ๊ธฐ ์ํด์ token-auth-file ์ ์ต์ ์ผ๋ก ์์ฑํด์ฃผ๋ฉด ๋๊ณ , ํด๋น ๊ฐ์๋ ํ ํฐ, ์์ด๋, ์ ์ id ๋ก ๊ตฌ์ฑ๋ csv ํ์ผ์ ๋๊ฒจ์ค ํ kubeapi server ๋ก ์์ฒญ์ ๋ณด๋ผ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฒญํ๋ฉด ๋๋ค.
curl -v -k https://master-node-ip:6443/api/v1/pods -h “Authorization: Bearer [token]”
์ ๋ฐฉ๋ฒ์ ์ถ์ฒ๋๋ ๋ฐฉ๋ฒ์ ์๋๋ค. ํด๋น ๋ฐฉ๋ฒ์ ์ฟ ๋ฒ๋คํฐ์ค 1.19 ๋ฒ์ ๋ถํฐ๋ deprecated ๋์๋ค.
TLS certificates
kube api server๋ก ์ ๊ทผํ๋ client๋ก๋ cluster๋ฅผ ๊ด๋ฆฌํ๋ admin์ด ๋ ์ ์๊ณ , ํฌ๋๋ฅผ ์ด๋ป๊ฒ ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํ๋ scheduler ๊ฐ ๋ ์ ์๊ณ , controller manager, kube proxy ๊ฐ ๋ ์ ์๋ค. ๋ฐ๋ผ์ tls ํต์ ์ ํ๊ธฐ ์ํด์ kube api server์ ์์ฒด์ ์ธ ์ธ์ฆ์์ ๋น๋ฐํค๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๊ณ client ๋ ๊ฐ๊ฐ ์์ ์ ์ธ์ฆ์์ ๋น๋ฐํค๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ค.
kubeapi server๋ก ๋ค์ด์จ ์์ฒญ์ etcd server ๋ก ๋ค์ด๊ฐ์ผ ํ๋ฏ๋ก, ์ด ๋๋ kube api server๊ฐ etcd server ์ client ๊ฐ ๋์ด์ผํ๊ณ ์ด๋ tls ํต์ ์ ํด์ผ ํ๋ค๋ฉด, etcd server / kubeapi server ๋ชจ๋ ์์ ์ ์ธ์ฆ์์ ๋น๋ฐํค๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ค.
์ถ๊ฐ๋ก ์ธ์ฆ์๋ฅผ ์ธ์ฆํ๊ธฐ ์ํ ๊ธฐ๊ด์ธ ca ๊ฐ ํ์ํ๋ค. ca๋ ์์ ์ ์ธ์ฆ์์ ๋น๋ฐํค๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ค.
์ธ์ฆ์๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋๊ตฌ๋ก๋ easyrsa / openssl / cfssl ๋ฑ์ด ์๋ค.
generate key openssl genrsa -out admin.key 2048
- openssl genrsa: RSA ๊ฐ์ธํค๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด์ผ.
- out admin.key: ์์ฑ๋ ํค๋ฅผ admin.key๋ผ๋ ํ์ผ์ ์ ์ฅํ๋ผ๋ ์๋ฏธ์ผ.
- 2048: ํค์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ๋ถ๋ถ์ธ๋ฐ, ์ฌ๊ธฐ์๋ 2048๋นํธ๋ฅผ ์ฌ์ฉํ์ด. ๋ณด์ ์์ค์ ๊ฒฐ์ ํ๋ ์ค์ํ ๋ถ๋ถ์ด์ง.
certificate signing request openssl req -new -key admin.key -subj “/CN=kube-admin” -out admin.csr
-openssl req: ์ธ์ฆ์ ์์ฒญ์ด๋ ์์ฒด ์๋ช ์ธ์ฆ์(self-signed certificate) ์์ฑ์ ์ํ ๋ช ๋ น์ด์ผ. -new: ์๋ก์ด CSR์ ์์ฑํ๊ฒ ๋ค๋ ์๋ฏธ์ผ. -key admin.key: CSR ์์ฑ ์ ์ฌ์ฉํ ๊ฐ์ธํค ํ์ผ์ ์ง์ ํ๋ ๊ฑฐ์ผ. ์ฌ๊ธฐ์๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์์ฑํ admin.key๋ฅผ ์ฌ์ฉํด. -subj “/CN=kube-admin”: CSR์ ํฌํจ๋ ์ฃผ์ฒด(subject)์ ์ ๋ณด๋ฅผ ๋ช ์ํ๋ ์ต์ ์ด์ผ. ์ฌ๊ธฐ์ CN(Common Name)์ kube-admin์ผ๋ก ์ค์ ๋์ด. -out admin.csr: ์์ฑ๋ CSR์ admin.csr์ด๋ผ๋ ํ์ผ์ ์ ์ฅํ๋ผ๋ ์๋ฏธ์ผ.
openssl x509 -req -in admin.csr -CA ca.crt -CAkey ca.key -out admin.crt -openssl x509: X.509 ์ธ์ฆ์ ํ์์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ช ๋ น์ด์ผ. ์ฌ๊ธฐ์๋ ์ธ์ฆ์๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋ผ. -req: CSR(admin.csr)์ ์ฌ์ฉํด ์ธ์ฆ์๋ฅผ ์์ฑํ๊ฒ ๋ค๋ ์ต์ ์ด์ผ. -in admin.csr: ์ ๋ ฅ ํ์ผ๋ก admin.csr์ ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ์ผ. -CA ca.crt: CA(Certificate Authority)์ ์ธ์ฆ์ ํ์ผ์ ์ง์ ํ๋ ๊ฑฐ์ผ. ์ฆ, ์ด CA ์ธ์ฆ์๋ก ์๋ช ์ ํ๊ฒ ๋ค๋ ๊ฑฐ์ง. -CAkey ca.key: ์๋ช ์ ์ํด ์ฌ์ฉ๋ CA์ ๊ฐ์ธํค ํ์ผ์ ์ง์ ํ๋ ๋ถ๋ถ์ด์ผ. -out admin.crt: ์์ฑ๋ ์ธ์ฆ์๋ฅผ admin.crt๋ผ๋ ํ์ผ์ ์ ์ฅํ๊ฒ ๋ค๋ ์๋ฏธ์ผ.
์ ๋ช ๋ น์ด๋ admin ์ ์ ์ ๋ํ ์ธ์ฆ์ ์ํด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ๊ณผ์ ์ด๋ค. ์ด ๋ admin ์ ์ ๊ฐ ์ธ์ฆ์์ ๋น๋ฐํค๋ฅผ ๊ฐ์ง๊ณ ์ธ์ฆํ๋ ค๊ณ ํ ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ ์ด๋ป๊ฒ ์ด ์ ์ ๊ฐ admin ์ ์ ์ธ์ง ํ๋ณํ ์ ์์๊น? ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ฐํด์ csr์ ์์ฑํ ๋ , “/CN=kube-admin/O=system:master” ์ ๊ฐ์ด master๋ผ๋ ๊ทธ๋ฃน์ ์์ฑํด์ ์๋ช ์์ฑ ์์ฒญ์ ๋ฐ๊ธํ๋ฉด ๋๋ค.
certificate detail ํ์ธํ๊ธฐ
์ configuration ์ ๋ณด๋ฉด, etcd/ kublet ์๋ฒ์ tls ํต์ ์ ํ๊ธฐ ์ํ ์ธ์ฆ์ ๋น๋ฐํค๊ฐ ์ ์ฅ๋ ๊ณต๊ฐ์ ํ์ธํ ์ ์๋ค. ์ถ๊ฐ๋ก ํด๋ผ์ด์ธํธ๊ฐ ํด๋ฌ์คํฐ์ ํต์ ํ ๋ ํด๋ผ์ด์ธํธ์ ์ธ์ฆ์๊ฐ ์ด ca์ ์ํด ์ธ์ฆ๋ ์ธ์ฆ์์ธ์ง ํ์ธํ๊ธฐ ์ํ ๋ชฉ์ ์ ์ธ์ฆ์ ํ์ผ์ ์์น๋ฅผ ํ์ธํ ์ ์๋ค. ์ถ๊ฐ๋ก, kubeapi server ๊ฐ tls ํต์ ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๋ฒ์ธก ์ธ์ฆ์/๋น๋ฐํค์ ์์น๋ฅผ ํ์ธํ ์ ์๋ค.
์ ์ธ์ฆ์๋ฅผ ํตํด ๋ง๋ฃ์ผ/ issuer / ๋ณ์นญ /Common Name ๋ฑ๋ฑ์ ํ์ธํ ์ ์๋ค.
certificate api
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํ๋ช ์ผ ๋ ํด๋น ๊ด๋ฆฌ์๋ ํด๋ฌ์คํฐ์ ์ธ์ฆํ ์ ์๋๋ก, ์ธ์ฆ์์ ๋น๋ฐํค๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ์๋ก์ด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ์ถ๊ฐ๋์์ ๋ ํด๋น ๊ด๋ฆฌ์๋ ๊ฐ์ธ์ ๋น๋ฐํค์ ์ธ์ฆ์๋ฅผ ์์ฑํ๊ณ , ์ธ์ฆ์์ ๋ํ ์๋ช ์์ฒญ(csr)์ ํ๊ธฐ ์ํด ๊ธฐ์กด ๊ด๋ฆฌ์์๊ฒ ์ธ์ฆ์๋ฅผ ๋ณด๋ด๊ณ ํด๋ฌ์คํฐ ๋ด ca ์๋ฒ์์ ์ธ์ฆ์ ๋ฐ์ ํ ์๋ก์ด ๊ด๋ฆฌ์์๊ฒ ca์๋ฒ๋ก ๋ถํฐ ์ธ์ฆ๋ฐ์ ์ธ์ฆ์๋ฅผ ๊ฑด๋ด์ฃผ๊ฒ ๋๋ฉด ์๋ก์ด ๊ด๋ฆฌ์๋ ํด๋ฌ์คํฐ์ ์ธ์ฆํ ์ ์๊ฒ๋๋ค.
์ธ์ฆ์์๋ ์ ํจ๊ธฐ๊ฐ์ด ์กด์ฌํ๋ค. ์ ํจ๊ธฐ๊ฐ์ด ๋๋๊ฒ ๋๋ฉด, ์๋ก์ด ๊ด๋ฆฌ์๋ ์ ํ๋ก์ธ์ค๋ฅผ ๋ค์ํ๋ฒ ๊ฑฐ์ณ์ ca์๋ฒ๋ก ๋ถํฐ ์ธ์ฆ๋ฐ์ ์ธ์ฆ์๋ฅผ ๋ฐ์์ผ ํด๋ฌ์คํฐ์ ์ธ์ฆํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ผ ca๋ ์ด๋์ ์กด์ฌํ๋๊ฐ? ca๋ ์ธ์ฆ์์ ๋น๋ฐํค์ ์์ด๋ค. ๋ณดํต์ ๋ง์คํฐ ๋ ธ๋์ ์์นํ๋ค.
์ ๊ณผ์ ์ ๊ณ์ ๋ฐ๋ณตํ ์ ์์ผ๋ฏ๋ก, certification api๋ฅผ ํตํด ์๋ก์ด ์ธ์ฆ์๋ฅผ ca์๋ฒ๊ฐ ์ธ์ฆํ ์ ์๋๋ก ํ๋ค.
- singing certificate request object ๋ฅผ ์์ฑํ๋ค.
- review request
- approve request
- share certs to users
์ฒ์์ ์ ์ ๋ key๋ฅผ ์์ฑํ๋ค. openssl genrsa -out jane.key 2048
๊ทธ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ๊ด๋ฆฌ์์๊ฒ request ๋ฅผ ๋ณด๋ธ๋ค. openssl req -new -key jane.key -subj="/CN=jane" -out jane.csr
๊ด๋ฆฌ์๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ด์ signingCertificateRequest Object๋ฅผ ์์ฑํ๋ค. (yaml ํ์ผ๋ก) ์ฌ๊ธฐ์ request ํ๋์๋ jane.csr ์ base64๋ก ์ธ์ฝ๋ฉํ์ฌ ์ง์ด๋ฃ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์๋ csr object ๊ฐ ์์ฑ์ด๋๊ณ , ๊ธฐ์กด ๊ด๋ฆฌ์๋ ํด๋น csr ์ ๋ค์๋ช ๋ น์ด๋ฅผ ์ด์ฉํด ์น์ธํด์ค๋ค. kubectl certificate approve jane
์์ ๊ฐ์ ์ธ์ฆ์ ๊ด๋ จ ์์ ์ ๋ง์คํฐ ๋ ธ๋์ controller manager ์ ์ํด ์ํ๋๋ค. ์ธ์ฆ์์ ์ธ์ฆ์ ํ๊ธฐ ์ํด์๋ ๋ฃจํธ ์ธ์ฆ์์ ๋น๋ฐํค๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์, controller manager ์๋ฒ๋ฅผ ๊น๋ณด๋ฉด –cluster-signing-cert-file / cluster-signing-key-file ์ต์ ์ด ๋ค์ด์๋๊ฒ์ ํ์ธํ ์ ์๋ค.
kube config
์ฟ ๋ฒ๋คํฐ์ค ๊ด๋ฆฌ์๊ฐ ์ฌ๋ฌ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ์ฐ๊ฒฐ ์ธ์ฆ์ ๊ด๋ฆฌํ ์ ์๋๋ก kubeconfig๋ฅผ ์ด์ฉํ๋ค. ๊ด๋ฆฌ์๊ฐ kubectl๋ช ๋ น์ ์ ๋ ฅํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก –kubeconfig ์ต์ ์ด ํน์ ๋๋ ํ ๋ฆฌ์ ์ ์๋์ด ์๋ kubeconfig ํ์ผ์ ์ฐธ์กฐํ์ฌ ์ธ์ฆ์ ์ ๋ณด ๋ฑ๋ฑ์ ๊ฐ์ ธ์ ํด๋ฌ์คํฐ์ ํต์ ์ ํ๊ฒ ๋๋ค.
kubeconfig ์๋ 3๊ฐ์ ์น์ ์ด ์กด์ฌํ๋๋ฐ, cluster/ context/ user ์น์ ์ด ์กด์ฌํ๋ค. ํด๋ฌ์คํฐ ์น์ ์๋ ์ฟ ๋ฒ๋คํฐ์ค ํ ์กด์ฌํ๋ ํด๋ฌ์คํฐ์ ๋ํ ์ ์์ด๊ณ , ์ ์ ์น์ ์๋ ํด๋ฌ์คํฐ์ ์ ์ํ๋ ์ ์ ์ config๋ฅผ ์ ์ํ ๊ณต๊ฐ์ด๋ค. context ๋ ํด๋ฌ์คํฐ์ ์ ์ ๋ฅผ ์กฐํฉํ์ฌ ์ฌ๋ฌ ํด๋ฌ์คํฐ์ ์ฌ๋ฌ ์ฌ์ฉ์ ๊ณ์ ์ ์ค๊ฐ๋ฉด ์์ ํ ๋ ํธ๋ฆฌํ๊ฒ ํด์ค๋ค.
์ถ๊ฐ๋ก namespace ๊ฐ์ ์ต์ ๋ kubeconfig ์ ์ ์ํ์ฌ ํธ๋ฆฌํ๊ฒ ์ ๊ณตํ ์ ์๋ค.
api groups
์ฟ ๋ฒ๋คํฐ์ค ๊ด๋ฆฌ์๋ api ๋ฅผ ํตํด kube apiserver์ ํต์ ํ๊ณ ํด๋ฌ์คํฐ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. ๋ค์์ ์ฟ ๋ฒ๋คํฐ์ค ๋ด๋ถ ์ ๋ณด๋ฅผ ์ ์ ์๋ rest api ์ด๋ค.
curl https://kube-master:6443/version curl https://kube-master:6443/api/v1/pods
์ฟ ๋ฒ๋คํฐ์ค๋ ํน์ ๋ชฉ์ ์ ๋ง๊ฒ version, api, metrics, healthz, logs .. ์ ๊ฐ์ด api๋ฅผ ๊ทธ๋ฃนํํด๋๋๋ค.
kube apiserver๋ก api๋ฅผ ํธ์ถํ๊ธฐ ์ํด์ kubectl proxy ์๋ฒ๋ฅผ ์์ฑํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด proxy ์๋ฒ๊ฐ kubeapi server์ ํต์ ํ๊ธฐ ์ํด ์ ์ ํ ์ธ์ฆ๊ด๋ จ ์ ๋ณด๋ฅผ ์์ฑํ๋ค. kube proxy ์์ด kube apiserver๋ฅผ ํธ์ถํ๊ธฐ ์ํด์ , certification / key ํ์ผ์ ๊ฑด๋ค์ผ ํ๋ค.
kube proxy != kubectl proxy
authorization
node authorizer kubelet์ kube apiserver์ ์ ๊ทผํด์, pods/nodes/services/endpoints ๊ฐ์ ๊ฒ๋ค์ ์ฝ์ ์ ์๊ณ ๋ pods/node์ ์ํ๋ฅผ ์ฐ๊ฑฐ๋, ํน์ ์ด๋ฒคํธ๋ฅผ ์ฐ๋๋ก ํ ์ ์๋ค. ์ด๋ฌํ ๊ถํ์ ๊ด๋ฆฌํ๋ ๊ฒ์ node authorizer ์ด๋ค.
ABAC (attribute based Access Control) ๊ฐ๋ฐ์1 ์ด pod์ ํํ ์ ์๋ ํ๋์ ๋ํด json ํฌ๋งท์ผ๋ก ์ ์ ๊ฐ๋ฐ์2๊ฐ pod์ ํํ ์ ์๋ ํ๋์ ๋ํด json ํฌ๋งท์ผ๋ก ์ ์ … ์์ ๊ฐ์ด ํน์ ์ ์ ๊ฐ ํํ ์ ์๋ ํ๋์ ๋ํด json ํฌ๋งท์ผ๋ก ์ ์ํ๊ณ ์๋น์ค๋ฅผ ์ฌ์์ํด์ผ๋๋ฏ๋ก ๊ด๋ฆฌํ๊ธฐ ํ๋ฌ
RBAC role based access control์ ํน์ ๊ทธ๋ฃน๊ตฐ์ ํน์ ํ๋์ ๋ํ ๊ท์น์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธ
webhook ์ 3๊ฐ์ง ๋ฐฉ๋ฒ์ฒ๋ผ ์ฟ ๋ฒ๋คํฐ์ค ๋ด์์ ๊ถํ์ ๋ํ ๊ด๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ์๋ ์ธ๋ถ์์ ๊ถํ์ ๊ด๋ฆฌํ๊ฒ ํ๊ณ ์ธ๋ถ์์ ์ด๋ฅผ ์น์ธํ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด ์นํ ์ ์ฌ์ฉํ๋ค.
์์ ๊ฐ์ ์ธ์ฆ๋ฐฉ๋ฒ ๋ชจ๋๋ kubeapi server๋ฅผ ์ค์นํ ๋ authorization-mode ์ต์ ์ ํตํด ์ง์ ํ ์ ์๋ฐ. ์ด ๋ชจ๋์๋ ์ฌ๋ฌ๊ฐ๋ฅผ ์ ์ฉํ ์ ์๋๋ฐ ์ ์ฉํ ์์๋๋ก chaining ๋์ด ๊ถํ์ ์น์ธํ ์ง ๊ฑฐ๋ถํ ์ง ๊ฒฐ์ ํ๋ค ๋ง์ฝ node, rbac, webhook ์ ์์๋ก ๋์ด ์์๋ค๋ฉด, node๋ฅผ ๋จผ์ ๊ฑฐ์น๊ณ ๊ฑฐ๋ถ๊ฐ ์ผ์ด๋๋ฉด ๋ค์ rbac์์ ๊ถํ์ ๋ถ์ฌ ๋ฐ๊ณ ๋ง์ฝ ์ฌ๊ธฐ์ ์น์ธ์ด ๋๋ค๋ฉด ํด๋น ์ ์ ๋ ํน์ ๊ถํ์ ๋ถ์ฌ๋ฐ๊ฒ ๋๋ค.
rbac ๋ชจ๋๋ก ๊ถํ์ ์น์ธํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉด ๋๋ค.
- role ๊ฐ์ฒด ์์ฑ
- role binding ๊ฐ์ฒด ์์ฑ
ํน์ ์ ์ ๊ฐ ํน์ ๊ฐ์ฒด์ ๋ํ ๊ถํ์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. kubectl auth can-i create deployments kubectl auth can-i create pods –as dev-user –namespace test
cluster role
service account
์ฟ ๋ฒ๋คํฐ์ค์๋ 2๊ฐ์ง์ account๊ฐ ์กด์ฌํ๋๋ฐ user account /service account ์ด๋ค. user account ๋ ์ฌ๋์ด ์ฌ์ฉํ๊ณ , service account ๋ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ค. user account์๋ admin / developer ๊ฐ ๋ ์ ์๊ณ service account๋ prometheus, jenkins ๊ฐ์ ๊ฒ์ด ๋ ์ ์๋ค.
service account ๋ฅผ ์์ฑํ๋ ค๋ฉด kubectl create serviceaccount [service account name] service account ๊ฐ ์์ฑ๋๋ฉด ๋ด๋ถ์ ์ผ๋ก ํ ํฐ์ด ์์ฑ๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ด kube apiservier๋ฅผ ํตํด ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ฉด ํ ํฐ์ ์ฌ์ฉํด์ ์ธ์ฆ์ํ๊ฒ ๋๋ค.
๋ค์์คํ์ด์ค๋ง๋ค default service account ๊ฐ ์กด์ฌํ๋ค. ํฌ๋๊ฐ ์์ฑ๋ ๋ ๋ง๋ค default service account ๊ณผ ํ ํฐ์ด ๋ณผ๋ฅจ ๋ง์ดํธ๋ก ์๋์ผ๋ก ๋ง์ดํธ๋๋ค.
ํ ํฐ์ pod ๋ด์ /var/run/secrets/kubernetes.io/serviceaccount ์ ์์ฑ๋๋ค. ํด๋น ๋๋ ํฐ๋ฆฌ๋ฅผ ๊น๋ณด๋ฉด, ca.crt namespace token ์ด ์กด์ฌํ๊ณ token์ ์ด์ฉํด์ kube apiserver ์ ์ธ์ฆ์ํ๋๋ฐ ์ฌ์ฉํ๋ค.
์ด๋ฏธ ์์ฑ๋ pod์ service account๋ฅผ ์๋ก ๋ฑ๋กํ๋ ค๋ฉด pod๋ฅผ ์ญ์ ํ๊ณ ์ฌ์คํํด์ผ ํ๋ค. ํ์ง๋ง deployment์ ๊ฒฝ์ฐ ์๋ก์ด service account๋ฅผ ๋ฑ๋กํ๋ฉด ์๋ก์ด rollout์ด ๋ฐ์ํ๊ณ ํด๋น rollout์ ์๋กญ๊ฒ ๋ฑ๋ก๋ service account ๊ฐ ๋ฑ๋ก๋์ฑ๋ก ๋ฐฐํฌ๋๋ค. (1.24 ๋ฒ์ ๋ถํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก token์ ์์ฑํ์ง ์์)
์ด์ ๋ tokenrequest api๋ฅผ ์ด์ฉํ๋๊ฒ์ ๊ถ์ฅํ๋ค.