kubeconfig 간단 설명

by 라온클

kubeconfig 파일이란?

kubeconfig 파일들을 사용하면 클러스터, 사용자, 네임스페이스 그리고 인증 메커니즘에 대한 정보를 관리할 수 있습니다.

kubeconfig 파일은, kubectl이 클러스터에 대한 접근을 구성하는 데 사용되는 파일을 말합니다. kubectl은 kubeconfig파일을 사용하여 클러스터 선택과 클러스터의 API 서버와의 통신에 필요한 정보를 찾습니다.

⚠️ 주의할 점 : kubeconfig 파일은 구성 파일을 참조하는 일반적인 방법을 의미할 뿐, ‘kubeconfig’ 라는 이름의 파일이 있다는 의미는 아닙니다.

기본적으로 kubectl은 kubeconfig 파일로 $HOME/.kube/config 파일을 바라봅니다.

하지만 kubeconfig 플래그를 사용해서 원하는 파일을 kubeconfig파일로 지정할 수도 있습니다.

kubeconfig파일로 다른 파일을 사용하려면, 두가지 방법을 쓸 수 있습니다.

  • 환경 변수 KUBECONFIG에 지정하려는 파일을 추가하기
  • kubeconfig 플래그로 지정하기

KUBECONFIG 환경 변수

KUBECONFIG 환경 변수는 kubeconfig 파일들의 목록을 병합하여 보유합니다. 

KUBECONFIG 환경 변수 안에서 각 kubeconfig 파일들은 Linux와 Mac에서는 콜론(:), Windows에서는 세미콜론 (;)으로 구분됩니다.

KUBECONFIG 환경 변수가 필수는 아닙니다.

  • KUBECONFIG 환경 변수가 있으면, kubectl은 KUBECONFIG 환경 변수 안에 나열된 파일을 병합한 구성을 사용합니다.
  • KUBECONFIG 환경 변수가 없으면, kubectl은 기본 kubeconfig 파일인 $HOME/.kube/config 를 사용합니다.

<참고>

KUBECONFIG 환경 변수에 $HOME/.kube/config 를 추가하는 방법은 다음과 같습니다.

# Linux 기준
export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config

# Windows Powershell 기준
$Env:KUBECONFIG="$Env:KUBECONFIG;$HOME\.kube\config"

kubeconfig 파일 보기

# view 명령어를 사용하여 보기
kubectl config view

# view 명령어를 사용하여 'config-demo'파일만 보기
kubectl config view --kubeconfig=config-demo

# cat 명령어를 사용하여 보기
cat $HOME/.kube/config

# cat 명령어를 사용하여 'config-demo'파일만 보기
cat config-demo

kubeconfig 파일 이해하기

위에서 “kubeconfig 파일들을 사용하면 클러스터, 사용자, 네임스페이스 그리고 인증 메커니즘에 대한 정보를 관리할 수 있습니다.”라고 했습니다.

지금부터 kubeconfig 파일의 구성요소들을 간단히 알아보겠습니다.

clusters

clusters 안에는 접속 대상이 되는 각 클러스터들의 정보가 들어갑니다.

클러스터의 정보는 다음과 같습니다.

  • 인증 기관 정보(certificate-authority)
  • API 서버의 주소(server)

contexts

context의 정보는 다음과 같습니다.

  • 클러스터
  • 네임스페이스
  • 사용자

예를 들어 이미지의 노란 부분에 있는 dev-frontend 컨텍스트는 

“development클러스터의 frontend네임스페이스로 접근하는데 developer사용자 자격 증명을 사용하세요”

고 말하는 역할을 합니다.

context는 kubectl이 다수의 클러스터나 사용자를 관리할 경우 유용하게 쓸 수 있습니다.

current-contexts

current-context는 현재 사용 중인 컨텍스트가 무엇인지 나타내는 부분입니다.

그림에서는 ‘dev-frontend’라는 컨텍스트를 현재 사용중이라고 나와있습니다.

kubectl 명령어를 통해 클러스터에 접속할 때는 current-context(현재 사용중인 컨텍스트)에 설정된 사용자의 자격을 가지고 설정된 클러스터에 접속하게 됩니다.

# 현재 컨텍스트를 보는 방법
kubectl config current-context      

# config-demo파일을 사용하여 현재 컨텍스트를 설정하는 방법
kubectl config --kubeconfig=config-demo use-context {context 이름}

# config-demo파일을 사용하여 현재 컨텍스트의 정보만 보는 방법
kubectl config --kubeconfig=config-demo view --minify

users

users는 클러스터에 접속하는 사용자의 정보가 들어가는 부분입니다.

사용자의 정보는 다음과 같습니다.

  • 클라이언트의 인증서(client-certificate)
  • 클라이언트의 키(client-key)

쿠버네티스 클러스터는 클러스터의 인증 기관 정보(certificate-authority)를 통해 검증할 수 있는 클라이언트의 인증서와 키를 이용해서 접속하는 사용자를 허용하게 됩니다.

kubeconfig 파일 만들기

cluster, user, context 들에 대한 정보를 가진 구성 파일을 만드는 방법은 다음과 같습니다.

1단계 : 간단하게 cluster, user, context만 지정하여 ‘ config-demo ‘라는 이름의 프레임워크 파일을 작성합니다.

yaml파일 출처 : 쿠버네티스 공식 문서 > 다중 클러스터 접근 구성 > 클러스터, 사용자, 컨텍스트 정의

apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
  name: development     
- cluster:
  name: scratch

users:
- name: developer
- name: experimenter

contexts:
- context:
  name: dev-frontend
- context:
  name: dev-storage
- context:
  name: exp-scratch

2단계 : 프레임워크 파일에 명령어로 클러스터의 세부사항들을 추가합니다.

# 클러스터 세부사항 추가하기 예시
kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster scratch --server=https://5.6.7.8 --insecure-skip-tls-verify



# 사용자 세부사항 추가하기 예시
kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password



# 컨텍스트 세부사항 추가하기 예시
kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-scratch --cluster=scratch --namespace=default --user=experimenter

3단계 : 구성 파일 완성본을 확인합니다.

kubectl config --kubeconfig=config-demo view

<결과>

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
- cluster:
    insecure-skip-tls-verify: true
    server: https://5.6.7.8
  name: scratch
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    password: some-password
    username: exp

참고한 자료

You may also like