[k8s] 메트릭 서버 설치 관련 트러블슈팅

sang yun Lee·2023년 11월 29일
0

k8s

목록 보기
13/21

이슈


나는 Pod 별 CPU 량을 확인하려 했다. 그래서 Metric server 를 설치하고 CPU 사용량을 확인하려 했으나 실패했다.

# 메트릭 서버 설치
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# kubectl top pod
error: Metrics API not available

간단한 해결방법


이 문제와 관련하여 찾아본 결과, metrics-server 의 pod 실행 옵션에
--kubelet-insecure-tls 를 추가하면 손쉽게 해결할 수 있다. (다만 production 환경에서 사용시에는 주의해야한다.)

$ kubectl -n kube-system  edit deployments.apps metrics-server

 containers:
   - args:
     - --cert-dir=/tmp
     ...
     - --kubelet-insecure-tls <- 추가하면 됨

# 정상 동작 확인
$ kubectl top pod
NAME                              CPU(cores)   MEMORY(bytes)   
coredns-5d78c9869d-7rsmp          5m           14Mi            
coredns-5d78c9869d-82j7n          4m           14Mi

원인


kubeadm 의 기본설정으로 설치하면 쿠버네티스의 인증서는 self-signed 이다. self-signed 인증서는 공인인증이 되지 않기 때문에 보안에 취약하여 해커(공격자)가 통신을 조작할 수 있는 여지가 있다. 그렇기에 metric server 는 기본적으로 self-signed 와의 통신은 하지 않는 것이 기본 설정이다. metric servermetric 정보를 얻기 위해 각각의 노드(kubelet)와 통신하는데 노드의 인증서가 self-signed 이기에 통신이 되지 않는 것이다.
따라서 두가지 방법으로 해결이 가능하다.

  • 첫번째 방법: metric server 의 보안설정 낮추기.
    self-signed 하고 통신이 가능하도록 설정하는 방법이다. 이는 위에서 공유한 것과 같이--kubelet-insecure-tls 을 추가함으로써 해결이 가능하다.
  • 다른 한가지 방법: 쿠버네티스 보안 설정 강화하기. 메트릭 서버와 통신할 때에 CA 로 인증된 인증서를 통해 통신함으로써 보안을 강화하는 방법이다. 이를 사용하려면 CA 에 인증된 인증서를 발급하는 과정이 필요하다. 이 과정에 대한 자세한 내용은 여기 링크 를 활용하면 좋다.

나의 경우 해커의 침입이 염려되지 않는 상황인지라 첫번째 방법인--kubelet-insecure-tls 로 해결을 하였다.

0개의 댓글