Cloud/k8s-CKA

[CKA] 39. kubeconfig 구조 분석 및 관리

jinkwon.kim 2023. 10. 26. 00:34
728x90
반응형

개요

k8s의 설정 파일인 kubeconfig의 구조 분석 및 필요 성을 알아보겠습니다.

파일의 위치

kubeadmn으로 설치를 하였다면 kubeconfig파일의 위치는 아래와 같습니다. 

원본 파일

/etc/kubernetes/admin.conf

복사된 파일

kubectl은 기본적으로 아래 경로에있는 설정 파일을 사용합니다. 그래서 kubeadm로 설치시 마지막에 원본파일을 아래 경로에 복사하게 합니다.

 

$HOME/.kube/config

kubeconfig 목적

kubectl이 다양한 사용자 및 cluster의 조합을 사용하여 k8s 접근을 위해서 사용하는 설정 파일입니다.

kubeconfig 주요 정보

cluster 연결 정보 제공

cluster의 API 서버 주소 및 CA 인증서 정보를 제공합니다.

인증 정보 제공

cluster에 접근하기 위한 사용자의 인증 정보 (예: 인증서, 토큰, 사용자명/비밀번호)를 저장합니다.

context 관리

여러 cluster 및 사용자에 대한 접근을 관리하며, 어떤 cluster를 어떤 사용자의 인증 정보로 접근할지 결정합니다.

기본 설정 정의

현재 사용 중인 cluster, 사용자, 네임스페이스 등을 지정하여 kubectl 명령어의 기본 동작을 정의합니다.

kubeconfig 구조

아래 명령을 사용하면 kubeconfig 파일의 내용을 간약하게 볼 수 있습니다. 

 

kubectl config view

 

$HOME/.kube/config 파일의 내용에서 인증서 관련 정보만 요약하여 보여주는 정보입니다.

 

파일 내용

cat ~/.kube/config 파일 내용

 

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.0.26:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: default
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED

    client-key-data: REDACTED

파일 주요 내용 분석

clusters

cluster에 대한 연결 정보를 포함합니다.

name

cluster의 이름

server

cluster의 API 서버 주소.

certificate-authority-data

cluster의 CA base64 정보 

/etc/kubernetes/pki/ca.crt 를 base64로 encoding한 값입니다. 

base64 -w0 /etc/kubernetes/pki/ca.crt

contexts

cluster와 사용자의 조합을 포함하여 `kubectl`이 어떻게 동작해야 하는지를 정의합니다.

name

context의 이름.

cluster

사용할 cluster의 이름.

user

사용할 사용자의 이름.

namespace

기본 네임스페이스.

current-context

현재 사용 중인 context의 이름. 이 context는 `kubectl` 명령어를 실행할 때 기본적으로 사용됩니다.

users

cluster에 접근하기 위한 사용자의 인증 정보를 포함합니다.

name

사용자의 이름.

client-certificate-data

cluster의 CA base64 정보

/etc/kubernetes/pki/ca.crt 를 base64로 encoding한 값입니다. 

base64 -w0 /etc/kubernetes/pki/ca.crt

client-key

키의 경로.

token

bearer token.

username

기본 인증에 사용되는 사용자명

password

기본 인증에 사용되는 비밀번호.

 

이 외에도 `kubeconfig` 파일에는 기타 설정과 확장 가능한 기능을 위한 여러 옵션이 포함될 수 있습니다. 파일은 YAML 형식으로 작성되며, 한 개 이상의 `kubeconfig` 파일을 병합하여 사용할 수도 있습니다.

kubeconfig 파일 내용 간의 관계

unser와 cluster 관계

kubeconfig 파일에서 cluster와 user의 관계는 context가 연결해 줍니다. 

context - name을 보면 연결관계를 알 수 있습니다. 

 

{user-name}@{cluster name} 

 

관계입니다. 

그리고 현재 용 중인 context는  current-context로 확인이 가능합니다.

namespace 지정

context를 통해서 사용하려는 기본 namespace 또한 지정이 가능합니다.

kubeconfig 관리 명령어

kubeconfig 파일은 kubectl을 통하여 관리가 가능합니다. 다음은 kubeconfig관련하여 유용한 명령어입니다.

사용 중인 kubeconfig 파일 확인

kubectl config view

현재 context의 cluseter와 user 확인

kubectl config current-context

모든 context 목록 확인

kubectl config get-contexts

특정 context로 전환

kubectl config use-context [CONTEXT_NAME]

새로운 context추가

kubectl config set-context [CONTEXT_NAME] --cluster=[CLUSTER_NAME] --user=[USER_NAME] --namespace=[NAMESPACE]

context 이름 변경

kubectl config rename-context [OLD_NAME] [NEW_NAME]

context 삭제

kubectl config delete-context [CONTEXT_NAME]

cluster 정보 설정

kubectl config set-cluster [CLUSTER_NAME] --server=[API_SERVER_URL] --certificate-authority=[CA_FILE_PATH]

user 정보 추가

kubectl config set-credentials [USER_NAME] --client-certificate=[CERT_FILE_PATH] --client-key=[KEY_FILE_PATH]

특정 namespace를 context의 기본값으로 설정

kubectl config set-context --current --namespace=[NAMESPACE]

kubeconfig 파일 병합

여러 kubeconfig 파일들을 하나로 병합하려면 KUBECONFIG 환경 변수를 사용하면 됩니다.

export KUBECONFIG=~/.kube/config:~/.kube/kubconfig2

kubectl config view --flatten > ~/.kube/merged_kubeconfig

다른 kubeconfig 파일 확인

기본 kubeconfig 파일이 아닌 다른 kubeconfig파일의 내용을 보려면 --kubeconfig {파일명} 을 사용하면 됩니다.

 

kubectl config --kubeconfig ./my-kube-config get-clusters

 

정리 

kubeconfig 파일은 kubelet이 cluster를 사용하기 편하게 하기 위한 설명 파일이다. 

kubeoncifg의 구조는 cluster, user, context로 이루어져 있는데. context를 통하여 cluster와 user를 연결하는 구조로 되어있다.

Next Post

[CKA] 40. API 그룹과 목적

728x90
반응형