[CKS] 1-8. TLS Certificates

안정적인 쿠버네티스 운영을 위해 인증서 관리와 로그 분석은 보안을 강화하고 문제를 신속하게 해결하는 방법을 알아봅니다.

[CKS] 1-8. TLS Certificates
Photo by Phil Shaw / Unsplash

개요

기존 인증서를 확인하는 방법을 확인하고 인증서에 대한 헬스 체크를 수행하여 관리하는 방법을 살펴봅니다.

인증서 관리

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 표를 구성하는 방식입니다. 지속적인 인증서 관리 및 감사에 매우 유용할 수 있습니다.

Notion Image

Hands-on LAB

kubernetes 설정 파일은 /etc/kubernetes에 저장됩니다.

cd /etc/kubernetes

클라이언트는 연결하고자하는 서버가 제시하는 인증서가 신뢰할 수 있는지 확인하기 위해서 서버의 인증서를 가지고 있어야한다.

Reference