[CKA] Certificates API
Certificates API의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.
CA Server는 쿠버네티스 환경에 대한 인증서에 서명할 수 있으며, 안전한 환경을 보장하고 보호하며, 인증서를 저장합니다. 인증서에 서명이 필요할 때마다 가져와 서명합니다.
쿠버네티스 내장 인증서 API를 통해 인증서 서명 요청을 받아 사용합니다.
Certificates API
Certificates API는 CSR 제출과 승인·서명 과정을 API 객체로 관리합니다. API 사용만으로 인증서 갱신이 자동 보장되지는 않습니다.
- CertificateSigningRequest 객체 생성:
쿠버네티스 사용자 또는 서비스가 새로운 인증서를 요청할 때 CSR 객체를 생성합니다. 이 객체에는 요청자의 정보와 공개 키가 포함됩니다.- 사용자의 이름이 적힌 키를 통해 인증서를 서명하여 관리자한테 요청을 보냅니다.
- 요청 검토:
클러스터 관리자나 자동화된 시스템이 생성된 CSR 객체를 검토합니다. 이 단계에서는 요청의 정당성과 정확성을 확인합니다.- 관리자가 키를 통해 인증서 사인 구성 객체를 만들게 되며 마찬가지로 manifest 파일을 이용해 생성합니다.
- 요청시 base64를 통해 인코딩하여 제출해야합니다.
- 요청 승인:
검토 후 적절하다고 판단되면 CSR을 승인합니다. 이는 쿠버네티스 API를 통해 수행됩니다.- 모든 인증서 요청은 관리자라면 확인할 수 있고, 요청을 승인할 수 있습니다.
- 인증서 수령:
서명된 인증서는 CSR 객체의status.certificate필드에서 회수합니다. Secret에 저장하려면 사용자가 별도 단계로 생성해야 합니다.
모든 인증서 관련 작업은 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