Prometheus Target 중 kube-proxy unhealthy 상태 고치기
개요
아래 사진과 같이 10249번 포트를 사용하는 kube-proxy에 대해서 unhealthy 상태로 등록된 것을 확인하였고 문제를 확인하고자 각 워커노드에 접속하여 10249 포트 바인딩을 확인해보니 모두 127.0.0.1로 바인딩되어 외부에서 접속하지 못하여 unhealthy 상태가 되었다고 판단했다.
kube-proxy 파드는 데몬셋으로 각 노드에 에이전트로 등록되어 있으므로 이 데몬셋 설정 중에서 kube-proxy 라는 컨피그맵이 볼륨 마운트되어 있는 것을 확인하였다.
$ k get daemonsets.apps -n kube-system kube-proxy -o yaml
...(중략)
volumes:
# 컨피그맵 등록 확인
- configMap:
defaultMode: 420
name: kube-proxy
name: kube-proxy
- hostPath:
path: /run/xtables.lock
type: FileOrCreate
name: xtables-lock
- hostPath:
path: /lib/modules
type: ""
name: lib-modules
# 10249 포트 바인딩 확인
$ k get cm/kube-proxy -n kube-system -o yaml | grep "10249"
metricsBindAddress: 127.0.0.1:10249
# 외부에서 접근이 가능하도록 수정
$ k edit cm/kube-proxy -n kube-system
metricsBindAddress: 0.0.0.0:10249
# kube-proxy 파드 제거
# 데몬셋으로 등록된 kube-proxy의 파드를 제거할 경우 다시 재생성된다.
$ k delete pod -l k8s-app=kube-proxy -n kube-system
다시 Helm 차트를 설치하여 프로메테우스의 타겟을 확인해보니 아래와 같이 up 상태로 등록된 것을 확인할 수 있었다. 프로메테우스가 kube-proxy의 메트릭을 수집하기 위해서는 kube-proxy가 수집한 메트릭이 바인딩된 주소로 접근할 수 있어야 하고 이때 바인딩된 주소가 로컬주소로 잡혀있을 경우 접근이 불가능하여 unhealthy 상태로 등록된다.