인증서 문제
쿠버에서 인증서 관련 문제를 해결하려면 일단 해당 쿠버 클러스터가 어떻게 디플로이되었는지를 알아야 한다.
예를 들어 kubeadm을 사용하여 올렸다면 상당 부분을 알아서 해준다
kubeadm은 쿠버의 컴포넌트들을 Static Pods으로 올려준다.
예를 들어 kube-apiserver는 /etc/kubernetes/manifests/kube-apsierver.yaml
에 Pod Specification이 있고, 이 파일의 spec.containers.command
하위의 파라미터들을 통해, kube-apiserver의 인증서들의 존재를 알 수 있다.
각 인증서 파일에 대해 openssl x509 -in /path/to/cert.crt -text
명령어로 Readable text 형태의 인증서를 볼 수 있다.
확인해야 할 것:
- Issuer CN
- Validity
- Subject CN
- SAN
로깅
쿠버 구축을 제로부터 시작했다면 systemd service로 구현했을 텐데, 그러면 journalctl -u 서비스명
을 통해 로그를 찍어보는것이 좋을것이다.
kubeadm을 이용해 구축했다면 Static Pod이므로, kubectl logs etcd-master
처럼 Pod명으로 kubectl을 돌리면 된다.
- kube-apiserver나 etcd가 죽었다면 kubectl은 작동하지 않을것이다. 이 경우
docker ps -a
를 해서 컨테이너명을 확인한 뒤docker logs 컨테이너ID
로 직접 컨테이너 로그를 찍어야 한다.- 컨테이너 런타임이 docker가 아닌 경우
crictl
(CRI-O),nerdctl
(containerd) 등을 사용하면 된다
- 컨테이너 런타임이 docker가 아닌 경우
Certificates API - 왜 사용하는가
CA라는 것은 근본적으로는 인증서와 Private Key 파일 쌍에 불과하다.
하지만 그 두 파일의 중요성은 말할 필요가 없다. CA 인증서와 키가 있으면 기본적으로 쿠버 클러스터에 대한 무제한적인 권한이 있는것과 다름없다
또 인증서는 만료기간이 있으며, 이것을 계속해서 rotating(기간연장발급 후 교체)해 줘야 정상적으로 사용할 수 있다 (옛날 공인인증서를 생각해보자)
- 그럼 이것을 어떻게 보관할 것인가?
- 또 인증서를 발행과 rotating을 위한 채널을 만들 수는 없을까?
지금까지는,
- 제로부터 구축하는 쿠버클러스터 구성에서는, 그냥 master node에 놓았다
- kubeadm으로 구축하더라도 마찬가지이다
Certificates API
- CSR Request? API로 쏘세요
- API Object인 CreateCertificateSigningRequest를 생성
- kubectl 명령어를 이용해 approve
실제 인증서 발행
- PK 발행:
openssl genrsa -out jane.key 2048
- CSR 생성:
openssl req -new -key jane.key -subj="/CN=jane" -out jane.csr
- 다른 관리자가 이 CSR를 받아, CreateSigningRequest Object를 생성:
apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: jane spec: expirationSeconds: 600 usages: - digital signature - key encipherment - server auth request: (base64 인코드된 CSR)
kubectl create -f jane-csr.yaml
kubectl get csr
로 생성된 CSR 요청을 볼 수 있음
kubectl certificate approve jane
으로 인증서 발급 요청을 허가kubectl get csr -o yaml
로 발행된 인증서를 볼 수 있음 (base64 인코드됨)
Under the hood
controller-manager에서 처리 (csr-approving
, csr-signing
)
Kubeadm으로 디플로이된 환경의 경우 /etc/kubernetes/manifests/kube-controller-manager.yaml
에서 CA Cert/Key 확인 가능
'콤퓨우터 > 필기: KodeKloud CKA 강의' 카테고리의 다른 글
159. API Groups (1) | 2024.05.17 |
---|---|
155. Kubeconfig와 context (0) | 2024.05.17 |
146. TLS in Kubernetes (0) | 2024.05.17 |
131. Backup and Restore (0) | 2024.05.17 |
122-127. OS Upgrades, Kubernetes Software Versions, Cluster Upgrade Process (0) | 2024.05.17 |