1
1
---
2
+
3
+
2
4
title : kubeadm을 사용한 인증서 관리
3
5
content_type : task
4
6
weight : 10
@@ -190,11 +192,13 @@ CSR과 함께 제공되는 개인 키가 모두 출력된다.
190
192
` kubeadm init` 과 마찬가지로 출력 디렉터리를 `--csr-dir` 플래그로 지정할 수 있다.
191
193
192
194
CSR에는 인증서 이름, 도메인 및 IP가 포함되지만, 용도를 지정하지는 않는다.
193
- 인증서를 발행할 때 [올바른 인증서 용도](/ko/docs/setup/best-practices/certificates/#모든-인증서)를 지정하는 것은 CA의 책임이다.
195
+ 인증서를 발행할 때 [올바른 인증서 용도](/ko/docs/setup/best-practices/certificates/#모든-인증서)를
196
+ 지정하는 것은 CA의 책임이다.
194
197
195
198
* `openssl` 의 경우
196
199
[`openssl ca` 명령](https://superuser.com/questions/738612/openssl-ca-keyusage-extension)으로 수행한다.
197
- * `cfssl` 의 경우 [설정 파일에 용도](https://github.com/cloudflare/cfssl/blob/master/doc/cmd/cfssl.txt#L170)를 지정한다.
200
+ * `cfssl` 의 경우
201
+ [설정 파일에 용도](https://github.com/cloudflare/cfssl/blob/master/doc/cmd/cfssl.txt#L170)를 지정한다.
198
202
199
203
선호하는 방법으로 인증서에 서명한 후, 인증서와 개인 키를 PKI 디렉터리(기본적으로 `/etc/kubernetes/pki`)에 복사해야 한다.
200
204
@@ -203,3 +207,71 @@ CSR에는 인증서 이름, 도메인 및 IP가 포함되지만, 용도를 지
203
207
Kubeadm은 CA 인증서의 순환이나 교체 기능을 기본적으로 지원하지 않는다.
204
208
205
209
CA의 수동 순환이나 교체에 대한 보다 상세한 정보는 [CA 인증서 수동 순환](/docs/tasks/tls/manual-rotation-of-ca-certificates/) 문서를 참조한다.
210
+
211
+ # # 서명된 kubelet 인증서 활성화하기 {#kubelet-serving-certs}
212
+
213
+ 기본적으로 kubeadm에 의해서 배포된 kubelet 인증서는 자가 서명된(self-signed) 것이다.
214
+ 이것은 [metrics-server](https://github.com/kubernetes-sigs/metrics-server)와
215
+ 같은 외부 서비스의 kubelet에 대한 연결은
216
+ TLS로 보안되지 않음을 의미한다.
217
+
218
+ 제대로 서명된 인증서를 얻기 위해서 신규 kubeadm 클러스터의 kubelet을 구성하려면
219
+ 다음의 최소 구성을 `kubeadm init` 에 전달해야 한다.
220
+
221
+ ` ` ` yaml
222
+ apiVersion: kubeadm.k8s.io/v1beta2
223
+ kind: ClusterConfiguration
224
+ ---
225
+ apiVersion: kubelet.config.k8s.io/v1beta1
226
+ kind: KubeletConfiguration
227
+ serverTLSBootstrap: true
228
+ ` ` `
229
+
230
+ 만약 이미 클러스터를 생성했다면 다음을 따라 이를 조정해야 한다.
231
+ - ` kube-system` 네임스페이스에서 `kubelet-config-{{< skew latestVersion >}}` 컨피그맵을 찾아서 수정한다.
232
+ 해당 컨피그맵에는 `config` 키가
233
+ [KubeletConfiguration](/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
234
+ 문서를 값으로 가진다. `serverTLSBootstrap : true` 가 되도록 KubeletConfiguration 문서를 수정한다.
235
+ - 각 노드에서, `serverTLSBootstrap : true` 필드를 `/var/lib/kubelet/config.yaml` 에 추가한다.
236
+ 그리고 `systemctl restart kubelet` 로 kubelet을 재시작한다.
237
+
238
+ `serverTLSBootstrap : true` 필드는 kubelet 인증서를 이용한 부트스트랩을
239
+ ` certificates.k8s.io` API에 요청함으로써 활성화할 것이다. 한 가지 알려진 제약은
240
+ 이 인증서들에 대한 CSR(인증서 서명 요청)들이 kube-controller-manager -
241
+ [`kubernetes.io/kubelet-serving`](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers)의
242
+ 기본 서명자(default signer)에 의해서 자동으로 승인될 수 없다는 점이다.
243
+ 이것은 사용자나 제 3의 컨트롤러의 액션을 필요로 할 것이다.
244
+
245
+ 이 CSR들은 다음을 통해 볼 수 있다.
246
+
247
+ ` ` ` shell
248
+ kubectl get csr
249
+ NAME AGE SIGNERNAME REQUESTOR CONDITION
250
+ csr-9wvgt 112s kubernetes.io/kubelet-serving system:node:worker-1 Pending
251
+ csr-lz97v 1m58s kubernetes.io/kubelet-serving system:node:control-plane-1 Pending
252
+ ` ` `
253
+
254
+ 이를 승인하기 위해서는 다음을 수행한다.
255
+ ` ` ` shell
256
+ kubectl certificate approve <CSR-name>
257
+ ` ` `
258
+
259
+ 기본적으로, 이 인증서는 1년 후에 만기될 것이다. Kubeadm은
260
+ ` KubeletConfiguration` 필드의 `rotateCertificates` 를 `true` 로 설정한다. 이것은 만기가
261
+ 다가오면 인증서를 위한 신규 CSR 세트가 생성되는 것을 의미하며,
262
+ 해당 순환(rotation)을 완료하기 위해서는 승인이 되어야 한다는 것을 의미한다. 더 상세한 이해를 위해서는
263
+ [인증서 순환](/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#certificate-rotation)를 확인한다.
264
+
265
+ 만약 이 CSR들의 자동 승인을 위한 솔루션을 찾고 있다면 클라우드 제공자와
266
+ 연락하여 대역 외 메커니즘(out of band mechanism)을 통해 노드의 신분을 검증할 수 있는
267
+ CSR 서명자를 가지고 있는지 문의하는 것을 추천한다.
268
+
269
+ {{% thirdparty-content %}}
270
+
271
+ 제 3 자 커스텀 컨트롤러도 사용될 수 있다.
272
+ - [kubelet-rubber-stamp](https://github.com/kontena/kubelet-rubber-stamp)
273
+
274
+ 이러한 컨트롤러는 CSR의 CommonName과 요청된 IPs 및 도메인 네임을
275
+ 모두 검증하지 않는 한, 보안이 되는 메커니즘이 아니다. 이것을 통해 악의적 행위자가
276
+ kubelet 인증서(클라이언트 인증)를 사용하여 아무 IP나 도메인 네임에 대해 인증서를
277
+ 요청하는 CSR의 생성을 방지할 수 있을 것이다.
0 commit comments