Server/Kubernetes

kubeconfig파일을 사용하여 클러스터 접근 구성

범데이 2022. 12. 17. 14:37

개요

kubeconfig사용법을 찾아보다가, kubernetes공식 사이트에서 제공하는 가이드 보았고,

이를 직접 번역하여 포스팅하게 되었다.

(원문 링크: https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)

 

 

 


kubeconfig 파일을 사용하여 클러스터 접근 구성

kubeconfig 파일을 사용하여 클러스터, 유저, 네임스페이스 및 인증 메커니즘 정보를 구성해보자.

kubectl 명령줄 도구는 kubeconfig 파일을 사용하여 클러스터를 선택하고 API 서버와 통신하는 데 필요한 정보를 찾는다.

 

참고: kubeconfig파일은 클러스터에 대한 액세스를 구성하는 데 사용되는 파일을 호출한다. 이것은 구성 파일을 참조하는 일반적인 방법이다. 그렇다고 kubeconfig라는 파일이 있다는 의미는 아니다.

경고: 신뢰할 수 있는 원본의 kubeconfig 파일만 사용해야 한다. 특수하게 조작된 kubeconfig파일을 사용하면 악성 코드가 실행되거나 파일이 노출될 수 있다. 신뢰할 수 없는 kubeconfig 파일을 사용해야 하는 경우 shell 스크립트와 마찬가지로 먼저 신중하게 검사해야 한다.

 

기본적으로, kubectl$HOME/.kube 디렉터리에서 config라는 이름의 파일로 존재한다.

만일 다른 kubeconfig를 지정하고 싶다면 KUBECONFIG 환경 변수를 설정하거나 --kubeconfig 플래그를 주어 지정할 수 있다.

 

kubeconfig 파일을 만들고 지정하는 단계별 지침은 이사이트를 참고하자.

 

 


여러 클러스터와 유저, 인증 메커니즘을 지원

클러스터가 여러 개 있고 사용자와 인증 컴포넌트가 다양한 방법으로 있다고 가정한다.

예를 들어,

  • 실행 중인 kubelet은 인증서를 사용하여 인증할 수 있다.
  • 사용자는 토큰을 사용하여 인증할 수 있다.
  • 관리자는 개별 사용자에게 제공하는 인증서 세트를 가지고 있을 수 있다.

kubeconfig파일을 사용하여 클러스터, 사용자 및 네임스페이스를 구성할 수 있다. 또한 빠르고 쉽게 클러스터 및 네임스페이스를 전환할 수 있는 컨텍스트를 정의할 수 있다.

 

 


컨텍스트(Context)

kubeconfig 파일의 context요소는 액세스 매개 변수를 편리한 이름으로 그룹화하는 데 사용된다. 각각의 context는 세가지 파라미터를 가진다. (cluster, namespace, user)

기본적으로, kubectl 명령줄 도구는 클러스터와 소통할 현재 컨텍스트를 매개변수로 사용한다.

 

현재 컨텍스트를 고르기 위해 다음과 같이 한다.

kubectl config use-context

 

 


KUBECONFIG 환경변수

KUBECONFIG 환경변수는 kubeconfig 파일 목록을 갖는다.

Linux와 Mac에서는 리스트가 콜론(:)으로 구분되고, Window에서는 세미 콜론(;)으로 구분된다. KUBECONFIG환경변수는 요구되지 않는다. 만약 KUBECONFIG환경변수가 존재하지 않으면, kubectl은 기본 kubeconfig파일($HOME/.kube/config)을 사용한다.

 

만약 KUBECONFIG환경 변수가 있다면, kubectl은 KUBECONFIG 환경 변수에 나열된 파일을 병합한 결과인 효과적인 구성을 사용한다.

 

 


kubeconfig파일 합치기

구성을 확인하려면, 다음 명령어를 입력한다.

$ kubectl config view

 

앞에서 설명한 것처럼 출력은 단일 kubeconfig파일에서 나오거나 여러 kubeconfig파일을 병합한 결과일 수 있다.

 

 

kubectl이 kubeconfig파일을 합쳐 사용할 때의 규칙은 다음과 같다.

1. 만일 --kubeconfig플래그를 설정한다면, 지정된 파일만 사용하고, 병합하지 않는다. 오직 하나의 인스턴스만 플래그로 지정할 수 있다. 

  그렇지 않고 KUBECONFIG 환경 변수가 설정 되어 있으면 병합해야 하는 파일 목록으로 사용한다. 다음 규칙에 따라 KUBECONFIG 환경 변수에 나열된 파일을 병합한다.

  • 빈 파일이름은 무시한다.
  • 역직렬화할 수 없는 콘텐츠가 있는 파일에 대해 오류를 생성한다.
  • 특정 값을 설정하거나 키를 매핑하는 첫 번째 파일이 우선한다.
  • 절대 값이나 맵 키를 변경하지 않아야 한다.
    • 예) 현재 컨텍스트를 설정하기 위해 첫 번째 파일의 컨텍스트를 유지한다.
    • 예) 두 파일이 red-user를 지정하는 경우 첫번째 파일의 red-user값만 사용해야한다. 두 번째 파일에 red-user 아래에 충돌하지 않는 항목이 있더라도 해당 항목을 버린다.

KUBECONFIG 환경 변수 설정의 예는 이 사이트를 참조하자.

 

그렇지 않으면 병합하지 않고 기본 kubeconfig 파일인 $HOME/.kube/config를 사용한다.

 

 

2. 이 다음 경우 중 첫 번째로 적중하는 것을 사용할 context로 결정한다.

  1. --context 명령줄 플래그가 있을 시 이를 사용한다.
  2. 병합한 kubeconfig 파일중에 current-context값을 사용한다.

이 때, 빈 context가 허용된다.

 

 

3. cluster와 user를 결정한다. 이 시점에서 context가 있을 수도 있고 없을 수도 있다. 두 번 실행되는 아래 경우 중의 첫 번째로 적중하는 것으로 클러스터와 사용자를 결정한다. (한 번은 사용자용이고 다른 한 번은 클러스터용이다.)

  1. --user 또는 —cluster와 같은 명령줄 플래그가 있으면 사용한다.
  2. context가 비어있지 않으면, context에서 user와 cluster를 가져온다.

이 때, user와 cluter는 빈 값이 허용된다.

 

 

4. 사용할 실제 클러스터 정보를 결정한다. 이 때, 클러스터 정보가 있을 수도 있고 없을 수도 있다. 아래의 경우 중 첫 번째로 적중하는 것으로 각 클러스터 정보를 구축한다.

  1. --server, --certificate-authority, --insecure-skip-tls-verify 명령줄 플래그가 존재하는경우, 이를 사용한다.
  2. 병합된 kubeconfig 파일에 클러스터 정보 속성이 있으면, 이를 사용한다.
  3. 서버 위치 정보가 없으면, 실패한다.

 

5. 사용할 실제 사용자 정보를 결정한다. 클러스터 정보와 동일한 규칙을 사용하여 사용자 정보를 작성한다. 단, 사용자당 하나의 인증 기술만 허용된다.

  1. --client-certificate, --client-key, --username, --password, --token과 같은 명령줄 플래그가 있으면 사용한다.
  2. 병합된 kubeconfig파일에 user필드가 있으면 사용한다.
  3. 두가지 상충하는 기술이 있으면, 실패한다.

 

6. 위와 같이 했음에도 누락된 정보가 있을 경우 기본 값을 사용하고 잠재적으로 인증 정보를 묻는 메시지를 표시한다.

 

 


파일 참조

kubeconfig파일의 파일 및 경로 참조는 kubeconfig파일의 위치에 상대적이다. 명령줄의 파일 참조는 현재 작업 디렉터리에 상대적이다. $HOME/.kube/config에는 상대 경로가 상대적으로 저장되고 절대 경로가 절대적으로 저장된다.

 

 


Proxy

다음과 같이 kubeconfig 파일에서 proxy-url을 사용하여 각 클러스터마다 프록시를 사용하도록 kubectl을 구성할 수 있다.

apiVersion: v1
kind: Config

clusters:
- cluster:
    proxy-url: <http://proxy.example.org:3128>
    server: <https://k8s.example.org/k8s/clusters/c-xxyyzz>
  name: development

users:
- name: developer

contexts:
- context:
  name: development

 


 

#Reference

https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/

반응형