운영체제 (LNX,WIN)

Kubernetes CA(Certificate Authority) 인증서 만료 갱신

날으는물고기 2024. 9. 1. 00:43

Kubernetes 클러스터에서는 보안 통신을 위해 CA 인증서를 사용합니다. CA 인증서의 유효기간이 만료되기 전에 갱신하는 것은 클러스터의 안정성과 보안을 유지하는 데 매우 중요합니다. CA 인증서 갱신 관리와 관련하여 다음의 내용을 설명드립니다.

CA 인증서 개요

CA(Certificate Authority) 인증서는 클러스터 구성 요소 간의 보안 통신을 보장하는 SSL/TLS 인증서입니다. Kubernetes는 각 구성 요소(api-server, kubelet 등) 간의 통신을 암호화하기 위해 자체 서명된 인증서를 사용하거나 외부 CA에서 발급받은 인증서를 사용할 수 있습니다.

CA 인증서 갱신이 필요한 이유

  1. 보안 유지: 인증서 만료 시 보안 통신이 중단될 수 있습니다.
  2. 클러스터 안정성: 만료된 인증서는 클러스터 구성 요소 간의 통신을 방해하여 클러스터의 정상적인 운영에 지장을 줄 수 있습니다.
  3. 규정 준수: 보안 규정을 준수하기 위해 주기적인 갱신이 필요할 수 있습니다.

CA 인증서 갱신 절차

1. 현재 인증서 상태 확인

현재 인증서의 유효 기간을 확인하여 만료 날짜를 파악합니다. 이는 클러스터 내 각 구성 요소에서 사용할 수 있는 kubectl 명령어로 확인할 수 있습니다.

kubectl get secrets -n kube-system | grep -E 'kubeadm-certs|ca'

2. 새로운 인증서 생성

새로운 CA 인증서를 생성합니다. 이는 kubeadm 도구를 사용하여 쉽게 처리할 수 있습니다.

kubeadm init phase certs all --config kubeadm-config.yaml

3. 구성 요소 업데이트

새로 생성된 CA 인증서를 클러스터의 각 구성 요소에 적용합니다. 이는 각 노드에서 필요한 구성 파일을 업데이트하여 수행합니다.

  • API Server: /etc/kubernetes/pki/apiserver.crt, /etc/kubernetes/pki/apiserver.key
  • Controller Manager: /etc/kubernetes/pki/controller-manager.crt, /etc/kubernetes/pki/controller-manager.key
  • Scheduler: /etc/kubernetes/pki/scheduler.crt, /etc/kubernetes/pki/scheduler.key
  • Kubelet: /var/lib/kubelet/pki/kubelet-client-current.pem

4. 구성 요소 재시작

새로운 인증서를 적용한 후 각 구성 요소를 재시작합니다.

systemctl restart kubelet

5. 인증서 유효성 검증

모든 구성 요소가 새로운 인증서를 사용하여 정상적으로 통신하는지 확인합니다.

kubectl get nodes
kubectl get pods --all-namespaces

Kubernetes (8) - Automatic TLS Certificates signed by Let's Encrypt

CA 인증서 갱신 작업을 자동화하고 모니터링하기 위해 다음과 같은 도구를 사용할 수 있습니다.

  1. osquery와 Wazuh를 활용한 모니터링: 인증서 만료 날짜를 주기적으로 확인하고 만료 임박 시 알림을 받도록 설정합니다.
  2. n8n을 활용한 자동화: 인증서 갱신 절차를 자동화하는 워크플로를 설정하여 인증서 만료 시 자동으로 갱신 작업을 수행합니다.
  3. CI/CD 파이프라인 통합: 인증서 갱신 작업을 CI/CD 파이프라인에 통합하여 정기적으로 갱신 및 검증을 수행합니다.

이 절차들을 통해 Kubernetes 클러스터의 CA 인증서를 효율적으로 관리하고, 보안성과 안정성을 유지할 수 있습니다. Minikube로 구성된 Kubernetes 클러스터에서도 CA 인증서 관리가 중요합니다. Minikube는 기본적으로 자체 서명된 인증서를 사용합니다. 이 인증서의 유효 기간과 갱신 방법에 대해 설명드리겠습니다.

Minikube 인증서 유효 기간

Minikube는 기본적으로 1년 동안 유효한 자체 서명된 인증서를 생성합니다. 이 인증서가 만료되면 클러스터 내의 보안 통신에 문제가 발생할 수 있습니다.

인증서 유효 기간 확인

Minikube에서 생성된 인증서의 유효 기간을 확인합니다.

  1. Minikube 클러스터 시작
    minikube start
  2. 인증서 파일 확인
    인증서 파일은 Minikube 클러스터 내부의 /var/lib/minikube/certs 디렉토리에 저장되어 있습니다. 이를 로컬로 복사해서 유효 기간을 확인할 수 있습니다.
    minikube ssh -- cat /var/lib/minikube/certs/ca.crt > ca.crt
  3. OpenSSL을 사용하여 인증서 유효 기간 확인
    openssl x509 -in ca.crt -noout -dates

인증서 갱신

Minikube 인증서를 갱신하려면 클러스터를 재생성해야 합니다. Minikube는 클러스터를 삭제하고 다시 생성할 때 새로운 인증서를 발급합니다.

  1. 현재 클러스터 삭제
    minikube delete
  2. 새로운 클러스터 생성
    minikube start

갱신하지 않을 경우 영향

만료된 인증서를 갱신하지 않으면 다음과 같은 문제가 발생할 수 있습니다.

  1. 보안 통신 중단: 클러스터 내 구성 요소 간의 보안 통신이 중단되어 클러스터가 제대로 동작하지 않을 수 있습니다.
  2. API 서버 접근 불가: API 서버에 접근할 수 없게 되어 kubectl 명령어를 사용할 수 없게 됩니다.
  3. Pod 및 서비스 영향: 인증서가 만료되면 새로운 Pod를 생성하거나 기존 서비스를 관리하는 데 문제가 발생할 수 있습니다.

따라서 인증서 갱신은 클러스터의 원활한 운영을 위해 필수적입니다.

  • 인증서 유효 기간: 기본적으로 1년
  • 유효 기간 확인 방법: OpenSSL을 사용하여 확인
  • 인증서 갱신 방법: Minikube 클러스터 재생성
  • 갱신하지 않을 경우: 보안 통신 중단, API 서버 접근 불가, 서비스 관리 불가

위 정보를 참고하여 Minikube 클러스터의 인증서 유효 기간을 주기적으로 확인하고 갱신 작업을 수행하시기 바랍니다.

Minikube에서 클러스터를 삭제하지 않고 인증서만 갱신하는 방법은 기본적으로 제공되지 않습니다. 그러나 수동으로 인증서를 갱신하고 적용하는 방법을 통해 이를 달성할 수 있습니다. 다음은 Minikube 인증서를 갱신하는 방법에 대한 단계별 설명입니다.

1. Minikube 클러스터 시작 및 상태 확인

Minikube 클러스터가 실행 중인지 확인합니다.

minikube start
minikube status

2. 현재 인증서 백업

현재 사용 중인 인증서를 백업합니다.

minikube ssh -- sudo cp -r /var/lib/minikube/certs /var/lib/minikube/certs.bak

3. 새로운 인증서 생성

새로운 인증서를 생성합니다. OpenSSL을 사용하여 CA 인증서와 서버 인증서를 생성합니다.

CA 인증서 생성

openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=minikube-ca"

서버 인증서 생성

서버 인증서를 생성하려면 먼저 서버 키를 생성한 다음 CSR(Certificate Signing Request)을 생성하고, CA 인증서를 사용하여 서명합니다.

openssl genpkey -algorithm RSA -out apiserver.key -pkeyopt rsa_keygen_bits:2048
openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=minikube-apiserver"
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver.crt -days 365 -sha256

4. 새로운 인증서를 Minikube에 적용

새로 생성한 인증서를 Minikube 클러스터에 업로드합니다.

minikube ssh -- "sudo cp /var/lib/minikube/certs/apiserver.crt /var/lib/minikube/certs.bak/apiserver.crt"
minikube ssh -- "sudo cp /var/lib/minikube/certs/apiserver.key /var/lib/minikube/certs.bak/apiserver.key"
minikube ssh -- "sudo cp /var/lib/minikube/certs/ca.crt /var/lib/minikube/certs.bak/ca.crt"
minikube ssh -- "sudo cp /var/lib/minikube/certs/ca.key /var/lib/minikube/certs.bak/ca.key"

5. Kubernetes 구성 요소 재시작

인증서를 적용한 후 Kubernetes 구성 요소를 재시작합니다.

minikube ssh -- "sudo systemctl restart kubelet"

6. 정상 동작 확인

클러스터가 정상적으로 동작하는지 확인합니다.

kubectl get nodes
kubectl get pods --all-namespaces

위 단계들을 통해 Minikube 클러스터에서 인증서를 갱신하고 적용할 수 있습니다. 이 방법은 수동 작업이 많이 포함되어 있어 실제 운영 환경에서는 Minikube 클러스터를 재생성하는 방법을 권장합니다. 그러나 테스트나 개발 환경에서 인증서 만료 문제를 해결하는 데 유용할 수 있습니다.

728x90