CertificateSigningRequest(CSR) 리소스는 지정된 서명자에게 인증서 서명을 요청하는 데 사용됩니다. 요청이 승인되거나 거부된 후 최종적으로 서명됩니다.
인증과정 참고
Kubernetes 에서 접근제한을 Clusters, Contexts, Users 로 나눠서 관리합니다.
Clusters 는 파드(서버)들이 올라가 있는 장소이고 User는 해당 클러스터에 접근하려는 사용자입니다.
사용자마다 Cluster 에 접근 권한을 따로 관리하면 관리성이 복잡해 지기 때문에 Contexts 를 두어 아래의 그림과 같이 묶어서 관리를 합니다.

사용자는 openssl 을 통해서 개인키와 공개키를 만듭니다.
Signing Sample
-----BEGIN CERTIFICATE-----
MIIDgjCCAmqgAwIBAgIUC1N1EJ4Qnsd322BhDPRwmg3b/oAwDQYJKoZIhvcNAQEL
BQAwXDELMAkGA1UEBhMCeHgxCjAIBgNVBAgMAXgxCjAIBgNVBAcMAXgxCjAIBgNV
BAoMAXgxCjAIBgNVBAsMAXgxCzAJBgNVBAMMAmNhMRAwDgYJKoZIhvcNAQkBFgF4
MB4XDTIwMDcwNjIyMDcwMFoXDTI1MDcwNTIyMDcwMFowNzEVMBMGA1UEChMMc3lz
dGVtOm5vZGVzMR4wHAYDVQQDExVzeXN0ZW06bm9kZToxMjcuMC4wLjEwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDne5X2eQ1JcLZkKvhzCR4Hxl9+ZmU3
+e1zfOywLdoQxrPi+o4hVsUH3q0y52BMa7u1yehHDRSaq9u62cmi5ekgXhXHzGmm
kmW5n0itRECv3SFsSm2DSghRKf0mm6iTYHWDHzUXKdm9lPPWoSOxoR5oqOsm3JEh
Q7Et13wrvTJqBMJo1GTwQuF+HYOku0NF/DLqbZIcpI08yQKyrBgYz2uO51/oNp8a
sTCsV4OUfyHhx2BBLUo4g4SptHFySTBwlpRWBnSjZPOhmN74JcpTLB4J5f4iEeA7
2QytZfADckG4wVkhH3C2EJUmRtFIBVirwDn39GXkSGlnvnMgF3uLZ6zNAgMBAAGj
YTBfMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMB
Af8EAjAAMB0GA1UdDgQWBBTREl2hW54lkQBDeVCcd2f2VSlB1DALBgNVHREEBDAC
ggAwDQYJKoZIhvcNAQELBQADggEBABpZjuIKTq8pCaX8dMEGPWtAykgLsTcD2jYr
L0/TCrqmuaaliUa42jQTt2OVsVP/L8ofFunj/KjpQU0bvKJPLMRKtmxbhXuQCQi1
qCRkp8o93mHvEz3mTUN+D1cfQ2fpsBENLnpS0F4G/JyY2Vrh19/X8+mImMEK5eOy
o0BMby7byUj98WmcUvNCiXbC6F45QTmkwEhMqWns0JZQY+/XeDhEcg+lJvz9Eyo2
aGgPsye1o3DpyXnyfJWAWMhOz7cikS5X2adesbgI86PhEHBXPIJ1v13ZdfCExmdd
M1fLPhLyR54fGaY+7/X8P9AZzPefAkwizeXwe9ii6/a08vWoiE4=
-----END CERTIFICATE-----
이 만든 키를 통해서 CertificateSingingRequest(CSR)을 요청합니다.
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
...
status:
certificate: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JS..."
요청된 CSR 은 기본적으로 PENDING 상태가 되며, 아래 명령어를 통해서 approve 해주어야 합니다.
kubectl certificate apporve <csr-name>
반대로 deny 하고 싶다면 아래와 같이 진행하면 됩니다.
kubectl certificate deny <csr-name>
이제 해당하는 csr 을 통해서 context 를 만들어보도록 하겠습니다.
kubectl config set-credentials my-user \
--client-certificate=my-user.crt \
--client-key=my-user.key \
--embed-certs=true
kubectl config set-context my-user-context \
--cluster=my-cluster \
--user=my-user
kubectl config use-context my-user-context
위와 같은 명령어를 통해서 my-user 를 생성하고, my-cluster 와 my-user 을 context 로 묶어줍니다. 그리고 지금 현재의 kubernetes 의 config 를 my-user-context 로 설정해주면, 해당 유저의 인증으로 kube-apiserver 와 통신할 수 있습니다.