k8s metrics server x.509 인증서 에러 원인과 해결방법

쿠버네티스를 사용하다 보면, x509 인증서 에러의 대한 이야기를 많이 보게 됩니다. 이 에러의 원인과 해결 방법에 대해서 알아보도록 하겠습니다.

01. x.509 인증서 에러가 도대체 뭐야 ?

01) 인증서는 어떻게 탄생했을까 ?

원래 컴퓨터와 컴퓨터간의 통신에서는 평문을 통한 전송 만을 수행하였습니다. 그 과정에서 외부에 감청 및 변조된 패킷을 보내는 일들이 발생하기 시작했습니다. 이를 방지하기 위해서 암호화 하여 통신하도록 계획 하였습니다.

암호화의 기본은 데이터를 보내는 측에서는 암호화를 받는 측에서는 복호화가 가능해야 합니다. 일반적으로, 암호화 복호화 키는 동일하지 않은 비대칭 키를 사용해서 진행하게 되는데, 우리가 B 와 통신하기 위해서는 B에게 어떤 키를 사용할지 미리 알고 있어야 안전한 통신이 되는지 확인할 수 있게 되었습니다.

그래서, 과거에는 암호화 키(공용키) 를 공개 하여, 이 키로 암호화 해주세요 라고 외쳤지만, 한번 더 보안을 신경쓰는 경우가 생기기 시작하였습니다.

내가 B 서버 인데, 옆에 있던 C가 마치 B 인 마냥 내가 B 이니 이 키로 암호화 해주세요 하고 공개 해버린 것 입니다.
이 문제를 해결하기 위해서, IT 기관들은 정말 믿을수 있는 최상위 인증 기관(ROOT-CA)을 선정하여, 암호화키를 전달할때 암호화 키만 전달하는 것이 아닌, 암호화 키 + 어떤 서버의 것이다 + 인증기관의 대한 정보 3가지를 합쳐서, 인증서를 발급해주기 시작하였고, 이를 통해 서버를 속일 수 없게 만들었습니다.

02) 그래서, 인증서 에러의 원인은 ?

쿠버네티스는 보안 통신(TLS)을 위해 인증서를 통해 데이터 통신을 하고 있습니다. 이를 위해 인증서를 사용하고 있지만, 믿을 만한 인증기관인 ROOT-CA가 아닌 자신이 작성한 인증서를 통해 데이터 통신을 하고 있습니다.

그렇기에, 서버에 접근하려는 대상은 인증서 자체를 믿을수 없기에 에러를 발생하게 되었습니다.

02. 해결 방법

01) 인증기관의 인증서가 아니더라도 허용하는 방법 (–insecure)

아래 방식은 새롭게 등록하는 방식으로 진행 합니다.
동작하는 도중 EDIT 을 통해서 진행해도 되나, 파일에 기록되지 않는 단점이 있어 삭제 후 파일을 수정하여 배포합니다.

(01) 기존의 메트릭 서버 정보를 삭제 합니다.

(02) 배포되는 yml 파일의 내용 중 (–insecure-tls) 를 추가 합니다.

배포 파일을 수정 모드로 열기 합니다.

vim components.yml

키워드 찾기 : /[찾을 키워드] -> /args

...
spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --kubelet-insecure-tls (추가)
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
...

수정 파일을 배포 합니다.

kubectl apply -f components.yml

이후 정상적으로 운영 되는지 확인 합니다.

02) 다른 방법

인증기관 정보에 내 서버 정보 추가하는 방법도 있습니다. 다만, 작업 자체가 조금 긴 편이라. 다음 포스팅에 시간이 된다면 작성해 보겠습니다.

2 thoughts on “k8s metrics server x.509 인증서 에러 원인과 해결방법”

Leave a Comment