클라우드/쿠버네티스

.kubeconfig가 뭐고, 없으면 무슨 일이 일어날까?

KyuminKim 2024. 1. 17. 17:37

결론

 ✅ .kubeconfig파일이 없으면 k8s API에 접근이 안됨

 ✅ .kubeconfig파일이 없어도 클러스터 join 가능 


활용

워커 노드에서도 kubectl 명령어를 사용하고 싶다

   → 마스터 노드의 config 파일 복사해 붙여넣기

 

외부 사용자가 kubectl 명령어를 사용하고 싶다 / k8s API에 접근하고 싶다

   - (go) client-go 참고


개요 

프로젝트를 위해 여느 때와 같이 쿠버네티스 클러스터를 생성했다.

 

kubeconfig 파일이 

마스터 노드의 경우에는 클러스터 생성 시 자동으로 생성되고,

워커 노드의 경우에는 그렇지 않았던 것이 생각이 났다.

 

그래서 kubeconfig파일이 뭐고, 없으면 큰일이 나는지가 궁금해 알아보기 시작했다.


본문

kubeconfig 파일?

- 쿠버네티스 클러스터와 연결(통신)하기 위한 인증 정보가 담겨 있는 파일

- 하나 이상의 클러스터 정보 명시 가능

 

구성요소

1) clusters

접속할 서버 정보 (host, ip, port)

clusters 필드

2) contexts

user-cluster 정보를 합쳐, 어떤 user가 어떤 cluster에 접근할 지를 명시

(그림의 경우, kubernetes-admin이라는 user를 kubernetes라는 cluster을 연결)

contexts 필드

 

3) users

- 접속할 유저의 계정 정보

    (인증을 위한 인증서(client-certificate-data), (client-key-data))

- 실제 키값은 /etc/kubernetes/pki의 apiserver.crt에 존재 

users 필드

 

 

인증서와 관련된 더 많은 정보는 https://velog.io/@borab/kubernetes-PKI-인증서 이 블로그 참고 


kubeconfig 파일 위치

1. $HOME/.kube/config
2. 사용자 직접 지정

 

기본 위치는 $HOME/.kube/config 이다. (클러스터 구축 시 생성)

 

 


kubeconfig 관련 명령어

참고: kubectx 명령어 툴을 이용하기도 한다고 한다

참고: 기본적으로 만들어지는 kubeconfig파일을 수정 저장하고, context를 전환할 수 있다.

 

현재 설정된 kubeconfig 파일 확인

$ kubectl config view

kubectl config view 결과

 

 

 context 리스트 확인

$ kubectl config get-contexts

 

kubectl config get-contexts 결과

 

 

context 변경 (명령어 이후부터 example 계정의 cluster-2 클러스터로 접근)

$ kubectl config use-context example@cluster-2

 

 


kubeconfig가 없으면 일어나는 일

정상적으로 pod 생성 가능하며, 

마스터 노드에서 kubectl get nodes 시 config파일이 없는 노드도 running으로 잘 조회된다.

 

kubeconfig파일이 없다고 해서 쿠버네티스 리소스(pod, ...)를 생성 불가한 게 아니라,

그저 외부 사용자가 클러스터에 접속이 안되는 것이다 !