앞선 글에서 인증서 만료 후 복구가 얼마나 번거로운지 확인했습니다. 최선의 전략은 만료되기 전에 미리 대응하는 것입니다.
이 글에서는 인증서 만료일을 확인하고, 자동으로 모니터링하며, 사전에 갱신하는 방법을 알아보겠습니다.
인증서 만료일 확인 방법
방법 1: minikube SSH로 직접 확인
가장 정확한 방법입니다. Minikube 내부의 인증서 파일을 직접 확인합니다.
# minikube SSH 접속
minikube ssh
# API Server 인증서 만료일 확인
openssl x509 -in /var/lib/minikube/certs/apiserver.crt -noout -dates
출력 예시:
notBefore=Jan 1 00:00:00 2024 GMT
notAfter=Jan 1 00:00:00 2025 GMT
notAfter 날짜가 만료일입니다.
주요 인증서 파일 위치
# minikube SSH 접속 상태에서
ls -la /var/lib/minikube/certs/
| 파일명 | 용도 |
|---|---|
| apiserver.crt | API Server 인증서 |
| apiserver-kubelet-client.crt | API Server → Kubelet 통신 |
| front-proxy-client.crt | 프록시 클라이언트 |
| etcd/server.crt | etcd 서버 인증서 |
모든 인증서 만료일 한 번에 확인
# minikube SSH 접속 상태에서
for cert in /var/lib/minikube/certs/*.crt; do
echo "=== $cert ==="
openssl x509 -in "$cert" -noout -enddate 2>/dev/null || echo "읽기 불가"
done
방법 2: kubectl로 간접 확인
kubectl이 동작하는 상태라면 API 서버 상태를 확인할 수 있습니다.
# API 서버 상태 및 인증서 정보 확인 (verbose 모드)
kubectl get --raw /healthz -v=6 2>&1 | head -20
하지만 이 방법으로는 정확한 만료일을 알기 어려우므로, SSH 접속 방법을 권장합니다.
인증서 갱신 방법
주기적 stop/start
Minikube는 시작할 때 인증서 상태를 확인하고, 필요하면 갱신을 시도합니다.
# 클러스터 중지
minikube stop
# 클러스터 시작 (인증서 체크/갱신)
minikube start
권장 주기: 월 1회 또는 분기 1회
만료 30일 전에 한 번 수행해두면 대부분의 문제를 예방할 수 있습니다.
인증서 상태 확인 후 조건부 재시작
#!/bin/bash
# minikube-cert-check.sh
# 인증서 만료일 확인
EXPIRE_DATE=$(minikube ssh "openssl x509 -in /var/lib/minikube/certs/apiserver.crt -noout -enddate 2>/dev/null" | cut -d= -f2)
if [ -z "$EXPIRE_DATE" ]; then
echo "인증서 확인 실패"
exit 1
fi
# 만료일을 epoch로 변환
EXPIRE_EPOCH=$(date -d "$EXPIRE_DATE" +%s 2>/dev/null)
NOW_EPOCH=$(date +%s)
# 남은 일수 계산
DAYS_LEFT=$(( ($EXPIRE_EPOCH - $NOW_EPOCH) / 86400 ))
echo "인증서 만료까지 ${DAYS_LEFT}일 남음"
# 30일 이내면 재시작
if [ $DAYS_LEFT -lt 30 ]; then
echo "인증서 갱신을 위해 minikube 재시작..."
minikube stop
minikube start
echo "재시작 완료"
fi
자동 백업 크론잡 설정
인증서 만료와 관계없이 정기적인 백업은 필수입니다.
백업 스크립트 작성
#!/bin/bash
# /home/user/scripts/minikube-backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR=~/minikube-backup/$DATE
NAMESPACE="default"
# 디렉토리 생성
mkdir -p $BACKUP_DIR
# kubectl 동작 확인
if ! kubectl cluster-info &>/dev/null; then
echo "[$DATE] kubectl 동작 불가 - 백업 실패" >> ~/minikube-backup/backup.log
exit 1
fi
# DB 백업 (PostgreSQL 예시)
DB_POD=$(kubectl get pods -n $NAMESPACE -l app=postgres -o jsonpath='{.items[0].metadata.name}' 2>/dev/null)
if [ -n "$DB_POD" ]; then
kubectl exec $DB_POD -n $NAMESPACE -- pg_dumpall -U postgres > $BACKUP_DIR/db.sql 2>/dev/null
fi
# Secret/ConfigMap 백업
kubectl get secrets -n $NAMESPACE -o yaml > $BACKUP_DIR/secrets.yaml 2>/dev/null
kubectl get configmaps -n $NAMESPACE -o yaml > $BACKUP_DIR/configmaps.yaml 2>/dev/null
# 전체 리소스 백업
kubectl get all,pvc,ingress -n $NAMESPACE -o yaml > $BACKUP_DIR/resources.yaml 2>/dev/null
# 오래된 백업 정리 (30일 이상)
find ~/minikube-backup -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \; 2>/dev/null
echo "[$DATE] 백업 완료: $BACKUP_DIR" >> ~/minikube-backup/backup.log
크론잡 등록
# 스크립트 실행 권한 부여
chmod +x /home/user/scripts/minikube-backup.sh
# 크론탭 편집
crontab -e
크론탭에 추가:
# 매일 새벽 2시에 백업 실행
0 2 * * * /home/user/scripts/minikube-backup.sh
# 또는 매주 일요일 새벽 3시에 실행
0 3 * * 0 /home/user/scripts/minikube-backup.sh
만료일 알림 자동화
인증서 만료가 임박하면 알림을 받도록 설정합니다.
기본 알림 스크립트
#!/bin/bash
# /home/user/scripts/minikube-cert-alert.sh
# 인증서 만료일 확인
EXPIRE_DATE=$(minikube ssh "openssl x509 -in /var/lib/minikube/certs/apiserver.crt -noout -enddate 2>/dev/null" | cut -d= -f2)
if [ -z "$EXPIRE_DATE" ]; then
echo "인증서 확인 실패 - minikube 상태 확인 필요"
exit 1
fi
# 만료일 계산
EXPIRE_EPOCH=$(date -d "$EXPIRE_DATE" +%s 2>/dev/null)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRE_EPOCH - $NOW_EPOCH) / 86400 ))
# 30일 이내면 경고
if [ $DAYS_LEFT -lt 30 ]; then
echo "⚠️ Minikube 인증서 만료 ${DAYS_LEFT}일 전!"
echo "만료일: $EXPIRE_DATE"
echo "조치: minikube stop && minikube start 실행 권장"
fi
# 7일 이내면 긴급 경고
if [ $DAYS_LEFT -lt 7 ]; then
echo "🚨 긴급! 인증서 만료 ${DAYS_LEFT}일 전!"
fi
Slack 알림 연동
Slack Webhook을 사용하면 팀 채널로 알림을 보낼 수 있습니다.
#!/bin/bash
# /home/user/scripts/minikube-cert-alert-slack.sh
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
# 인증서 만료일 확인
EXPIRE_DATE=$(minikube ssh "openssl x509 -in /var/lib/minikube/certs/apiserver.crt -noout -enddate 2>/dev/null" | cut -d= -f2)
if [ -z "$EXPIRE_DATE" ]; then
exit 1
fi
EXPIRE_EPOCH=$(date -d "$EXPIRE_DATE" +%s 2>/dev/null)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRE_EPOCH - $NOW_EPOCH) / 86400 ))
# 30일 이내면 Slack 알림
if [ $DAYS_LEFT -lt 30 ]; then
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"⚠️ Minikube 인증서 만료 ${DAYS_LEFT}일 전입니다. 갱신이 필요합니다.\"}" \
$SLACK_WEBHOOK_URL
fi
Telegram 알림 연동
Telegram Bot을 통해 알림을 받을 수도 있습니다.
#!/bin/bash
# /home/user/scripts/minikube-cert-alert-telegram.sh
TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN"
TELEGRAM_CHAT_ID="YOUR_CHAT_ID"
# 인증서 만료일 확인
EXPIRE_DATE=$(minikube ssh "openssl x509 -in /var/lib/minikube/certs/apiserver.crt -noout -enddate 2>/dev/null" | cut -d= -f2)
if [ -z "$EXPIRE_DATE" ]; then
exit 1
fi
EXPIRE_EPOCH=$(date -d "$EXPIRE_DATE" +%s 2>/dev/null)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRE_EPOCH - $NOW_EPOCH) / 86400 ))
# 30일 이내면 Telegram 알림
if [ $DAYS_LEFT -lt 30 ]; then
MESSAGE="⚠️ Minikube 인증서 만료 ${DAYS_LEFT}일 전
만료일: ${EXPIRE_DATE}
조치: minikube stop && minikube start"
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="${MESSAGE}"
fi
크론잡으로 알림 스케줄링
# 크론탭에 추가
crontab -e
# 매일 오전 9시에 인증서 상태 확인
0 9 * * * /home/user/scripts/minikube-cert-alert-slack.sh
통합 모니터링 스크립트
백업과 알림을 하나의 스크립트로 통합할 수 있습니다.
#!/bin/bash
# /home/user/scripts/minikube-monitor.sh
DATE=$(date +%Y%m%d)
LOG_FILE=~/minikube-backup/monitor.log
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 1. Minikube 상태 확인
if ! minikube status &>/dev/null; then
log "ERROR: minikube가 실행 중이 아님"
exit 1
fi
# 2. 인증서 만료일 확인
EXPIRE_DATE=$(minikube ssh "openssl x509 -in /var/lib/minikube/certs/apiserver.crt -noout -enddate 2>/dev/null" | cut -d= -f2)
EXPIRE_EPOCH=$(date -d "$EXPIRE_DATE" +%s 2>/dev/null)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRE_EPOCH - $NOW_EPOCH) / 86400 ))
log "인증서 만료까지 ${DAYS_LEFT}일"
# 3. 30일 이내면 알림 + 자동 갱신
if [ $DAYS_LEFT -lt 30 ]; then
log "WARNING: 인증서 만료 임박, 갱신 시도"
# 먼저 백업
/home/user/scripts/minikube-backup.sh
# 갱신 시도
minikube stop
minikube start
log "갱신 시도 완료"
fi
# 4. kubectl 동작 확인 및 백업
if kubectl cluster-info &>/dev/null; then
/home/user/scripts/minikube-backup.sh
log "정기 백업 완료"
else
log "ERROR: kubectl 동작 불가"
fi
예방 체크리스트
정기적으로 확인해야 할 항목들입니다.
□ 인증서 만료일 확인 (월 1회)
□ 백업 스크립트 정상 동작 확인
□ 백업 파일 존재 및 크기 확인
□ minikube stop/start 수행 (분기 1회)
□ 알림 시스템 테스트
간단한 상태 확인 명령어 모음
# Minikube 상태 확인
minikube status
# 클러스터 정보 확인
kubectl cluster-info
# 인증서 만료일 확인
minikube ssh "openssl x509 -in /var/lib/minikube/certs/apiserver.crt -noout -enddate"
# 최근 백업 확인
ls -lt ~/minikube-backup/ | head -5
마무리
인증서 만료는 예방이 최선입니다. 이 글에서 소개한 방법들을 활용하면 갑작스러운 인증서 만료로 인한 데이터 손실을 예방할 수 있습니다.
핵심 포인트는 세 가지입니다.
- 정기적인 만료일 확인: 월 1회 이상
- 자동 백업 설정: 크론잡으로 일일/주간 백업
- 알림 자동화: 만료 30일 전 알림 수신
다음 편에서는 Minikube와 K3s를 운영 관점에서 비교하고, 왜 프로덕션에 가까운 환경에서는 K3s가 더 나은 선택인지 알아보겠습니다.