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

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

kubeconfig 파일을 사용해 클러스터, 사용자, 네임스페이스, 인증 메커니즘에 대한 정보를 구성해요. kubectl 명령줄 도구는 kubeconfig 파일을 사용해 클러스터 선택과 클러스터의 API 서버 통신에 필요한 정보를 찾아요.

출처: 문서

본문

참고:

경고:

기본적으로 kubectl은 $HOME/.kube 디렉터리에서 config라는 파일을 찾아요. 다른 kubeconfig 파일을 지정하려면 KUBECONFIG 환경 변수를 설정하거나 --kubeconfig 플래그를 설정하면 돼요.

kubeconfig 파일을 만들고 지정하는 단계별 지침은 '여러 클러스터에 대한 접근 구성'을 참고하세요.

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

여러 클러스터가 있고 사용자와 구성 요소가 다양한 방식으로 인증한다고 해 보죠. 예를 들어:

  • 실행 중인 kubelet은 인증서로 인증할 수 있어요.
  • 사용자는 토큰으로 인증할 수 있어요.
  • 관리자는 개별 사용자에게 제공하는 인증서 집합을 가질 수 있어요.

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

컨텍스트 (Context)

kubeconfig 파일의 컨텍스트 요소는 접근 파라미터를 편리한 이름으로 그룹화하는 데 사용돼요. 각 컨텍스트에는 cluster, namespace, user의 세 가지 파라미터가 있어요. 기본적으로 kubectl 명령줄 도구는 현재 컨텍스트(curren context)의 파라미터를 사용해 클러스터와 통신해요.

현재 컨텍스트를 선택하려면:

kubectl config use-context

KUBECONFIG 환경 변수

KUBECONFIG 환경 변수는 kubeconfig 파일 목록을 보관해요. Linux와 Mac에서는 목록이 콜론으로 구분되고, Windows에서는 세미콜론으로 구분돼요. KUBECONFIG 환경 변수는 필수가 아니에요. KUBECONFIG 환경 변수가 없으면 kubectl은 기본 kubeconfig 파일인 $HOME/.kube/config를 사용해요.

KUBECONFIG 환경 변수가 존재하면 kubectl은 KUBECONFIG 환경 변수에 나열된 파일들을 병합한 결과인 유효 구성(effective configuration)을 사용해요.

kubeconfig 파일 병합하기

구성을 보려면 이 명령을 입력하세요.

kubectl config view

앞서 설명한 대로 출력은 단일 kubeconfig 파일에서 온 것일 수도, 여러 kubeconfig 파일을 병합한 결과일 수도 있어요.

kubectl이 kubeconfig 파일을 병합할 때 사용하는 규칙은 다음과 같아요.

  • --kubeconfig 플래그가 설정되면, 지정된 파일만 사용하세요. 병합하지 마세요. 이 플래그의 인스턴스는 하나만 허용돼요. 그렇지 않으면 KUBECONFIG 환경 변수가 설정되었을 때, 병합해야 할 파일 목록으로 사용하세요. KUBECONFIG 환경 변수에 나열된 파일들을 다음 규칙에 따라 병합하세요.
    • 빈 파일 이름은 무시해요.
    • 역직렬화할 수 없는 내용이 있는 파일은 오류를 발생시켜요.
    • 특정 값이나 맵 키를 설정하는 첫 번째 파일이 이깝니다.
    • 값이나 맵 키를 절대 변경하지 마세요. 예: current-context를 설정하는 첫 번째 파일의 컨텍스트를 보존하세요. 예: 두 파일이 red-user를 지정하면, 첫 번째 파일의 red-user 값만 사용하세요. 두 번째 파일이 red-user 아래에 충돌하지 않는 항목이 있어도 버리세요.
    • KUBECONFIG 환경 변수를 설정하는 예시는 'KUBECONFIG 환경 변수 설정'을 참고하세요.
    • 그렇지 않으면 병합 없이 기본 kubeconfig 파일인 $HOME/.kube/config를 사용하세요.
  • 이 체인의 첫 번째 적중을 기준으로 사용할 컨텍스트를 결정하세요.
    • --context 명령줄 플래그가 있으면 사용하세요.
    • 병합된 kubeconfig 파일의 current-context를 사용하세요.
    • 이 시점에서 빈 컨텍스트는 허용돼요.
  • 클러스터와 사용자를 결정하세요. 이 시점에서 컨텍스트가 있을 수도 없을 수도 있어요. 사용자와 클러스터에 대해 각각 한 번씩 실행되는 이 체인의 첫 적중을 기준으로 클러스터와 사용자를 결정하세요.
    • 명령줄 플래그가 있으면 사용하세요: --user 또는 --cluster.
    • 컨텍스트가 비어 있지 않으면 컨텍스트에서 사용자 또는 클러스터를 가져와요.
    • 이 시점에서 사용자와 클러스터는 비어 있을 수 있어요.
  • 사용할 실제 클러스터 정보를 결정하세요. 이 시점에서 클러스터 정보가 있을 수도 없을 수도 있어요. 이 체인에 따라 클러스터 정보의 각 부분을 구성하세요. 첫 적중이 이깁니다.
    • 명령줄 플래그가 있으면 사용하세요: --server, --certificate-authority, --insecure-skip-tls-verify.
    • 병합된 kubeconfig 파일의 클러스터 정보 속성이 있으면 사용하세요.
    • 서버 위치가 없으면 실패하세요.
  • 사용할 실제 사용자 정보를 결정하세요. 사용자당 인증 기술 하나만 허용하는 것을 제외하고 클러스터 정보와 같은 규칙으로 사용자 정보를 구성하세요.
    • 명령줄 플래그가 있으면 사용하세요: --client-certificate, --client-key, --username, --password, --token.
    • 병합된 kubeconfig 파일의 사용자 필드를 사용하세요.
    • 두 개의 충돌하는 기술이 있으면 실패하세요.
  • 아직 없는 정보는 기본값을 사용하고 잠재적으로 인증 정보를 묻을 수 있어요.

파일 참조 (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

더 알아보기 (Learn more)