ํด๋น ๋ฌธ์์ ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ : v1.31
Kubernetes v1.31 ๋ฌธ์๋ ๋ ์ด์ ์ ๊ทน์ ์ผ๋ก ๊ด๋ฆฌ๋์ง ์์. ํ์ฌ ๋ณด๊ณ ์๋ ๋ฌธ์๋ ์ ์ ์ค๋ ์ท์. ์ต์ ๋ฌธ์๋ฅผ ์ํด์๋, ๋ค์์ ์ฐธ๊ณ . ์ต์ ๋ฒ์ .
์ฟ ๋ฒ๋คํฐ์ค API
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์ ํต์ฌ์ API ์๋ฒ์ด๋ค. API ์๋ฒ๋ ์ต์ข ์ฌ์ฉ์, ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ถ๋ถ ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ ์ปดํฌ๋ํธ๊ฐ ์๋ก ํต์ ํ ์ ์๋๋ก HTTP API๋ฅผ ์ ๊ณตํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค์ API ์ค๋ธ์ ํธ(์: ํ๋(Pod), ๋ค์์คํ์ด์ค(Namespace), ์ปจํผ๊ทธ๋งต(ConfigMap) ๊ทธ๋ฆฌ๊ณ ์ด๋ฒคํธ(Event))๋ฅผ ์ง์(query)ํ๊ณ ์กฐ์ํ ์ ์๋ค.
๋๋ถ๋ถ์ ์์ ์ kubectl ์ปค๋งจ๋ ๋ผ์ธ ์ธํฐํ์ด์ค ๋๋ API๋ฅผ ์ฌ์ฉํ๋ kubeadm๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ๋ฅผ ํตํด ์ํํ ์ ์๋ค. ๊ทธ๋ฌ๋, REST ํธ์ถ์ ์ฌ์ฉํ์ฌ API์ ์ง์ ์ ๊ทผํ ์๋ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
OpenAPI ๋ช ์ธ
์์ ํ API ์์ธ ๋ด์ฉ์ OpenAPI๋ฅผ ํ์ฉํด์ ๋ฌธ์ํํ๋ค.
OpenAPI V2
์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๋ /openapi/v2
์๋ํฌ์ธํธ๋ฅผ ํตํด
ํตํฉ๋(aggregated) OpenAPI v2 ์คํ์ ์ ๊ณตํ๋ค.
์์ฒญ ํค๋์ ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ์ฌํ์ฌ ์๋ต ํ์์ ์ง์ ํ ์ ์๋ค.
ํค๋ | ์ฌ์ฉํ ์ ์๋ ๊ฐ | ์ฐธ๊ณ |
---|---|---|
Accept-Encoding |
gzip |
์ด ํค๋๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฒ๋ ๊ฐ๋ฅ |
Accept |
application/com.github.proto-openapi.spec.v2@v1.0+protobuf |
์ฃผ๋ก ํด๋ฌ์คํฐ ๋ด๋ถ ์ฉ๋๋ก ์ฌ์ฉ |
application/json |
๊ธฐ๋ณธ๊ฐ | |
* |
JSON์ผ๋ก ์๋ต |
์ฟ ๋ฒ๋คํฐ์ค๋ ์ฃผ๋ก ํด๋ฌ์คํฐ ๋ด๋ถ ํต์ ์ ์ํด ๋์์ ์ธ Protobuf์ ๊ธฐ๋ฐํ ์ง๋ ฌํ ํ์์ ๊ตฌํํ๋ค. ์ด ํ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฟ ๋ฒ๋คํฐ์ค Protobuf ์ง๋ ฌํ ๋์์ธ ์ ์๊ณผ API ์ค๋ธ์ ํธ๋ฅผ ์ ์ํ๋ Go ํจํค์ง์ ๋ค์ด์๋ ๊ฐ๊ฐ์ ์คํค๋ง์ ๋ํ IDL(์ธํฐํ์ด์ค ์ ์ ์ธ์ด) ํ์ผ์ ์ฐธ๊ณ ํ๋ค.
OpenAPI V3
Kubernetes v1.24 [beta]
์ฟ ๋ฒ๋คํฐ์ค v1.31 ๋ฒ์ ์ OpenAPI v3 API ๋ฐํ(publishing)์ ๋ํ ๋ฒ ํ ์ง์์ ์ ๊ณตํ๋ค.
์ด๋ ๋ฒ ํ ๊ธฐ๋ฅ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์๋ค.
kube-apiserver ๊ตฌ์ฑ ์์์
OpenAPIV3
๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ๋นํ์ฑํํ์ฌ
์ด ๋ฒ ํ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ ์ ์๋ค.
/openapi/v3
๋์ค์ปค๋ฒ๋ฆฌ ์๋ํฌ์ธํธ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋
๊ทธ๋ฃน/๋ฒ์ ์ ๋ชฉ๋ก์ ์ ๊ณตํ๋ค. ์ด ์๋ํฌ์ธํธ๋ JSON ๋ง์ ๋ฐํํ๋ค.
์ด๋ฌํ ๊ทธ๋ฃน/๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ ๊ณต๋๋ค.
{
"paths": {
...,
"api/v1": {
"serverRelativeURL": "/openapi/v3/api/v1?hash=CC0E9BFD992D8C59AEC98A1E2336F899E8318D3CF4C68944C3DEC640AF5AB52D864AC50DAA8D145B3494F75FA3CFF939FCBDDA431DAD3CA79738B297795818CF"
},
"apis/admissionregistration.k8s.io/v1": {
"serverRelativeURL": "/openapi/v3/apis/admissionregistration.k8s.io/v1?hash=E19CC93A116982CE5422FC42B590A8AFAD92CDE9AE4D59B5CAAD568F083AD07946E6CB5817531680BCE6E215C16973CD39003B0425F3477CFD854E89A9DB6597"
},
....
}
}
์์ ์๋ URL์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ(immutable) OpenAPI ์์ธ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉฐ,
์ด๋ ํด๋ผ์ด์ธํธ์์์ ์บ์ฑ์ ํฅ์์ํค๊ธฐ ์ํจ์ด๋ค.
๊ฐ์ ๋ชฉ์ ์ ์ํด API ์๋ฒ๋ ์ ์ ํ HTTP ์บ์ฑ ํค๋๋ฅผ
์ค์ ํ๋ค(Expires
๋ฅผ 1๋
๋ค๋ก, Cache-Control
์ immutable
).
์ฌ์ฉ ์ค๋จ๋ URL์ด ์ฌ์ฉ๋๋ฉด, API ์๋ฒ๋ ์ต์ URL๋ก์ ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ๋ฐํํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๋
์ฟ ๋ฒ๋คํฐ์ค ๊ทธ๋ฃน ๋ฒ์ ์ ๋ฐ๋ฅธ OpenAPI v3 ์คํ์
/openapi/v3/apis/<group>/<version>?hash=<hash>
์๋ํฌ์ธํธ์ ๊ฒ์ํ๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ์์ฒญ ํค๋ ๋ชฉ๋ก์ ์๋์ ํ๋ฅผ ์ฐธ๊ณ ํ๋ค.
ํค๋ | ์ฌ์ฉํ ์ ์๋ ๊ฐ | ์ฐธ๊ณ |
---|---|---|
Accept-Encoding |
gzip |
์ด ํค๋๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฒ๋ ๊ฐ๋ฅ |
Accept |
application/com.github.proto-openapi.spec.v3@v1.0+protobuf |
์ฃผ๋ก ํด๋ฌ์คํฐ ๋ด๋ถ ์ฉ๋๋ก ์ฌ์ฉ |
application/json |
๊ธฐ๋ณธ๊ฐ | |
* |
JSON์ผ๋ก ์๋ต |
์ง์์ฑ
์ฟ ๋ฒ๋คํฐ์ค๋ ์ค๋ธ์ ํธ์ ์ง๋ ฌํ๋ ์ํ๋ฅผ etcd์ ๊ธฐ๋กํ์ฌ ์ ์ฅํ๋ค.
API ๊ทธ๋ฃน๊ณผ ๋ฒ์ ๊ท์น
ํ๋๋ฅผ ์ฝ๊ฒ ์ ๊ฑฐํ๊ฑฐ๋ ๋ฆฌ์์ค ํํ์ ์ฌ๊ตฌ์ฑํ๊ธฐ ์ํด,
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ฐ๊ฐ /api/v1
๋๋ /apis/rbac.authorization.k8s.io/v1alpha1
๊ณผ
๊ฐ์ ์๋ก ๋ค๋ฅธ API ๊ฒฝ๋ก์์ ์ฌ๋ฌ API ๋ฒ์ ์ ์ง์ํ๋ค.
๋ฒ์ ๊ท์น์ ๋ฆฌ์์ค๋ ํ๋ ์์ค์ด ์๋ API ์์ค์์ ์ํ๋์ด API๊ฐ ์์คํ ๋ฆฌ์์ค ๋ฐ ๋์์ ๋ํ ๋ช ํํ๊ณ ์ผ๊ด๋ ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํ๊ณ ์๋ช ์ข ๋ฃ ๋ฐ/๋๋ ์คํ์ API์ ๋ํ ์ ๊ทผ์ ์ ์ดํ ์ ์๋๋ก ํ๋ค.
๋ณด๋ค ์ฝ๊ฒ ๋ฐ์ ํ๊ณ API๋ฅผ ํ์ฅํ๊ธฐ ์ํด, ์ฟ ๋ฒ๋คํฐ์ค๋ ํ์ฑํ ๋๋ ๋นํ์ฑํ๊ฐ ๊ฐ๋ฅํ API ๊ทธ๋ฃน์ ๊ตฌํํ๋ค.
API ๋ฆฌ์์ค๋ API ๊ทธ๋ฃน, ๋ฆฌ์์ค ์ ํ, ๋ค์์คํ์ด์ค (๋ค์์คํ์ด์ค ๋ฆฌ์์ค์ฉ) ๋ฐ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถ๋๋ค. API ์๋ฒ๋ API ๋ฒ์ ๊ฐ์ ๋ณํ์ ํฌ๋ช ํ๊ฒ ์ฒ๋ฆฌํ๋ค. ์๋ก ๋ค๋ฅธ ๋ชจ๋ ๋ฒ์ ์ ์ค์ ๋ก ๋์ผํ ์ง์ ๋ฐ์ดํฐ์ ํํ์ด๋ค. API ์๋ฒ๋ ์ฌ๋ฌ API ๋ฒ์ ์ ํตํด ๋์ผํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ๋์ผํ ๋ฆฌ์์ค์ ๋ํด v1
๊ณผ v1beta1
์ด๋ผ๋ ๋ ๊ฐ์ง API ๋ฒ์ ์ด
์๋ค๊ณ ๊ฐ์ ํ์. API์ v1beta1
๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ ๊ฒฝ์ฐ,
v1beta1
๋ฒ์ ์ด ์ฌ์ฉ ์ค๋จ(deprecated)๋๊ณ ์ ๊ฑฐ๋ ๋๊น์ง๋
v1beta1
๋๋ v1
API ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ํด๋น ์ค๋ธ์ ํธ๋ฅผ ์ฝ๊ฑฐ๋, ์
๋ฐ์ดํธํ๊ฑฐ๋, ์ญ์ ํ ์ ์๋ค.
๊ทธ ์ดํ๋ถํฐ๋ v1
API๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ ์ค๋ธ์ ํธ์ ์ ๊ทผํ๊ณ ์์ ํ ์ ์๋ค.
API ๋ณ๊ฒฝ ์ฌํญ
์ฑ๊ณต์ ์ธ ์์คํ ์ ์๋ก์ด ์ ์ค์ผ์ด์ค๊ฐ ๋ฑ์ฅํ๊ฑฐ๋ ๊ธฐ์กด ์ฌ๋ก๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ์ฑ์ฅํ๊ณ ๋ณํํด์ผ ํ๋ค. ๋ฐ๋ผ์, ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฟ ๋ฒ๋คํฐ์ค API๊ฐ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋๊ณ ์ฑ์ฅํ ์ ์๋๋ก ์ค๊ณํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํ๋ก์ ํธ๋ ๊ธฐ์กด ํด๋ผ์ด์ธํธ์์ ํธํ์ฑ์ ๊นจ์ง ์๊ณ ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์ ์ํ ๊ธฐํ๋ฅผ ๊ฐ์ง ์ ์๋๋ก ์ฅ๊ธฐ๊ฐ ํด๋น ํธํ์ฑ์ ์ ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก, ์ API ๋ฆฌ์์ค์ ์ ๋ฆฌ์์ค ํ๋๋ ์์ฃผ ์ถ๊ฐ๋ ์ ์๋ค. ๋ฆฌ์์ค ๋๋ ํ๋๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด API ์ง์ ์ค๋จ ์ ์ฑ ์ ๋ฐ๋ผ์ผ ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์ผ๋ฐ์ ์ผ๋ก API ๋ฒ์ v1
์์ ์์ ๋ฒ์ (GA)์ ๋๋ฌํ๋ฉด, ๊ณต์ ์ฟ ๋ฒ๋คํฐ์ค API์
๋ํ ํธํ์ฑ ์ ์ง๋ฅผ ๊ฐ๋ ฅํ๊ฒ ์ดํํ๋ค. ๋ํ,
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ณต์ ์ฟ ๋ฒ๋คํฐ์ค API์ ๋ฒ ํ API ๋ฒ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋ฐ์ดํฐ์๋ ํธํ์ฑ์ ์ ์งํ๋ฉฐ,
ํด๋น ๊ธฐ๋ฅ์ด ์์ ํ๋์์ ๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์์ ๋ฒ์ (GA)์ API ๋ฒ์ ๋ค์ ์ํด ๋ณํ๋๊ณ ์ ๊ทผ๋ ์ ์๋๋ก ๋ณด์ฅํ๋ค.
๋ง์ฝ ๋ฒ ํ API ๋ฒ์ ์ ์ฌ์ฉํ๋ค๋ฉด, ํด๋น API๊ฐ ์น๊ธํ์ ๋ ํ์ ๋ฒ ํ ๋ฒ์ ํน์ ์์ ๋ ๋ฒ์ ์ API๋ก ์ ํํด์ผ ํ๋ค. ํด๋น ์์ ์ ์ค๋ธ์ ํธ ์ ๊ทผ์ ์ํด ๋ API ๋ฒ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ๋ฒ ํ API์ ์ฌ์ฉ ์ค๋จ(deprecation) ์๊ธฐ์ผ ๋ ์งํํ๋ ๊ฒ์ด ์ต์ ์ด๋ค. ๋ฒ ํ API์ ์ฌ์ฉ ์ค๋จ(deprecation) ์๊ธฐ๊ฐ ๋๋๊ณ ๋ ์ด์ ์ฌ์ฉ๋ ์ ์๋ค๋ฉด ๋ฐ๋์ ๋์ฒด API ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ฐธ๊ณ :
๋น๋ก ์ฟ ๋ฒ๋คํฐ์ค๋ ์ํ API ๋ฒ์ ์ ๋ํ ํธํ์ฑ์ ์ ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ง๋ง, ์ผ๋ถ ์ํฉ์์ ์ด๋ ๋ถ๊ฐ๋ฅํ๋ค. ์ํ API ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํด๋ฌ์คํฐ๋ฅผ ์ ๊ทธ๋ ์ด๋ํด์ผ ํ ๋์๋ API ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํธํ์ฑ์ด ๊นจ์ง๊ณ ์ ๊ทธ๋ ์ด๋ ์ ์ ๊ธฐ์กด ์ค๋ธ์ ํธ๋ฅผ ์ ๋ถ ์ ๊ฑฐํด์ผ ํ๋ ์ํฉ์ ๋๋นํ๊ธฐ ์ํด ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฆด๋ฆฌ์ค ์ ๋ณด๋ฅผ ํ์ธํ์.API ๋ฒ์ ์์ค ์ ์์ ๋ํ ์์ธํ ๋ด์ฉ์ API ๋ฒ์ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํ๋ค.
API ํ์ฅ
์ฟ ๋ฒ๋คํฐ์ค API๋ ๋ค์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ก ํ์ฅํ ์ ์๋ค.
- ์ปค์คํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ฉด API ์๋ฒ๊ฐ ์ ํํ ๋ฆฌ์์ค API๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ์ ์ธ์ ์ผ๋ก ์ ์ํ ์ ์๋ค.
- ์ ๊ทธ๋ฆฌ๊ฒ์ด์ ๋ ์ด์ด(aggregation layer)๋ฅผ ๊ตฌํํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ํ์ฅํ ์๋ ์๋ค.
๋ค์ ๋ด์ฉ
- ์์ฒด CustomResourceDefinition์ ์ถ๊ฐํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์ฐ๊ธฐ.
- ์ฟ ๋ฒ๋คํฐ์ค API ์ ๊ทผ ์ ์ดํ๊ธฐ๋ ํด๋ฌ์คํฐ๊ฐ API ์ ๊ทผ์ ์ํ ์ธ์ฆ ๋ฐ ๊ถํ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค.
- API ๋ ํผ๋ฐ์ค๋ฅผ ์ฝ๊ณ API ์๋ํฌ์ธํธ, ๋ฆฌ์์ค ์ ํ ๋ฐ ์ํ์ ๋ํด ๋ฐฐ์ฐ๊ธฐ.
- API ๋ณ๊ฒฝ ์ฌํญ์์ ํธํ ๊ฐ๋ฅํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ์ฑํ๊ณ , API๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณธ๋ค.