Kubernetes/Trouble Shooting

🛠️ K8S Trouble Shooting : TLS 및 인증서 문제 해결하기

ygtoken 2025. 3. 2. 20:15
728x90

 

Kubernetes에서 보안 통신을 위해 TLS 및 인증서를 사용합니다.

하지만 잘못된 인증서, 만료된 인증서, CA 신뢰 문제 등의 이유로 TLS 관련 오류가 발생할 수 있습니다.

이 글에서는 Kubernetes 환경에서 발생할 수 있는 대표적인 TLS 및 인증서 문제 5가지를 정리하고, 각각의 원인과 해결 방법을 설명합니다. 🚀

 


 

1️⃣ “unable to connect to server: x509: certificate signed by unknown authority”

 

🔎 오류 설명

 

이 오류는 클라이언트가 API 서버의 인증서를 신뢰하지 않을 때 발생합니다.

보통 CA 인증서가 잘못되었거나, 클러스터의 kubeconfig 파일이 올바르게 설정되지 않은 경우입니다.

 

🔧 해결 방법

 

1) 현재 클러스터의 인증서 확인

 

API 서버의 인증서 정보를 확인합니다..

kubectl config view --raw | grep certificate-authority

 

2) CA 인증서가 올바르게 설치되었는지 확인

 

CA 인증서가 손상되었거나 누락되었는지 확인합니다.

ls -l /etc/kubernetes/pki/ca.crt
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text

 

3) 클러스터의 kubeconfig 업데이트

 

CA 인증서를 다시 설정하여 kubeconfig를 업데이트합니다..

kubectl config set-cluster <cluster-name> --certificate-authority=/etc/kubernetes/pki/ca.crt

 


 

2️⃣ “certificate has expired or is not yet valid”

 

🔎 오류 설명

 

이 오류는 Kubernetes에서 사용하는 인증서가 만료되었거나, 시스템 시간이 올바르지 않을 때 발생합니다.

 

🔧 해결 방법

 

1) 인증서 만료 날짜 확인

 

현재 사용 중인 인증서의 만료일을 확인합니다.

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -enddate

 

2) 시스템 시간 동기화

 

노드의 시스템 시간이 올바르게 설정되었는지 확인합니다.

date
timedatectl status

 

시간이 맞지 않다면 NTP 서버를 사용하여 동기화합니다.

sudo timedatectl set-ntp on

 

3) 만료된 인증서 갱신

 

만약 인증서가 만료되었다면, Kubernetes의 인증서를 갱신합니다.

kubeadm certs renew all
systemctl restart kubelet

 

갱신된 인증서를 다시 확인합니다.

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -enddate

 


 

3️⃣ “tls: bad certificate”

 

🔎 오류 설명

 

이 오류는 클라이언트가 제공한 인증서가 유효하지 않거나, 서버에서 허용되지 않는 인증서를 사용할 때 발생합니다.

 

🔧 해결 방법

 

1) 클라이언트 인증서 확인

 

클라이언트 인증서가 올바르게 설정되었는지 확인합니다.

kubectl config view --raw | grep client-certificate

 

인증서가 손상되었거나 누락되었을 경우, 다시 설정해야 합니다.

openssl x509 -in ~/.kube/client.crt -noout -text

 

2) 클라이언트 인증서 갱신

 

클라이언트 인증서를 새로 발급하려면 다음을 실행합니다.

kubeadm certs renew apiserver-kubelet-client

 

3) API 서버의 인증서 허용 설정 확인

 

API 서버에서 클라이언트 인증서를 신뢰하는지 확인합니다.

kubectl get csr

 

인증서를 승인하려면 다음 명령어를 사용합니다.

kubectl certificate approve <csr-name>

 


 

4️⃣ “tls: failed to verify certificate: x509: certificate is valid for X, not Y”

 

🔎 오류 설명

 

이 오류는 서버의 인증서가 특정 도메인 또는 IP 주소에 대해 유효하지 않을 때 발생합니다.

즉, API 서버의 인증서가 기대하는 호스트 이름과 다를 경우 나타납니다.

 

🔧 해결 방법

 

1) API 서버의 SAN(Subject Alternative Name) 확인

 

API 서버 인증서의 유효한 도메인을 확인합니다.

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep "DNS:"

2) kube-apiserver 설정 확인

 

/etc/kubernetes/manifests/kube-apiserver.yaml 파일을 열어 --apiserver-cert-extra-sans 옵션을 확인합니다.

spec:
  containers:
    - name: kube-apiserver
      command:
        - --apiserver-cert-extra-sans=<your-domain>

 

3) 인증서 갱신

 

API 서버의 SAN 정보를 변경한 후 인증서를 다시 생성합니다.

kubeadm certs renew apiserver
systemctl restart kubelet

 


 

5️⃣ “x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error")”

 

🔎 오류 설명

 

이 오류는 클라이언트 또는 서버에서 잘못된 CA 인증서를 사용할 때 발생합니다.

 

🔧 해결 방법

 

1) 사용 중인 CA 인증서 확인

 

CA 인증서가 올바르게 설정되었는지 확인합니다.

openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text

 

2) 클라이언트가 올바른 CA 인증서를 사용하고 있는지 확인

 

kubeconfig 파일에서 참조하는 CA 인증서를 확인합니다.

kubectl config view --raw | grep certificate-authority

 

3) 잘못된 인증서 교체

 

올바른 CA 인증서로 kubeconfig를 업데이트합니다.

kubectl config set-cluster <cluster-name> --certificate-authority=/etc/kubernetes/pki/ca.crt

 

4) CA 인증서를 수동으로 추가

 

만약 인증서가 시스템에서 신뢰되지 않는다면, 수동으로 추가합니다.

sudo cp /etc/kubernetes/pki/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

 


 

🎯 마무리

 

이 글에서는 Kubernetes에서 자주 발생하는 TLS 및 인증서 문제 5가지와 그 해결 방법을 다뤘습니다.

 

✔️ API 서버 인증서 신뢰 오류 (unable to connect to server: x509: certificate signed by unknown authority)

✔️ 만료된 인증서 오류 (certificate has expired or is not yet valid)

✔️ 잘못된 클라이언트 인증서 오류 (tls: bad certificate)

✔️ SAN 불일치 오류 (tls: failed to verify certificate: x509: certificate is valid for X, not Y)

✔️ 잘못된 CA 인증서 오류 (x509: certificate signed by unknown authority - crypto/rsa: verification error)

 

만약 위 해결 방법으로도 문제가 해결되지 않는다면,

kubectl config view, openssl x509 -in .crt -noout -text, kubeadm certs renew 명령어 등을 활용하여 추가로 분석해보는 것이 좋습니다.

 

 

728x90