[CKA] Certificates API

Certificates API의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.

CA Server는 쿠버네티스 환경에 대한 인증서에 서명할 수 있으며, 안전한 환경을 보장하고 보호하며, 인증서를 저장합니다. 인증서에 서명이 필요할 때마다 가져와 서명합니다.
쿠버네티스 내장 인증서 API를 통해 인증서 서명 요청을 받아 사용합니다.

Certificates API

Certificates API는 CSR 제출과 승인·서명 과정을 API 객체로 관리합니다. API 사용만으로 인증서 갱신이 자동 보장되지는 않습니다.

모든 인증서 관련 작업은 controller Manager에 의해 수행됩니다.

CertificateSigningRequest 요청 시 Certificate Request에 대한 base64 암호화가 필요합니다.

cat example-user.csr | base64 -w 0
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1ZqQ0NBVDRDQVFBd0VURVBNQTBHQTFVRUF3d0dZV3R6YUdGNU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQXZoK2t5WCtMOGkzYmlWU2YwWnlKQmFFcnJMeUUvQTgvTlZUSERVbXVpR1psClRMSFM3UFFTbXc4cUZGU2wvU25VbW5hdzVsWU8vTzI0RjE2N1IzeFVERnY5dXNWeWRoS0Ywcmc1RVBvc0pMMzQKV0grWXhtV01MSDZPcTN4WXVTb1RIQ1pTVHB1ZnZvQ085aG9tamduMEtvSjRkdm91RzFVNSt1c1FtRjN4S1p1egpLb1NRY1FrTEErSlhmQ1lEVlBWYU12dnpRTExzVG5LTnZSZ3JCWW1DVUlvODlPWmdCK2xTNkY4YitUeVczd2kvCk5iVlkxWnlyeERHWDZjaHhWajFhcmZ1N05BdUdCMGl1ZlNmT0NxSUNVV0t1Sk1wMGlVUE5pTFptVzVOYkN3Y3kKdW0vS1Bsc2VJZG5hQVYrSklIanBGT1o0cytTVFN1bXpITlpFUHl6TVl3SURBUUFCb0FBd0RRWUpLb1pJaHZjTgpBUUVMQlFBRGdnRUJBQVh0V1RMdWNHb3BkRm5zNENCenRFZU5wZko4MVlSSWJmd1hNdVdLOWt6bkNnZ1BnaE5mCnJEMmo1U3hlNWd5UTlXVXdhUVE3WkFpMndrUDdjZDlGZk1ENjlCV2NSVWhJUGN3ZEtPd0ZzUlZwYk1odkVRNisKQ1FpcFdIR1VFcVIwVzFxQnI3L3J6WUlua1N4S0dYMkFneXI5akY0dzlYVm80eFR2aHVnNmhJcm1FM2JiT1RqKwpmQVU1ajRMZnhCT3NhTTlUUndGMm02dUh1SDd3QkJpS2VMamJIeTVOT2RtRWxSS0RVWElrMHpuTG53b0gyb3dxCldFSmVOeHVPWVZQVElzUnN6VXhnUndwU1lTTlp0c0MwRFZqc2F3N3dEWVVFVCtnSmVxWGZpSjRlSVJ1dm1IVE8KTG9hRWo1bkV3b2VOdzE2RzJzZjhEdlE2UThyNUZQejhnemc9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=

YAML 파일 구성은 다음과 같으며 request에 해당 base64 토큰을 첨부해야합니다.

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: example-user
spec:
  groups:
    - system:authenticated
  request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1ZqQ0NBVDRDQVFBd0VURVBNQTBHQTFVRUF3d0dZV3R6YUdGNU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQXZoK2t5WCtMOGkzYmlWU2YwWnlKQmFFcnJMeUUvQTgvTlZUSERVbXVpR1psClRMSFM3UFFTbXc4cUZGU2wvU25VbW5hdzVsWU8vTzI0RjE2N1IzeFVERnY5dXNWeWRoS0Ywcmc1RVBvc0pMMzQKV0grWXhtV01MSDZPcTN4WXVTb1RIQ1pTVHB1ZnZvQ085aG9tamduMEtvSjRkdm91RzFVNSt1c1FtRjN4S1p1egpLb1NRY1FrTEErSlhmQ1lEVlBWYU12dnpRTExzVG5LTnZSZ3JCWW1DVUlvODlPWmdCK2xTNkY4YitUeVczd2kvCk5iVlkxWnlyeERHWDZjaHhWajFhcmZ1N05BdUdCMGl1ZlNmT0NxSUNVV0t1Sk1wMGlVUE5pTFptVzVOYkN3Y3kKdW0vS1Bsc2VJZG5hQVYrSklIanBGT1o0cytTVFN1bXpITlpFUHl6TVl3SURBUUFCb0FBd0RRWUpLb1pJaHZjTgpBUUVMQlFBRGdnRUJBQVh0V1RMdWNHb3BkRm5zNENCenRFZU5wZko4MVlSSWJmd1hNdVdLOWt6bkNnZ1BnaE5mCnJEMmo1U3hlNWd5UTlXVXdhUVE3WkFpMndrUDdjZDlGZk1ENjlCV2NSVWhJUGN3ZEtPd0ZzUlZwYk1odkVRNisKQ1FpcFdIR1VFcVIwVzFxQnI3L3J6WUlua1N4S0dYMkFneXI5akY0dzlYVm80eFR2aHVnNmhJcm1FM2JiT1RqKwpmQVU1ajRMZnhCT3NhTTlUUndGMm02dUh1SDd3QkJpS2VMamJIeTVOT2RtRWxSS0RVWElrMHpuTG53b0gyb3dxCldFSmVOeHVPWVZQVElzUnN6VXhnUndwU1lTTlp0c0MwRFZqc2F3N3dEWVVFVCtnSmVxWGZpSjRlSVJ1dm1IVE8KTG9hRWo1bkV3b2VOdzE2RzJzZjhEdlE2UThyNUZQejhnemc9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=
  signerName: kubernetes.io/kube-apiserver-client
  usages: 
  - client auth
kubectl certificate approve example-user