kubeconfig 파일로 클러스터 접근 구성하기

kubeconfig 파일로 클러스터 접근 구성하기 (Organizing Cluster Access Using kubeconfig Files)

kubeconfig 파일을 사용하면 클러스터, 사용자, 네임스페이스, 인증 메커니즘에 관한 정보를 정리할 수 있어요. kubectl 명령줄 도구는 kubeconfig 파일을 이용해 클러스터를 선택하고 클러스터의 API 서버와 통신하는 데 필요한 정보를 찾아요.

참고: 클러스터 접근을 구성하는 데 쓰는 파일을 kubeconfig 파일이라고 불러요. 이는 설정 파일을 가리키는 일반적인 표현이에요. kubeconfig라는 이름의 파일이 반드시 존재한다는 뜻은 아니에요.

경고: 기본적으로 kubectl$HOME/.kube 디렉터리에서 config라는 파일을 찾아요. KUBECONFIG 환경 변수를 설정하거나 --kubeconfig 플래그를 지정해서 다른 kubeconfig 파일을 지정할 수도 있어요. kubeconfig 파일을 만들고 지정하는 단계별 지침은 Configure Access to Multiple Clusters를 참고하세요.

여러 클러스터, 사용자, 인증 메커니즘 지원하기

kubeconfig 파일을 사용하면 클러스터, 사용자, 네임스페이스를 정리할 수 있어요. 또한 컨텍스트(context) 를 정의해서 클러스터와 네임스페이스 사이를 빠르고 쉽게 전환할 수 있죠.

컨텍스트 (Context)

kubeconfig 파일에서 컨텍스트(context) 요소는 접근 파라미터들을 편리한 이름 아래로 묶는 데 사용돼요. 각 컨텍스트는 cluster, namespace, user라는 세 가지 파라미터를 가져요. 기본적으로 kubectl 명령줄 도구는 현재 컨텍스트(current context) 의 파라미터를 이용해 클러스터와 통신해요.

KUBECONFIG 환경 변수

KUBECONFIG 환경 변수는 kubeconfig 파일들의 목록을 담고 있어요. Linux와 Mac에서는 목록이 콜론으로 구분되고, Windows에서는 세미콜론으로 구분돼요. KUBECONFIG 환경 변수는 필수가 아니에요.

KUBECONFIG 환경 변수가 없으면 kubectl은 기본 kubeconfig 파일인 $HOME/.kube/config를 사용해요. KUBECONFIG 환경 변수가 있으면 kubectl은 그 변수에 나열된 파일들을 병합한 결과인 유효 설정(effective configuration)을 사용해요.

kubeconfig 파일 병합하기

자신의 설정을 보려면 다음 명령을 입력해요:

kubectl config view

앞서 설명했듯이, 출력은 단일 kubeconfig 파일에서 나올 수도 있고 여러 kubeconfig 파일을 병합한 결과일 수도 있어요. kubectl이 kubeconfig 파일을 병합할 때 사용하는 규칙은 다음과 같아요:

  1. --kubeconfig 플래그가 설정되면 지정된 파일만 사용해요. 병합하지 않아요. 이 플래그는 하나만 허용돼요. 그렇지 않고 KUBECONFIG 환경 변수가 설정되면 병합해야 할 파일 목록으로 사용해요. KUBECONFIG 환경 변수에 나열된 파일들을 다음 규칙에 따라 병합해요. (KUBECONFIG 환경 변수 설정 예시는 Setting the KUBECONFIG environment variable을 참고하세요.) 그렇지 않으면 기본 kubeconfig 파일인 $HOME/.kube/config를 병합 없이 사용해요.
    • 빈 파일 이름은 무시해요. ... 예시: 두 파일이 red-user를 지정하면, 첫 번째 파일의 red-user 값만 사용해요. 두 번째 파일이 red-user 아래에 충돌하지 않는 항목을 갖고 있더라도 버려요.
  2. 이 체인에서 첫 번째 적중을 기준으로 사용할 컨텍스트를 결정해요. 이 시점에서 빈 컨텍스트가 허용돼요.
    1. --context 명령줄 플래그가 있으면 사용해요.
    2. 병합된 kubeconfig 파일의 current-context를 사용해요.
  3. 클러스터와 사용자를 결정해요. 이 시점에서 컨텍스트가 있을 수도 없을 수도 있어요. 클러스터 정보의 각 조각을 이 체인을 기반으로 구성해요. 첫 번째 적중이 이겨요. (이 시점에서 클러스터 정보가 있을 수도 없을 수도 있어요.)
    1. 명령줄 플래그(--server, --certificate-authority, --insecure-skip-tls-verify)가 있으면 사용해요.
    2. 병합된 kubeconfig 파일에서 클러스터 정보 속성이 있으면 사용해요.
    3. 서버 위치가 없으면 실패해요.
  4. 사용할 실제 사용자 정보를 결정해요. 클러스터 정보와 같은 규칙으로 사용자 정보를 구성하되, 사용자당 인증 기술은 하나만 허용해요.
    1. 명령줄 플래그(--client-certificate, --client-key, --username, --password, --token)가 있으면 사용해요.
    2. 병합된 kubeconfig 파일의 user 필드를 사용해요.
    3. 충돌하는 기술이 두 개 있으면 실패해요.
  5. 아직 빠진 정보가 있으면 기본값을 사용해요.

파일 참조 (File references)

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

더 알아보기