[CKS] 1-8. TLS Certificates
안정적인 쿠버네티스 운영을 위해 인증서 관리와 로그 분석은 보안을 강화하고 문제를 신속하게 해결하는 방법을 알아봅니다.
개요
기존 인증서를 확인하는 방법을 확인하고 인증서에 대한 헬스 체크를 수행하여 관리하는 방법을 살펴봅니다.
인증서 관리
kubeadm 같은 도구를 사용하는 경우 올바른 인증서를 찾는 방법을 확인합니다.
우선 api-server를 확인합니다.
모든 인증서 정보가 존재합니다.
cat /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- kube-apiserver
- --authorization-mode=Node,RBAC
- --advertise-address=172.17.0.32
- --allow-privileged=true
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --disable-admission-plugins=PersistentVolumeLabel
- --enable-bootstrap-token-auth=true
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
- --etcd-servers=https://127.0.0.1:2379
- --insecure-port=0
- --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
- --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
- --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
인증서를 디코딩하고 정보를 확인합니다.
- kube-apiserver의 경우 모든 대체 이름과 유효성 섹션을 통해 만료일을 확인해야합니다.
- Issuer를 통해 CA를 확인합니다.
- 올바른 발급자가 발급했는지, 인증서가 만료됐는지 아닌지가 중요합니다.
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
로그 확인
문제가 발생하면 서비스 로그를 검토하면 문제를 정확히 파악하는 데 도움이 될 수 있습니다. 클러스터 배포 방식에 따라 다음 방법 중 하나를 사용하세요.
Native OS
- 클러스터를 직접 처음부터 설정했다면, 서비스가 OS의 네이티브 서비스로 시작했다면 로그를 확인하고 운영 체제의 로깅 기능을 사용하여 서비스 로그를 확인합니다.
journalctl -u etcd.service -l
kubeadm
- 다양한 구성 요소들이 pod로 배포됩니다. 따라서 Pod의 로그를 확인할 수 있습니다.
- API server / etcd 다운시 kubectl이 동작하지 않지만 로그를 가져오기 위해 runtime interface를 활용해 가져올 수 있습니다.
docker ps -a
docker logs <CONTAINER_ID>
조직 인증서 관리를 위한 Excel 표를 구성하는 방식입니다. 지속적인 인증서 관리 및 감사에 매우 유용할 수 있습니다.

Hands-on LAB
kubernetes 설정 파일은 /etc/kubernetes에 저장됩니다.
cd /etc/kubernetes
클라이언트는 연결하고자하는 서버가 제시하는 인증서가 신뢰할 수 있는지 확인하기 위해서 서버의 인증서를 가지고 있어야한다.