ํ์ฅ API ์๋ฒ ์ค์
์ ๊ทธ๋ฆฌ๊ฒ์ด์ ๋ ์ด์ด(aggregation layer)์ ์๋ํ๋๋ก ํ์ฅ API ์๋ฒ๋ฅผ ์ค์ ํ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค์ ํต์ฌ API์ ์ผ๋ถ๊ฐ ์๋ ์ถ๊ฐ API๋ก ํ์ฅํ ์ ์๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
- ์ ๊ทธ๋ฆฌ๊ฒ์ด์ ๋ ์ด์ด๋ฅผ ๊ตฌ์ฑํ๊ณ apiserver ํ๋๊ทธ๋ฅผ ํ์ฑํํด์ผ ํ๋ค.
์ ๊ทธ๋ฆฌ๊ฒ์ด์ ๋ ์ด์ด์ ์๋ํ๋๋ก ํ์ฅ API ์๋ฒ ์ค์ ํ๊ธฐ
๋ค์ ๋จ๊ณ๋ ํ์ฅ API ์๋ฒ๋ฅผ ๋์ ์์ค ์ผ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค. ์ด ๋จ๊ณ๋ YAML ๊ตฌ์ฑ์ ์ฌ์ฉํ๊ฑฐ๋ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๊ด์์ด ์ ์ฉ๋๋ค. ๋ ์ฌ์ด์ ์ฐจ์ด์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์๋ณํ๋ ค๊ณ ์๋ํ๋ค. YAML ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋ณด๋ ค๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌํฌ์งํฐ๋ฆฌ์์ sample-apiserver๋ฅผ ์ฐธ๊ณ ํ ์ ์๋ค.
๋๋, apiserver-builder์ ๊ฐ์ ๊ธฐ์กด์ ํ์ฌ ์๋ฃจ์ ์ ์ฌ์ฉํ์ฌ ์ค์ผ๋ ํค(skeleton)์ ์์ฑํ๊ณ ๋ค์ ๋จ๊ณ๋ฅผ ๋ชจ๋ ์๋ํํด์ผ ํ๋ค.
- API์๋น์ค(APIService) API๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธํ๋ค(
--runtime-config
ํ์ธ). ํด๋ฌ์คํฐ์์ ์ผ๋ถ๋ฌ ํด์ ํ์ง ์์๋ค๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค. - API์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ์์ฑํ๋๋ก RBAC ๊ท์น์ ์์ฑํด์ผ ํ ์๋ ์๋ค. (API ํ์ฅ์ ์ ์ฒด ํด๋ฌ์คํฐ์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์, ์ด์ ์ค์ธ ํด๋ฌ์คํฐ์์ API ํ์ฅ์ ๋ํ ํ ์คํธ/๊ฐ๋ฐ/๋๋ฒ๊น ์ ์ํํ์ง ์๋ ๊ฒ์ด ์ข๋ค.)
- ํ์ฅ API ์๋น์ค๋ฅผ ์คํํ๋ ค๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋ค.
- HTTPS๋ฅผ ์ํด ํ์ฅ API ์๋ฒ๊ฐ ์ฌ์ฉํ๋ ์๋ฒ ์ธ์ฆ์์ ์๋ช ํ๋ ๋ฐ ์ฌ์ฉํ CA ์ธ์ฆ์๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฐ์ ธ์จ๋ค.
- HTTPS๋ฅผ ์ํด API ์๋ฒ๊ฐ ์ฌ์ฉํ ์๋ฒ ์ธ์ฆ์/ํค๋ฅผ ์์ฑํ๋ค. ์ด ์ธ์ฆ์๋ ์์ CA ์ธ์ฆ์์ ์ํด ์๋ช
ํด์ผ ํ๋ค. ๋ํ Kube DNS ์ด๋ฆ์ CN์ด ์์ด์ผ ํ๋ค. ์ด๊ฒ์ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค์์ ํ์๋์์ผ๋ฉฐ
<service name>.<service name namespace>.svc
ํ์์ด๋ค. - ๋ค์์คํ์ด์ค์ ์๋ฒ ์ธ์ฆ์/ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค ์ํฌ๋ฆฟ์ ์์ฑํ๋ค.
- ํ์ฅ API ์๋ฒ์ ๋ํ ์ฟ ๋ฒ๋คํฐ์ค ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๊ณ ์ํฌ๋ฆฟ์ ๋ณผ๋ฅจ์ผ๋ก ๋ก๋ํ๋์ง ํ์ธํ๋ค. ํ์ฅ API ์๋ฒ์ ์๋ํ๋(working) ์ด๋ฏธ์ง์ ๋ํ ์ฐธ์กฐ๋ฅผ ํฌํจํด์ผ ํ๋ค. ๋ํ๋ก์ด๋จผํธ๋ ๋ค์์คํ์ด์ค์๋ ์์ด์ผ ํ๋ค.
- ํ์ฅ API ์๋ฒ๊ฐ ํด๋น ๋ณผ๋ฅจ์์ ํด๋น ์ธ์ฆ์๋ฅผ ๋ก๋ํ๊ณ HTTPS ํธ๋์ ฐ์ดํฌ์ ์ฌ์ฉ๋๋์ง ํ์ธํ๋ค.
- ๋ค์์คํ์ด์ค์์ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ์ด์นด์ดํธ๋ฅผ ์์ฑํ๋ค.
- ๋ฆฌ์์ค์ ํ์ฉํ๋ ค๋ ์์ ์ ๋ํ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋กค(role)์ ์์ฑํ๋ค.
- ๋ค์์คํ์ด์ค์ ์๋น์ค ์ด์นด์ดํธ์์ ๋ฐฉ๊ธ ๋ง๋ ํด๋ฌ์คํฐ ๋กค๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋กค ๋ฐ์ธ๋ฉ์ ์์ฑํ๋ค.
- ๋ค์์คํ์ด์ค์ ์๋น์ค ์ด์นด์ดํธ์์
system:auth-delegator
ํด๋ฌ์คํฐ ๋กค๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋กค ๋ฐ์ธ๋ฉ์ ๋ง๋ค์ด ์ธ์ฆ ๊ฒฐ์ ์ ์ฟ ๋ฒ๋คํฐ์ค ํต์ฌ API ์๋ฒ์ ์์ํ๋ค. - ๋ค์์คํ์ด์ค์ ์๋น์ค ์ด์นด์ดํธ์์
extension-apiserver-authentication-reader
๋กค๋ก ์ฟ ๋ฒ๋คํฐ์ค ๋กค ๋ฐ์ธ๋ฉ์ ์์ฑํ๋ค. ์ด๋ฅผ ํตํด ํ์ฅ API ์๋ฒ๊ฐextension-apiserver-authentication
์ปจํผ๊ทธ๋งต(configmap)์ ์ ๊ทผํ ์ ์๋ค. - ์ฟ ๋ฒ๋คํฐ์ค API ์๋น์ค๋ฅผ ์์ฑํ๋ค. ์์ CA ์ธ์ฆ์๋ base64๋ก ์ธ์ฝ๋ฉ๋์ด, ์๋ก์ด ๋ผ์ธ์ด ์ ๊ฑฐ๋๊ณ API ์๋น์ค์์ spec.caBundle๋ก ์ฌ์ฉ๋์ด์ผ ํ๋ค. ์ด๊ฒ์ namespaced๊ฐ ์๋์ด์ผ ํ๋ค. kube-aggregator API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, base64 ์ธ์ฝ๋ฉ์ด ์ํ๋๋ฏ๋ก PEM ์ธ์ฝ๋ฉ๋ CA ๋ฒ๋ค๋ง ํต๊ณผํ๋ค.
- kubectl์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ป๋๋ค. kubectl์ ์คํํ๋ฉด, "No resources found."๊ฐ ๋ฐํ๋๋ค. ์ด ๋ฉ์์ง๋ ๋ชจ๋ ๊ฒ์ด ์๋๋์ง๋ง ํ์ฌ ํด๋น ๋ฆฌ์์ค ์ ํ์ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋์ง ์์์์ ๋ํ๋ธ๋ค.
๋ค์ ๋ด์ฉ
- API ์ ๊ทธ๋ฆฌ๊ฒ์ด์ ๋ ์ด์ด๋ฅผ ๊ตฌ์ฑํ๊ณ apiserver ํ๋๊ทธ๋ฅผ ํ์ฑํํ๋ ๋จ๊ณ๋ฅผ ์ํํ๋ค.
- ๋์ ์์ค์ ๊ฐ์์ ๋ํด์๋, ์ ๊ทธ๋ฆฌ๊ฒ์ด์ ๋ ์ด์ด๋ก ์ฟ ๋ฒ๋คํฐ์ค API ํ์ฅํ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.
- ์ปค์คํ ๋ฆฌ์์ค ๋ฐํผ๋์ ์ ์ฌ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค API ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณธ๋ค.