콤퓨우터/필기: KodeKloud CKA 강의

147-152. View Certificate Details and Certificates API

파란화면 2024. 5. 17. 00:33
반응형

인증서 문제

쿠버에서 인증서 관련 문제를 해결하려면 일단 해당 쿠버 클러스터가 어떻게 디플로이되었는지를 알아야 한다.

예를 들어 kubeadm을 사용하여 올렸다면 상당 부분을 알아서 해준다
kubeadm은 쿠버의 컴포넌트들을 Static Pods으로 올려준다.

예를 들어 kube-apiserver는 /etc/kubernetes/manifests/kube-apsierver.yaml에 Pod Specification이 있고, 이 파일의 spec.containers.command 하위의 파라미터들을 통해, kube-apiserver의 인증서들의 존재를 알 수 있다.

각 인증서 파일에 대해 openssl x509 -in /path/to/cert.crt -text 명령어로 Readable text 형태의 인증서를 볼 수 있다.
확인해야 할 것:

  • Issuer CN
  • Validity
  • Subject CN
  • SAN

로깅

쿠버 구축을 제로부터 시작했다면 systemd service로 구현했을 텐데, 그러면 journalctl -u 서비스명을 통해 로그를 찍어보는것이 좋을것이다.

kubeadm을 이용해 구축했다면 Static Pod이므로, kubectl logs etcd-master처럼 Pod명으로 kubectl을 돌리면 된다.

  • kube-apiserver나 etcd가 죽었다면 kubectl은 작동하지 않을것이다. 이 경우 docker ps -a를 해서 컨테이너명을 확인한 뒤 docker logs 컨테이너ID로 직접 컨테이너 로그를 찍어야 한다.
    • 컨테이너 런타임이 docker가 아닌 경우 crictl(CRI-O), nerdctl(containerd) 등을 사용하면 된다

 

Certificates API - 왜 사용하는가

CA라는 것은 근본적으로는 인증서와 Private Key 파일 쌍에 불과하다.
하지만 그 두 파일의 중요성은 말할 필요가 없다. CA 인증서와 키가 있으면 기본적으로 쿠버 클러스터에 대한 무제한적인 권한이 있는것과 다름없다

또 인증서는 만료기간이 있으며, 이것을 계속해서 rotating(기간연장발급 후 교체)해 줘야 정상적으로 사용할 수 있다 (옛날 공인인증서를 생각해보자)

  • 그럼 이것을 어떻게 보관할 것인가?
  • 또 인증서를 발행과 rotating을 위한 채널을 만들 수는 없을까?

지금까지는,

  • 제로부터 구축하는 쿠버클러스터 구성에서는, 그냥 master node에 놓았다
  • kubeadm으로 구축하더라도 마찬가지이다

Certificates API

  • CSR Request? API로 쏘세요
    • API Object인 CreateCertificateSigningRequest를 생성
    • kubectl 명령어를 이용해 approve

실제 인증서 발행

  • PK 발행: openssl genrsa -out jane.key 2048
  • CSR 생성: openssl req -new -key jane.key -subj="/CN=jane" -out jane.csr
  • 다른 관리자가 이 CSR를 받아, CreateSigningRequest Object를 생성:
    apiVersion: certificates.k8s.io/v1
    kind: CertificateSigningRequest
    metadata:
      name: jane
    spec:
      expirationSeconds: 600
      usages:
      - digital signature
      - key encipherment
      - server auth
      request:
        (base64 인코드된 CSR)
  • kubectl create -f jane-csr.yaml
    • kubectl get csr로 생성된 CSR 요청을 볼 수 있음
  • kubectl certificate approve jane으로 인증서 발급 요청을 허가
    • kubectl get csr -o yaml로 발행된 인증서를 볼 수 있음 (base64 인코드됨)

Under the hood

controller-manager에서 처리 (csr-approving, csr-signing)
Kubeadm으로 디플로이된 환경의 경우 /etc/kubernetes/manifests/kube-controller-manager.yaml에서 CA Cert/Key 확인 가능

반응형