Certificates API

Yu Sang Min·2025년 6월 16일

CKA

목록 보기
50/110

📜 Kubernetes에서 인증서 관리

Kubernetes 환경에서 인증서를 어떻게 관리하는지, 그리고 Certificate API의 역할에 대한 설명.

🧭 개요

  • Kubernetes 클러스터에서 인증 기반 접근을 위해 CA 서버 및 인증서 사용
  • 관리자는 클러스터 초기 설정 시 CA 키 쌍과 각 컴포넌트별 인증서 구성
  • 사용자가 증가할수록 CSR 처리 및 인증서 갱신의 자동화 필요성 증가

🔧 클러스터 초기 설정과 인증서 구성

  • 클러스터 설치 과정에서 관리자가 CA 서버 및 인증서 구성 완료
  • 각 Kubernetes 컴포넌트는 적절한 인증서를 통해 통신 보안 유지
  • 클러스터 내 유일한 사용자인 관리자는 관리자 인증서와 키 보유
  • 새로운 관리자가 합류할 경우 인증서 및 키 쌍 발급 필요

🧾 CSR 생성 및 수동 서명 절차

  • 신규 사용자는 개인 키 생성 및 CSR(Certificate Signing Request) 생성
  • 기존 관리자는 CSR을 CA 서버로 전달하여 서명 수행
  • CA는 루트 인증서와 개인 키로 CSR 서명 후 인증서 발급
  • 사용자에게 인증서 전달 후, 클러스터 접근 권한 부여
  • 인증서는 유효기간 존재 → CSR 재생성과 갱신 필요
  • 인증서 만료 시마다 파일 교체 및 주기적 로테이션 작업 수행

🧠 CA 서버의 개념과 위치

  • CA 서버는 루트 인증서와 개인 키 쌍 보유 서버
  • 해당 키 파일에 접근 가능한 주체는 사용자 생성 및 권한 조작 가능
  • 보안 유지를 위해 CA 파일은 안전한 서버에만 저장 필요
  • Kubernetes 마스터 노드에 CA 역할을 통합 수행 가능
  • kubeadm은 CA 키 쌍을 자동 생성하고 마스터 노드에 저장

🔄 CSR 수작업 처리의 한계와 자동화 필요성

  • 사용자 수 증가에 따라 CSR 수작업 처리의 비효율성 증가
  • Kubernetes는 내장 Certificate API 제공을 통해 CSR 처리 자동화 가능
  • 사용자 측에서 CSR을 Kubernetes에 직접 API 요청으로 제출 가능

🧾 CertificateSigningRequest 오브젝트 활용 방식

  • 관리자는 CSR을 기반으로 CertificateSigningRequest 리소스 생성
  • 해당 오브젝트는 일반 Kubernetes 매니페스트와 동일한 방식으로 작성
    • kind: CertificateSigningRequest
    • spec.request: 사용자가 생성한 CSR을 Base64 인코딩하여 삽입
  • kubectl get csr 명령어로 전체 CSR 조회 가능
  • kubectl certificate approve <CSR_NAME> 명령어로 CSR 승인 처리
  • Kubernetes는 CA 키 쌍을 사용하여 인증서 자동 생성
  • 생성된 인증서는 YAML 출력으로 확인 가능 → Base64 디코딩 후 사용자 전달
# akshay-csr.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: akshay
spec:
  groups:
  - system:authenticated
  request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1ZqQ0NBVDRDQVFBd0VURVBNQTBHQTFVRUF3d0dZV3R6YUdGNU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQW9yOWlrOTF5MlZ4VlNpR1lKaWxYV1BBaHBNUkcwdjJWQ0k3Lzhrb2RkOXNqClNKSTJ5QkJxUFl4M3NXZWJaZjdQYXhCMlY4N1pLNXV0YjBtaFo3RlR1a1ZkR2JFS01ubWNxTi9FRFdhdzhkY1IKTnJYVlRoS2FHZEhtL0hSd3MwNjVvRHV2bDBmV1pxUEZkd2QrVzFVbnhjM2dCREZubm1NVlNsdUp4eXZUVno0cAovQ1RkVnF3ck5TWWlyM2doMDM1cWdCcDdpZ0xZcTBPUHd1Nis3R0lGYVBsdHkrUTdzNGx2VjFGVUtUSi8yRC9uCjg2ZVI4TnNpVmJRZi8xK0pJQm5CL1UvSFBiWWtvbWtlQVhlWXlGMnZ0dUpaVGFROVRNZU1Ma1pySWx2WjN2THMKSVY3WTE4VmswTFhQVElhWFdEdDlJUTFSNUpwUEVHeURWWFJmaVdmdHVRSURBUUFCb0FBd0RRWUpLb1pJaHZjTgpBUUVMQlFBRGdnRUJBQjJTQW5LYXFPUG9FYWR4Q2ExS2ViS1U0Y1VJenJaQmFTQ2N0QS9RWmxXVHFUVkRkdjRMCmVmYXYxYm5ENjVsQWxraENlbEU5Z1o4bkxwR3FlVnFvQ0JmcU9mZnlpTXpVTDF2V29saXgyQ2UxMUIrdldnUEsKUk0wclYvVXdXSDVpTmdXOHRKeHhtT29tZ3lXRkp3RHE0OENxaXRNUVVpWXAyY2tnSElnZ1hmd01od3hHVFdHSAplOTZqY2t4YzA4QVhVejR2UG8zaXc0ZkptOEUzODI4Uy9HWHVDMU1YMUpWalR3L1NwUmJvWUdSdDVmUzlXMTJGCjBnZGZUQXpJOU14aGZiZHgzRmkyakZiSFEvU1BRUlI3UHpNSi9OYUM2M3EvYjhLZUk0QlRkR1huZ3NQVnpRR28KTnlhdko1MHBsaFdQdmdCQ0JZV0tSTFhQTk9WRi9NeVEvQkE9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth

🧩 인증서 처리를 담당하는 컨트롤러 구성 요소

  • Kubernetes Control Plane 구성요소:
    • kube-apiserver
    • scheduler
    • controller-manager
    • etcd
  • 이 중 CSR 관련 작업은 Controller Manager가 전담 수행
  • 내부에는 다음과 같은 컨트롤러 포함:
    • CSR-Approving Controller: CSR 승인 처리 담당
    • CSR-Signing Controller: CSR 서명 및 인증서 발급 담당
  • 해당 컨트롤러는 서명을 위해 루트 인증서와 개인 키가 필요
  • Controller Manager 설정 파일에서 CA 키 쌍 경로 지정 가능

✅ 요약

  • Kubernetes는 수동 인증서 발급을 대체하기 위해 Certificates API 제공
  • CertificateSigningRequest 오브젝트를 통해 CSR 등록 및 자동화된 승인 절차 구성 가능
  • 인증서 처리 담당자는 Controller Manager 내부의 서브 컨트롤러
  • 보안 유지를 위해 CA 키 쌍은 안전한 위치에 저장 필요

⌨️ 명령어

$ cat <name.yaml> | base64 -w 0
$ kubectl get csr
$ kubectl certificate approve <name>
$ kubectl certificate deny <name>
$ kubectl delete csr <name>
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글