.kubeconfig가 뭐고, 없으면 무슨 일이 일어날까?
결론
✅ .kubeconfig파일이 없으면 k8s API에 접근이 안됨
✅ .kubeconfig파일이 없어도 클러스터 join 가능
활용
❍ 워커 노드에서도 kubectl 명령어를 사용하고 싶다
→ 마스터 노드의 config 파일 복사해 붙여넣기
❍ 외부 사용자가 kubectl 명령어를 사용하고 싶다 / k8s API에 접근하고 싶다
- (go) client-go 참고
개요
프로젝트를 위해 여느 때와 같이 쿠버네티스 클러스터를 생성했다.
kubeconfig 파일이
마스터 노드의 경우에는 클러스터 생성 시 자동으로 생성되고,
워커 노드의 경우에는 그렇지 않았던 것이 생각이 났다.
그래서 kubeconfig파일이 뭐고, 없으면 큰일이 나는지가 궁금해 알아보기 시작했다.
본문
kubeconfig 파일?
- 쿠버네티스 클러스터와 연결(통신)하기 위한 인증 정보가 담겨 있는 파일
- 하나 이상의 클러스터 정보 명시 가능
구성요소
1) clusters
접속할 서버 정보 (host, ip, port)
2) contexts
user-cluster 정보를 합쳐, 어떤 user가 어떤 cluster에 접근할 지를 명시
(그림의 경우, kubernetes-admin이라는 user를 kubernetes라는 cluster을 연결)
3) users
- 접속할 유저의 계정 정보
(인증을 위한 인증서(client-certificate-data), 키(client-key-data))
- 실제 키값은 /etc/kubernetes/pki의 apiserver.crt에 존재
인증서와 관련된 더 많은 정보는 https://velog.io/@borab/kubernetes-PKI-인증서 이 블로그 참고
kubeconfig 파일 위치
1. $HOME/.kube/config
2. 사용자 직접 지정
기본 위치는 $HOME/.kube/config 이다. (클러스터 구축 시 생성)
kubeconfig 관련 명령어
참고: kubectx 명령어 툴을 이용하기도 한다고 한다
참고: 기본적으로 만들어지는 kubeconfig파일을 수정 저장하고, context를 전환할 수 있다.
현재 설정된 kubeconfig 파일 확인
$ kubectl config view
context 리스트 확인
$ kubectl config get-contexts
context 변경 (명령어 이후부터 example 계정의 cluster-2 클러스터로 접근)
$ kubectl config use-context example@cluster-2
kubeconfig가 없으면 일어나는 일
정상적으로 pod 생성 가능하며,
마스터 노드에서 kubectl get nodes 시 config파일이 없는 노드도 running으로 잘 조회된다.
kubeconfig파일이 없다고 해서 쿠버네티스 리소스(pod, ...)를 생성 불가한 게 아니라,
그저 외부 사용자가 클러스터에 접속이 안되는 것이다 !