kubeconfig 파일은 k8s의 설정 파일로,
kubectl
명령어로 apiserver에 접근할 때 사용할 인증 정보를 담고있다.
이 쿠버네티스 설정(kubeconfig)은 크게 3가지 부분으로 구성되어 있다.
clusters
: 쿠버네티스 API 서버 정보(IP 또는 도메인)로, 여러 클러스터를 명시할 수 있다.users
: 쿠버네티스 API에 접속하기 위한 사용자 목록으로, 인증 방식에 따라 형태가 다를 수 있다.context
: user와 cluster 사이의 관계를 매핑한 것으로, 어떤 context를 사용하느냐에 따라 cluster와 user가 결정된다. context를 기반으로 “어떤 Cluster에 어떤 User가 인증을 통해 쿠버네티스를 사용한다.” 의미로 해석하면 된다.- context에는 여러 종류가 있을 수 있으며, 현재 사용하는 context를 current-context라 한다.
kubeconfig 파일의 위치
~/.kube/config
kubeconfig 파일 내용 확인
다음 명령어를 통해 파일 내용을 확인할 수 있다.
$ kubectl config view
apiVersion: v1
clusters: #쿠버네티스 클러스터 -> 여러개 가능
- cluster:
certificate-authority-data: DATA+OMITTED #CA인증서
server: https://127.0.0.1:6443 #요청할 서버 : apiserver의 주소
name: cluster.local
contexts:
- context:
cluster: cluster.local
user: kubernetes-admin
name: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local
kind: Config
preferences: {}
users: #사용자 -> 여려명 가능
- name: kubernetes-admin #계정
user:
client-certificate-data: REDACTED #클라이언트의 인증서(공개키)
client-key-data: REDACTED #개인키
/etc/kubernetes/pki
에 인증서와 키가 존재하며, kubectl
은 항상 ~/.kube/config
을 가장 먼저 찾는다.
위치가 홈 디렉토리가 아니라면 KUBECONFIG
환경 변수를 설정하거나,
--kubeconfig
옵션을 사용하여 다른 kubeconfig 파일을 사용할 수 있다.
예시
$ kubectl config view --kubeconfig=ny-kubeconfig
실제로 /.kube/config
파일만 있다면, 즉 서버의 위치만 알려준다면, 쿠버네티스 클러스터에 접근할 수 있다.
다음은 윈도우에 kubeconfig 파일을 추가하고 kube get nodes
명령을 실행한 결과이다.
PS C:\Users\USER> ls ~/.kube/config
디렉터리: C:\Users\USER\.kube
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022-05-26 오후 2:25 5668 config
PS C:\Users\USER> kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready control-plane,master 11d v1.22.8
node2 Ready <none> 11d v1.22.8
node3 Ready <none> 9d v1.22.8
서버를 찾아서 정상적으로 결과가 출력되는 것을 확인할 수 있다.
context 확인하기
- context 목록 확인하기
CURRENT가 *
인 것은, 현재 사용하고있는 current-context라는 의미이다.
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@cluster.local cluster.local kubernetes-admin
- current-context 확인하기
$ kubectl config current-context
cluster 목록 확인하기
$ kubectl config get-clusters
context 전환하기⭐
kubeconfig 파일에 임의로 cluster와 user, 그리고 context를 추가해보자.
- cluster:
server: https://1.1.1.1
name: mycluster
...
- context:
cluster: mycluster
user: myadmin
name: myadmin@mycluster
...
users:
- name: myadmin
저장 후 확인하면 cluster와 context가 추가된 것을 확인할 수 있다.
$ kubectl config get-clusters
NAME
cluster.local
mycluster
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@cluster.local cluster.local kubernetes-admin monitor
myadmin@mycluster mycluster myadmin
context를 전환하는 방법은,
kubeconfig 파일 내에 다음과 같이 직접 선언하거나
current-context: kubernetes-admin@cluster.local
명령형 커맨드를 통해 current-context를 전환할 수 있다.
$ kubectl config use-context myadmin@mycluster
그리고 또 다른 방법으로 kubectx가 있다.
$ kubectx myadmin@mycluster
kubectx
는 손쉽게 cluster context를 변경할 수 있는 툴로, 실제로 많이 사용된다.
새로운 Context 만들기
$ kubectl config set-context new-context --cluster=local-kubernetes --user=nayoungs
그 외
current-context -- Display the current-context
delete-cluster -- Delete the specified cluster from the kubeconfig
delete-context -- Delete the specified context from the kubeconfig
delete-user -- Delete the specified user from the kubeconfig
get-clusters -- Display clusters defined in the kubeconfig
get-contexts -- Describe one or many contexts
get-users -- Display users defined in the kubeconfig
rename-context -- Rename a context from the kubeconfig file
set -- Set an individual value in a kubeconfig file
set-cluster -- Set a cluster entry in kubeconfig
set-context -- Set a context entry in kubeconfig
set-credentials -- Set a user entry in kubeconfig
unset -- Unset an individual value in a kubeconfig file
use-context -- Set the current-context in a kubeconfig file
view -- Display merged kubeconfig settings or a specified kubeconfig file
설명한 것 이외에도 다양한 커맨드 명령들이 존재한다.
참고