CA는 키와 인증서 파일 1개의 pair에 해당한다.

CA에 접근하여 k8s 환경을 구축할 수 있으므로, 안전하게 보관되어야 한다.

 

인증서 파일은 서버에 안전하게 보관되고, 인증서에 서명하고자 할 때마다 해당 서버에 접근하고 사용할 수 있는 권한이 있어야 함

마스터노드에 인증서 파일이 보관 될 서버가 위치하게 되고, rsa서버가 되기도 함

kubeadm tool도 마찬가지로 CA file을 생성하고 마스터노드에 저장함,

지금까지는 수동으로 요청에 서명했으나,

k8s에 내장된 Certificate API를 이용하여 k8s API Client가 X.509 자격 증명 프로비저닝을 자동화할 수 있도록 한다. (많은 사용자의 접근과, 유효한 인증서의 만료일자 등 자동으로 관리할 수 있도록 한다.)

 

k8s는 마스터노드에 Certificate API가 내장되어 있어 인증서 관리가 용이하다.

 

 

 

사용자는 관리자에게 Certificate Request를 Certificate API를 호출하여 k8s에 서명 요청을 보냄

관리자는 사용자에게 받은 서명 요청을 수행하기 위해,  마스터노드에 접속하여 수동으로 인증하지 않고,

CertificateSigningRequest Object(API 개체)를 만든다.

 

1. Create CertificateSigningRequest Object 

Object가 생성되면 인증서 요청에 대해  cluster관리자들이 해당 서명 요청을 보게 됨

2. Review Requests

3. Approve Requests

(kubectl을 통해 쉽게 검토하고 승인할 수 있음)

4. Share Certs to Users

검토되고,승인 된 위 인증서는 추출되어 사용자와 공유됨

--------

 


사용자는 관리자에게 Certificate Request를 Certificate API를 호출하여 k8s에 서명 요청을 보냄

관리자는 사용자에게 받은 서명 요청을 수행하기 위해,  마스터노드에 접속하여 수동으로 인증하지 않고,

CertificateSigningRequest Object(API 개체)를 만든다.

 

1. Create CertificateSigningRequest Object 

Object가 생성되면 인증서 요청에 대해  cluster관리자들이 해당 서명 요청을 보게 됨

2. Review Requests

3. Approve Requests

(kubectl을 통해 쉽게 검토하고 승인할 수 있음)

4. Share Certs to Users

검토되고,승인 된 위 인증서는 추출되어 사용자와 공유됨

--------

 

>>실습

 

1. 사용자는 key를 먼저 만들고, 사용자의 이름이 명시된 키를 사용해 관리자에게 인증서 서명 요청

openssl genrsa -out ysuekkom.key 2048
ysuekkome.key			//사용자 이름이 명시된 키 생성
openssl req -new -key ysuekkom.key -subj "/CN=ysuekkom" -out ysuekkom.csr	//인증서 서명 요청

 

2. 관리자는 사용자가 보낸 키를 사용하여, CertificateSigningRequest Object를 생성함

>>일반적인 k8s object와 마찬가지로 manifests file 체계로 생성됨

사용자가 보낸 인증서 서명을 인코딩하여 request field에 명시

apiVersion: certificate.k8s/io/v1
kind: CertificateSigningRequest
metadata:
  name: ysuekkom
spec:
  expirationSeconds: 600 
  usages:
  - digital signature
  - key encipherment
  - server auth
  request:
    - 
    		//사용자가 보낸 인증서 서명을 명시하는 곳--일반 텍스트를 그대로 쓰지않고
            //base64로 인코딩된 텍스트를 request field로 옮긴다: cat ysuekkom.csr | base64

 

참고) 디코딩하기 위해서는 base64 유틸리티를 이용하여, 디코딩 수행하기

>> 디코딩 시 일반 텍스트형식으로 인증서 내용 확인 가능

 

 

3. Object가 생성되면  모든 인증서 모든 CertificateSigningRequest는, kubectl 실행으로 관리자에 의해 확인할 수 있음

kubectl get csr

>> Name, age, signername, requestro, requestedduration, condition 등을 확인할 수 있음

 

 

4. kubectl 명령을 확인하여, 관리자가 사용자 승인 수행

kubectl certificate approve ysuekkom
ysuekkom approved!

>>새 요청을 확인하고, 요청 승인 할 수 있음

 

 

5. yaml 포맷으로 인증서를 확인하면, 생성된 인증서의 일부를 확인할 수 있음

kubectl get csr ysuekkom -o yaml

 

 

 


 

위 과정은 Master Node의 어떤 컴포넌트가 수행할까?

-인증서 관련 모든 작업은 Controller Manager 내 CSR-APPROVING, CSR-SIGNING이 수행

 

인증서에 서명이 필요하다면, CA서버의 경로, 인증서, 개인키가 필요함

Controller Manager 서비스 구성에는, 2가지 옵션이 있음

cat /etc/kubernetes/manifests/kube-controller-manager.yaml

 

spec:
  containers:
  - command:
    - kube-controller-manager
    - --address=127.0.0.1
    - --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
    - --cluster-signing-key-file=/etc/kubernetes/pki/ca.key

 

 

 

 

 

 

 

+ Recent posts